使用 Pear Mail 发送纯文本和 html 电子邮件(如何设置“Content-Type”并正确使用边界)

Posted

技术标签:

【中文标题】使用 Pear Mail 发送纯文本和 html 电子邮件(如何设置“Content-Type”并正确使用边界)【英文标题】:Using Pear Mail to send plain text and html emails (How to set "Content-Type" and use boundary properly) 【发布时间】:2016-12-09 09:23:23 【问题描述】:

我正在尝试开发一种用于发送电子邮件的功能,该功能可用于我网站的各个部分。我希望电子邮件经过 SMTP 身份验证,所以我使用 Pear。

我的函数的一个参数设置为确定电子邮件应该是纯文本、html 还是同时发送(多部分/替代)......

    if($set_content_type == 'text')
        $content_type = 'text/plain';
     elseif($set_content_type == 'html')
        $content_type = 'text/html';
     elseif($set_content_type == 'html_and_text')
        $boundary = uniqid();
        $content_type = 'multipart/alternative; boundary=' . $boundary;
    

然后我使用 Mail_mime 发送电子邮件...

    $mime = new Mail_mime();
    $mime->setHTMLBody($html);
    $mime->setTXTBody($text);
    $body = $mime->get();

    $host = "myhost";
    $port = "25"; // 8025, 587 and 25 can also be used.

    $username = "myusername";
    $password = "mypassword";

    $headers = array (
        'From' => $from,
        'To' => $to,
        'Subject' => $subject,
        'Content-Type:' => $content_type);

    $headers = $mime->headers($headers);
    $smtp = Mail::factory('smtp',
    array ('host' => $host,
        'port' => $port,
        'auth' => true,
        'username' => $username,
        'password' => $password));

    $mail = $smtp->send($to, $headers, $body);  

我的问题/问题:在这段代码中,我可以在哪里设置消息的各个部分以遵守多部分/替代 mime 类型并像此答案 (Different Content Types in email) 中显示的那样正确使用边界?强>

【问题讨论】:

pear.php.net/package/Mail_Mime/docs/1.10.0/Mail_Mime/… @MarcB:我真的是尝试使用 Pear 发送电子邮件的新手。我可以在我的代码中的哪里合并setContentType() 函数? 【参考方案1】:

您必须在 $mime 对象上设置 ContentType

$mime = new Mail_mime();
$mime->setHTMLBody($html);
$mime->setTXTBody($text);
$mime->setContentType($content_type);
$body = $mime->get();

现在我建议您使用其他邮递器,而不是来自梨的邮递器。 Pear 有点老旧的数据包管理器,一些应用程序不再支持它,例如 PHPUnit 和 Symfony。

最好使用另一个可以通过composer安装的。你可以关注Swiftmailer

【讨论】:

以上是关于使用 Pear Mail 发送纯文本和 html 电子邮件(如何设置“Content-Type”并正确使用边界)的主要内容,如果未能解决你的问题,请参考以下文章

php 使用mail()发送纯文本电子邮件

使用 PHP PEAR MAIL 发送多个 CC 和 BCC

在使用 email/smtplib 发送的邮件中结合纯文本和 HTML

如何使用 System.NET.mail 发送带有附件但没有任何纯文本正文的电子邮件?

使用 PEAR Mail 包发送邮件时出错

使用 PEAR 邮件发送测试消息时出现错误消息