【发布时间】:2018-02-17 08:52:23
【问题描述】:
我正在尝试使用内置的 PHP 邮件功能来发送包含我的消息的 html 和纯文本版本的多部分消息。我一直在玩不同的编码类型,但是我一直遇到问题。最初我将Content-Transfer-Encoding 设置为Binary,但是这导致每78 个字符放置一个感叹号。我也试过base64,但我相信base64对于我正在做的事情来说太过分了。
我所做的只是发送基本的 HTML,而不是编码的图像、文件或附件。我更喜欢一种仍然允许人类可读源代码的编码方法。
我听说Quoted-Printable 是我正在寻找的东西,但是当我尝试使用该编码类型发送消息时,结果看起来真的很奇怪。我注意到消息源代码中散布着一堆" 符号。
这是我正在使用的代码:
$to = "to@test.com";
$subject = "test subject";
$boundary = uniqid('np');
$headers = "MIME-Version: 1.0\r\n";
$headers .= "From: from-address@test.com\r\n";
$headers .= "Reply-To: reply-address@test.com\r\n";
$headers .= "Return-Path: return-path@test.com\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);
我到底做错了什么?
【问题讨论】:
-
我建议使用库而不是尝试自己滚动这个库。电子邮件很快变得异常复杂。试试github.com/PHPMailer/PHPMailer 之类的东西。相信我,它会让你的生活更轻松。
-
@matt 我尝试了 PHPMailer,但无论我做什么,我都无法让它在我的服务器上工作。它由 GoDaddy 托管。连 GoDaddy 都说只使用内置的邮件功能。
-
然后尝试与mailgun.com 集成。您进行 API 调用,他们会为您构建和发送电子邮件。
标签: php email transfer-encoding quoted-printable