2015-01-19 2 views
0

У меня есть многопользовательский почтовый скрипт, который берет POST-адрес электронной почты и отправляет ему простой адрес в HTML и/или обычный текст. Он корректно отображается в Gmail и Outlook, но не eM (и даже не доходит до сервера Communigate). Код:Многопользовательские электронные письма, отображаемые неверно в eM-клиенте

<?php 
$email_address = addslashes($_POST['email_address']); 

if (!filter_var($email_address, FILTER_VALIDATE_EMAIL)) { 
    header("Location: ./?error=invalid-email"); 
    exit(); 
} 

$subject_line = "This is a test multi-part email"; 

$boundary = uniqid(); 

$headers = "MIME-Version:1.0\r\n"; 
$headers .= "From: Maggie Multipart <[email protected]>\r\n"; 
$headers .= "To: " . $email_address . "\r\n"; 
$headers .= "Content-Type: multipart/alternative;boundary=" . $boundary . "\r\n"; 

$message = "This is a MIME encoded message."; 
$message .= "\r\n\r\n--" . $boundary . "\r\n"; 

$message .= "Content-Type: text/plain;charset=utf-8\r\n\r\n"; 
$message .= "Hello,\nThis is a test email, the text/plain version.\n\nRegards\nMaggie Multipart"; 
$message .= "\r\n\r\n--" . $boundary . "\r\n"; 

$message .= "Content-Type: text/html;charset=utf-8\r\n\r\n"; 
$message .= "<p>Hello,<br>This is a test email, the text/html version.</p><p>Regards<br><strong>Maggie Multipart</strong></p>"; 
$message .= "\r\n\r\n--" . $boundary . "--"; 

mail("", $subject_line, $message, $headers); 

header("Location: ./?success=email-sent"); 
exit(); 

// var_dump($_POST); 
?> 

сообщение получено в Ет следующим образом:

Content-Type: Текст/равнинный, кодировка = UTF-8

Здравствуйте,

Это тестовая электронная почта, текстовая/простая версия.

С уважением

Мэгги Multipart

Однако ЕМ настроен на получение HTML-писем (и делает это часто). Может кто-то помочь мне решить эту проблему? Я не хватает заголовков?

ответ

0

Мой общий совет по созданию электронных писем: не делайте этого самостоятельно (с некоторыми строковыми функциями или операторами). Мое оружие выбора - swiftmailer, но есть и другие доступные библиотеки в Интернете.

<?php 
require_once('autoload.php'); // swiftmailer was installed via Composer 

$message = Swift_Message::newInstance('This is a test multi-part email') 
    ->setBody(
     "Hello,\nThis is a test email, the text/plain version.\n\nRegards\nMaggie Multipart", 
     'text/plain', 
     'utf-8' 
    ) 
    ->addPart(
     "<p>Hello,<br>This is a test email, the text/html version.</p><p>Regards<br><strong>Maggie Multipart</strong></p>", 
     'text/html', 
     'utf-8' 
    ) 
    ->setFrom(array('[email protected]' => '...')) 
    ->setTo(array('[email protected]' => '...')); 

$transport = Swift_SmtpTransport::newInstance('MSERV', 25, 'tls') 
    ->setUsername('...') 
    ->setPassword('...'); 

$mailer = Swift_Mailer::newInstance($transport); 
$result = $mailer->send($message);