Попытка отправки / отправки html-писем с помощью sendmail, но показывает исходный код письма - PullRequest
1 голос
/ 25 ноября 2011

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

Я отправляю свои электронные письма так:

$fd = popen("/var/qmail/bin/sendmail -t","w") or die("Couldn't Open Sendmail"); 
    fputs($fd, "To: ".$to2." \n"); 
    fputs($fd, "From: \"Test <test@test.com>\" \n"); 
    fputs($fd, "Subject: ".$subject." \n"); 
    fputs($fd, "X-Mailer: PHP5 \n"); 
    fputs($fd, "Mime-Version: 1.0 \n");
    fputs($fd, " \n");
    fputs($fd, "--".$mime_boundary."");
    fputs($fd, "Content-Type: text/html; charset=\"utf-8\"; boundary=\"".$mime_boundary."\" \n");
    fputs($fd, "Content-Transfer-Encoding: quoted-printable \n");   
    fputs($fd, " \n");
    fputs($fd, $sendmail_body." \n"); 
    fputs($fd, "".$mime_boundary."--");
    pclose($fd);

Содержимое html-файла выглядит следующим образом:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Test</title>
<style type="text/css">
body { font: normal 12px Verdana, Arial, Helvetica, sans-serif; }
</style>
</head>
<body>
</body>
</html>

Теперь это работает:

$ fd = popen ("/ var / qmail / bin / sendmail -t", "w") или умри ("Couldn"t Открыть Sendmail ");fputs ($ fd, "To:". $ to1. "\ n");fputs ($ fd, "From: \" Test \ "\ n");fputs ($ fd, "Subject:". $ subject. "\ n");fputs ($ fd, "X-Mailer: PHP5 \ n");fputs ($ fd, "Mime-версия: 1.0 \ n");fputs ($ fd, "Content-Type: multipart / alternative; border = \" ". $ mime_boundary." \ "\ n");fputs ($ fd, "\ n");fputs ($ fd, "-". $ mime_boundary. "\ n");fputs ($ fd, "Content-Type: text / html; charset = \" utf-8 \ "\ n");fputs ($ fd, "Content-Transfer-Encoding: quoted-printable \ n");fputs ($ fd, "\ n");fputs ($ fd, $ sendmail_body. "\ n");fputs ($ fd, "-". $ mime_boundary. "- \ n");pclose ($ fd);

И первая строка моего html-файла пуста или я добавляю \ n перед html-содержимым.

Ответы [ 3 ]

2 голосов
/ 25 ноября 2011

Я думаю, вам следует рассмотреть возможность отправки нескольких частей, так как некоторые клиенты не поддерживают html-письма или просто предпочитают простой текст:

$headers = "From: Example <example@example.com>\r\n
    MIME-Version: 1.0\r\n
    Content-Type: multipart/alternative; boundary={$mime_boundary}\r\n
    X-Mailer: PHP5";

$message = "This is a MIME-Message. If you can read this your client does not support the MIME format.\r\n
\r\n
{$mime_boundary}\r\n
Content-Transfer-Encoding: quoted-printable\r\n
Content-Type: text/plain; charset=utf8;\r\n
\r\n
Text Content encoded in quoted printable
\r\n
\r\n
{$mime_boundary}\r\n
Content-Transfer-Encoding: quoted-printable\r\n
Content-Type: text/html;charset=utf8;\r\n
\r\n
HTML Content encoded in quoted printable
\r\n
--{$mime_boundary}";

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

До тех пор, пока путь и параметры sendmail настроены в php.ini правильно, это будетотправьте письмо по почте через multipart / альтернативный тип.

1 голос
/ 25 ноября 2011

Это сработало для меня:

<?php
$message=<<<EOL
--frontier
Content-type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 7bit
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Test</title>
<style type="text/css">
body { font: normal 12px Verdana, Arial, Helvetica, sans-serif; }
</style>
</head>
<body>
</body>
</html>
--frontier--
EOL;

$fd = popen("/var/qmail/bin/sendmail -t","w") or die("Couldn't Open Sendmail");

fputs($fd, "To: ".$to." \n");
fputs($fd, "From: \"Example\" <example@example.com> \n");
fputs($fd, "Subject: ".$subject." \n");

fputs($fd,"MIME-Version: 1.0\n");
fputs($fd,"Content-type: multipart/alternative; boundary=\"frontier\"\n\n");
fputs($fd,"This is a message with multiple parts in MIME format.\n");

fputs($fd, $message);
pclose($fd);
?>

Надеюсь, это будет полезно

0 голосов
/ 25 ноября 2011
fputs($fd, "X-Mailer: PHP5 \n\n"); 

Попробуйте удалить второй \ n, потому что это признак завершения заголовка.

...