как правильно отправить составное / альтернативное письмо с PHP

Я пытаюсь использовать встроенную почтовую функцию PHP для отправки составных сообщений, содержащих html и текстовую версию моего сообщения. Я играл с разными типами кодирования, но продолжаю сталкиваться с проблемами. Изначально я поставил Content-Transfer-Encoding в Binary но это привело к тому, что восклицательные знаки помещались каждые 78 символов. Я тоже пробовал base64 но я считаю, что base64 излишне для того, что я делаю.

Все, что я делаю, это отправляю базовый HTML, без кодированных изображений, файлов или вложений. Я бы предпочел метод кодирования, который позволял бы читать исходный код человеком.

я слышал, что Quoted-Printable это то, что я ищу, но, когда я попытался отправить сообщения с использованием этого типа кодировки, результат получился действительно странным. Я заметил кучу " символы разбросаны по всему исходному коду сообщения.

Вот код, который я использую:

    $to = "[email protected]";
$subject = "test subject";
$boundary = uniqid('np');
$headers = "MIME-Version: 1.0\r\n";
$headers .= "From: [email protected]\r\n";
$headers .= "Reply-To: [email protected]\r\n";
$headers .= "Return-Path: [email protected]\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";
$message .= "Content-Transfer-Encoding: Quoted-Printable\r\n";
$message .= $plainTextMessage;

$message .= "\r\n\r\n--" . $boundary . "\r\n";
$message .= "Content-Type: text/html; charset=UTF-8\r\n";
$message .= "Content-Transfer-Encoding: Quoted-Printable\r\n";
$message .= $HTMLmessage;

$message .= "\r\n\r\n--" . $boundary . "--";

$ok = mail($to,$subject,$message,$headers);

Какого черта я здесь делаю не так?

0

Решение

Привет, попробуйте следующий код,

    $to = "[email protected]";
$subject = "test subject";
$plainTextMessage = "Hi all";
$HTMLmessage = "<b>Hi all</b>";
//$boundary = uniqid('np');
$boundary = md5(uniqid(time()));
$headers .= "From: [email protected]\r\n";
$headers .= "Reply-To: [email protected]\r\n";
$headers .= "Return-Path: [email protected]\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";
$message .= "Content-Transfer-Encoding: Quoted-Printable\r\n";
$message .= $plainTextMessage;

$message .= "\r\n\r\n--" . $boundary . "\r\n";
$message .= "Content-Type: text/html; charset=UTF-8\r\n";
$message .= "Content-Transfer-Encoding: Quoted-Printable\r\n";
$message .= $HTMLmessage;

$message .= "\r\n\r\n--" . $boundary . "--";

$ok = mail($to,$subject,$message,$headers);

Может это поможет

-1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]