2016-10-11 3 views
2

Я использую PHPMailer, чтобы отправить письмо следующимПочта сломана новой строкой после отправки с PHPMailer

$mail = new PHPMailer(true); 
$mail->CharSet = 'UTF-8'; 
$mail->isHTML(); 

$mail->setFrom('[email protected]', 'server'); 
$mail->addReplyTo('[email protected]', 'user'); 
$mail->addAddress('[email protected]'); 
$mail->Subject = $subject; 

$mail->AltBody = getPlainMail($data); 
$mail->Body = getHTMLMail($data); 

try { 
    $mail->send(); 
    echo "SUCCESS"; 
} catch(phpmailerException $e) { 
    echo "FAILURE: ", $e->errorMessage(); 
} 

Это отлично работает для отправки почты с использованием MAMP на моем старом добром Mac OS X, но когда я запустите этот код на сервере Linux, где он должен закончиться, что-то странное происходит с почтой. Пространства, появляющиеся случайным образом в содержимом и стилях, которые не применяются случайным образом, оказались следствием пустых строк между каждыми двумя строками в теле полученной почты. Для простого примера это может выглядеть

<!DOCTYPE html><html><head><title>Test</title></head><bo= 

dy><main><section style=3D"color:red;"><p style=3D"color= 

:black;">test</p></section></main></body></html> 

тогда это должно быть что-то вроде

<!DOCTYPE html><html><head><title>Test</title></head><bo= 
dy><main><section style=3D"color:red;"><p style=3D"color= 
:black;">test</p></section></main></body></html> 

для того, чтобы быть правильным. Я попытался выяснить, откуда берутся эти пустые строки, но я ничего не мог найти. Самое странное, даже может быть, что, когда я заменяю $mail->send(); echo "SUCCESS"; по

$mail->preSend(); 
echo htmlspecialchars($mail->getSentMIMEMessage()); 

я получаю ожидаемый результат.

У кого-нибудь есть идея, откуда берутся эти пустые строки? Любые подсказки оцениваются

+1

Я помню такой вопрос некоторое время назад, и я не могу за всю свою жизнь помнить, в чем проблема: я помню, что размещал комментарий или ответ на него. Я добавил тег «linux» к вопросу, поскольку он имеет отношение к проблеме. Я попытаюсь посмотреть, не могу ли я найти его среди моих многочисленных ответов. –

ответ

0

PHPMailer 5.2 имеет проблемы с несогласованными форматами разрыва строки. Попробуйте с the 6.0 branch (еще не выпущен), который позволяет избежать проблемы или попробуйте установить $mail->LE = "\r\n"; и убедитесь, что весь ваш контент использует тот же формат разрыва строки.

+0

Установка '$ mail-> LE =" \ r \ n "' вызывает только более пустые строки. Особенно вокруг деклараций типа контента и т. Д. (Читайте: тело почты становится сырым телом MIME с большим количеством пустых строк). Давайте посмотрим, что может предложить ветвь 6.0 ... –

+0

Разве ветка 6.0 случайно избегает проблемы, не отправляя почту? «Echo» SUCCESS »был выполнен, но я не получаю никаких писем при выполнении с сервера. Из моего локального MAMP это работает так, как ожидалось ... –

+1

Что произойдет, если вы отправляете через SMTP на localhost? Попробуйте '$ mail-> isSMTP(); $ mail-> Host = 'localhost'; '. Я видел различные экземпляры 'mail()' corruptting content, когда SMTP этого не делает. – Synchro

Смежные вопросы