2013-08-29 1 views
3

Это будет мой первый вопрос здесь. Я пытаюсь отправить многостраничную почту, содержащую как html, так и обычный текст. Это также один из способов получить спам-фильтры и позволить большему количеству людей читать почту в случае отсутствия поддержки HTML. После долгих часов работы в Google, я нашел несколько примеров. Я сделал свой код, который отправляет почту, но она отображает текст с HTML-теги, код, строки и т.д.PHP MIME multipart mail

<?php 
$boundary=md5(uniqid(rand())); 
$header .= "From:My Name<[email protected]>\n"; 
$header .= "Reply-To: [email protected] \n"; 
$header .= 'MIME-Version: 1.0'."\r\n"; 
$header .= 'Content-type: multipart/alternative;boundary=$boundary '."\n"; 

$adres = "[email protected]"; 

$subject = "subject"; 

$message = "This is multipart message using MIME\n"; 
$message .= "--" . $boundary . "\n"; 
$message .= "Content-type: text/plain;charset=iso-8859-1\n"; 
$message .= "Content-Transfer-Encoding: 7bit". "\n\n"; 
$message .= "Plain text version\n\n"; 
$message .="--" . $boundary . "\n"; 
$message .="Content-type: text/html;charset=iso-8859-1\n"; 
$message .= "Content-Transfer-Encoding: 7bit". "\n\n"; 
$message .="<html> 
<body> 
<center> 
<b>HTML text version</b> 
</center> 
</body> 
</html>\n\n"; 
$message .= "--" . $boundary . "--"; 

if(mail($adres, $subject, $message, $header)) 
{ 
print'message sent'; 
} 
else 
{ 
print'message was not sent'; 
} 
?> 

Это результат:

This is multipart message using MIME 
    --c071adfa945491cac7759a760ff8baeb 
    Content-type: text/plain;charset=iso-8859-1 
    Content-Transfer-Encoding: 7bit 

    Plain text version 

    --c071adfa945491cac7759a760ff8baeb 
    Content-type: text/html;charset=iso-8859-1 
    Content-Transfer-Encoding: 7bit 

    <html> 
    <body> 
    <center> 
    <b>HTML text version</b> 
    </center> 
    </body> 
    </html> 

    --c071adfa945491cac7759a760ff8baeb-- 

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

  • добавление/удаление \ r \ n;
  • изменение \ r \ n на \ n;
  • изменение типа контента из альтернативы смешанному;

Я изучаю PHP, и все, что я знаю, это все, что я прочитал и сделал до сих пор. Мне еще предстоит многому научиться, пожалуйста, если бы вы могли сказать мне, где проблема. Я был бы очень благодарен. Приветствую вас.

+0

1. Вы смешивания '\ n' и' \ г \ n'. Помимо тел сообщений, где вы можете использовать w/e, вы хотите, чтобы вы ВСЕГДА использовали '\ r \ n' в разделах заголовков сообщений и содержимого. 2. Просто используйте [PHPMailer] (https://github.com/Synchro/PHPMailer). – Sammitch

+0

3. Я думаю, вам понадобится еще один разрыв строки после этого: '$ message =" Это многостраничное сообщение с использованием MIME \ n ";' – Sammitch

ответ

2

Линия:

$header .= 'Content-type: multipart/alternative;boundary=$boundary '."\n"; 

имеет неправильные кавычки, так $boundary не будет расширяться. Изменить на:

$header .= "Content-type: multipart/alternative;boundary=$boundary\n"; 

И как я уже сказал в комментариях, в заголовках сообщений и раздел содержимого заголовков вы должны использовать \r\n как разрыв строки, так это то, что определено в RFC. Большинство MTA позволят просто \n, но некоторые задушат сообщение, а некоторые спам-фильтры будут считать каждое нарушение RFC в качестве точки к вашему счету спама.

Использование чего-то вроде PHPMailer - это гораздо лучший вариант, потому что он по умолчанию полностью форматирует все и соблюдает почти все неясные, скучные RFC.

+0

Благодарим вас за все ответы. Я собираюсь изменить код как можно скорее. По умолчанию я использовал \ r \ n. Этот код после последних модификаций, где я пытался использовать \ n. Еще раз спасибо. Надеюсь, это решит проблему. –

+0

Я изменил граничную линию, а также \ r \ n, но она по-прежнему дает тот же результат, что и раньше. –

0

Мне кажется, вам нужны цитаты вокруг граничной строки.

попробовать это:

$header .= 'Content-type: multipart/alternative; boundary="' . $boundary . '"\r\n'; 
0

Попробуйте этот пример https://github.com/breakermind/PhpMimeParser/blob/master/PhpMimeClient_class.php

$m = new PhpMimeClient(); 
// Add to 
$m->addTo("[email protected]", "Albercik"); 
$m->addTo("[email protected]", "Adela"); 
// Add Cc 
$m->addCc("[email protected]"); 
// Add Bcc 
$m->addBcc("[email protected]", "BOSS");  
// Add files inline 
$m->addFile('photo.jpg',"zenek123"); 
// Add file 
$m->addFile('sun.png'); 
// create mime 
$m->createMime("Witaj!",'<h1>Witaj jak się masz? <img src="cid:zenek123"> </h1>',"Wesołych świąt życzę!","Heniek Wielki", "[email protected]"); 
// get mime 
// $m->getMime(); 
// Show mime 
echo nl2br(htmlentities($m->getMime()));