使用 PHP 的邮件发送 mime 编码电子邮件的正确格式

Posted

技术标签:

【中文标题】使用 PHP 的邮件发送 mime 编码电子邮件的正确格式【英文标题】:Correct format for sending mime-encoded email using PHP's mail 【发布时间】:2013-05-13 00:44:40 【问题描述】:

使用 php 的邮件功能创建用于发送的 mime 多部分电子邮件的正确方法是什么?

    $boundary = uniqid(rand(), true);

    $headers =  "From: <noreply@example.com>\r\n";
    $headers .= "Reply-To: <noreply@example.com>\r\n";
    $headers .= "MIME-Version: 1.0\r\n";
    $headers .= "Content-Type: multipart/alternative; boundary=$boundary\r\n\r\n";
    $headers .= "This is a MIME encoded message.\r\n\r\n";
    $headers .= "--$boundary\r\n" .
                "Content-Type: text/plain; charset=ISO-8859-1\r\n" .
                "Content-Transfer-Encoding: base64\r\n\r\n";
    $headers .= chunk_split(base64_encode($plaintext));
    $headers .= "--$boundary\r\n" .
                "Content-Type: text/html; charset=ISO-8859-1\r\n" .
                "Content-Transfer-Encoding: base64\r\n\r\n";
    $headers .= chunk_split(base64_encode($body)); // chunk_split adds the ending "\r\n"
    $headers .= "--$boundary--\r\n";
    //$headers .= ".\r\n";

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

我尝试了上述方法,但 PHP 似乎忽略了它,而是发送了我在服务器上收到的这封空电子邮件:

...
...
To: <....>
Subject: Test Email
X-PHP-Originating-Script: 0:Mail.php
From: <noreply@example.com>
Reply-To: <noreply@example.com>
MIME-Version: 1.0
Content-Type: multipart/alternative;
    boundary="1923630041519679ed1ddd25.14582240"
Message-ID: <20130517184149.28AB0A4C4@example.com>
Date: Fri, 17 May 2013 14:41:49 -0400
X-UI-Loop: V01:211ZxL2TMQ4=:uQC6SYy+5ULsBgI8/Yn6FAKnX8a66b5mzBQJFWhGo82c
 3a8ZtvbDIKAYJ3vIkfg3

--1923630041519679ed1ddd25.14582240
Content-Type: text/plain; charset="ISO-8859-1"
Content-Transfer-Encoding: base64


--1923630041519679ed1ddd25.14582240
Content-Type: text/html; charset="ISO-8859-1"
Content-Transfer-Encoding: base64


--1923630041519679ed1ddd25.14582240--

在 PHP 5.4.9 上测试。

【问题讨论】:

【参考方案1】:

我得到了上面的代码。似乎我需要用 linux \n 替换所有 Windows \r\n。我还删除了boundary="..." 之后的重复换行符。

【讨论】:

以上是关于使用 PHP 的邮件发送 mime 编码电子邮件的正确格式的主要内容,如果未能解决你的问题,请参考以下文章

使用 S/MIME (PHP) 发送带有附件的电子邮件

使用 utf-8 文件名发送 MIME 编码的电子邮件附件

无法在python中使用MIME发送带有pdf附件的电子邮件

带有附件的梨邮件在 $mime = new Mail_mime 处失败

从 PHP 发送 MIME 电子邮件时,Exim 会覆盖“发件人”标头

PHP 发送 MIME 电子邮件...不再起作用