v3shin
@v3shin
Веб-шаман

Как убрать переносы строк в письме?

Всем привет. Возникла проблема с лишними переносами строк при получении писем. Код примерно такой:
function Send() {
	$header = '...';
	$body = $this->CreateBody();
	$result = $this->MailSend($header, $body);
	return $result;
}

function CreateBody() {
	$result = "";
	$result .= $this->EncodeString($this->Body, $this->Encoding);
	return $result;
}

function EncodeString ($str, $encoding = "base64") {
	$encoded = $this->FixEOL($str);
	if (substr($encoded, -(strlen($this->LE))) != $this->LE)
	$encoded .= $this->LE;
	return $encoded;
}

function FixEOL($str) {
	$str = str_replace("\r\n", "\n", $str);
	$str = str_replace("\r", "\n", $str);
	$str = str_replace("\n", $this->LE, $str);
	return $str;
}

function MailSend($header, $body) {
	$to = '...';
	$sbj = '...';
	$rt = @mail($to, $sbj, $body, $header);
	return true;
}


В итоге $body непосредственно перед отправкой формируется правильно, но в письме приходит с лишними переносами, которые корежат текст (скрин из свойств письма в Яндекс Почте). Подскажите, пожалуйста, в какую сторону копать, чтобы исправить текст?

5c38cd95e29c6486618386.png
  • Вопрос задан
  • 132 просмотра
Решения вопроса 1
Скорей всего проблема здесь:
if (substr($encoded, -(strlen($this->LE))) != $this->LE)
  $encoded .= $this->LE;

Я правда не вижу где у вас str попадает в encoded, но если, например, в str терминатор строк LF (что более чем вероятно), а у вас LE это CRLF, то в результате будет LFCRLF. Правильно - выкинуть в конце строки любые терминаторы CR и LF и добавить CRLF.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы