PHP text / html multipart email появляется как горячий текст в hotmail - PullRequest
1 голос
/ 26 марта 2012

Я тестирую автоответчик, состоящий из нескольких частей, с использованием PHP. Проблема в том, что когда я получаю электронное письмо в hotmil, весь контент (включая html и случайные хэши) появляется в виде необработанного текста. Вот мой код:

$cname = "test";
$to = "me@myemail.com";
$autoReplyTo = "me@myemail.com";
$autoReplySubject = "Enquiry";

$mime_boundary = md5(date('U'));

$autoReplyheaders = "From: XXXXX <" . $to . ">" . "\r\n" .
                    "MIME-Version: 1.0" . "\r\n" .
                    "Content-Type: multipart/alternative; boundary=$mime_boundary" .
                    "Content-Transfer-Encoding: 7bit". "\r\n";


$plain_text = "Dear " . $cname . ".\r\n";
$plain_text = "Thank you for contacting us.\r\n";
$plain_text .= "We are currently processing your query and will contact you shortly. We appreciate the time and interest you have shown in our company.\r\n";
$plain_text .= "Sales Team\r\n";
$plain_text .= "Note: This is an auto-generated email, please do not reply.\r\n";


$html_text = '<html><head><title>AUTO REPLY</title></head><body>';
$html_text .= '<p><img src="http://www.xxxxxx.xx/images/logo.png" /></p>';
$html_text .= '<p>Dear '.$cname.',<br />
    Thank you for contacting us.<br />
    We are currently processing your query and will contact you shortly.<br />
    We appreciate the time and interest you have shown in our company.</p>';

$html_text .= '<p><b>Sales Team</b></p>';
$html_text .= '<p><i>Note: This is an auto-generated email, please do not reply.</i></p>';
$html_text .= '</body></html>';


$autoReplyMessage = "Auto reply" . "\r\n\r\n".
"--" . $mime_boundary.
"Content-Type: text/plain; charset=\"iso-8859-1\"".
"Content-Transfer-Encoding: 7bit". "\r\n\r\n".
$plain_text.
"--" . $mime_boundary.
   "Content-Type: text/html; charset=\"iso-8859-1\"".
   "Content-Transfer-Encoding: 7bit". "\r\n\r\n".
$html_text.
"--".$mime_boundary."--";


mail($autoReplyTo, $autoReplySubject, $autoReplyMessage, $autoReplyheaders);

Что я делаю не так?

1 Ответ

1 голос
/ 26 марта 2012

Это может быть или не быть единственной проблемой, но вы пропускаете разрывы строк после Content-Type заголовков в разделах обычный и HTML:

$autoReplyMessage = "Auto reply" . "\r\n\r\n".
"--" . $mime_boundary.
"Content-Type: text/plain; charset=\"iso-8859-1\"\r\n".
// ----------------------------------------------^^^^^
// Added \r\n
"Content-Transfer-Encoding: 7bit". "\r\n\r\n".
$plain_text. "\r\n".
//---------^^^^^^^^^
// Added another linebreak before MIME boundary
"--" . $mime_boundary.
   "Content-Type: text/html; charset=\"iso-8859-1\"\r\n".
// ----------------------------------------------^^^^^
// Added \r\n
   "Content-Transfer-Encoding: 7bit". "\r\n\r\n".
$html_text."\r\n\r\n".
// ---------^^^^^^^^^^
"--".$mime_boundary."--";

Вместо того, чтобы пытаться создавать сообщения multipart / mimeвручную, многие из нас здесь, в SO, порекомендовали бы такую ​​почтовую библиотеку, как PHPMailer , которая справляется с этим гораздо проще.Создание сообщений вручную, как правило, весьма подвержено ошибкам и может привести к несоответствиям между реализациями SMTP-сервером или различиям между переносами строк на собственной платформе.

...