【问题标题】:PHPmailer Content-Type: multipart/alternativePHPmailer 内容类型:multipart/alternative
【发布时间】:2018-07-26 11:38:38
【问题描述】:

我在 WordPress 中使用 wp_mail() 和 PHPMailer 发送多部分电子邮件时遇到问题。

此邮件标题:

    $wp_mail_headers = array(
        "From: Test <test@test.com>",
        'Content-Type: multipart/alternative;
boundary="b_00cdedc7a5309e22d6d51e1ad7ad886e"',
    );

用PHPMailer发送时会这样,边界消失了:

X-Mailer: PHPMailer 5.2.22 (https://github.com/PHPMailer/PHPMailer)
MIME-Version: 1.0
Content-Type: multipart/alternative; charset=
Content-Transfer-Encoding: quoted-printable

应该是这样的:

MIME-Version: 1.0    
Content-Type: multipart/alternative; boundary="b_00cdedc7a5309e22d6d51e1ad7ad886e"

如何使用 PHPMailer 设置多部分邮件标题?

谢谢!

更新:

添加过滤器怎么样?那会奏效吗?例如:

add_filter( 'wp_mail', 'rw_change_email_headers' );
function rw_change_email_headers( $params )
{
    $params['headers'] = 'Content-type: text/html';
    return $params;
}

如果过滤器与 PHPMailer 一起使用,如何将其添加到下面的代码中? 之后是否应该使用 remove_filter( ) 删除过滤器?

$wp_mail_headers = array(
    "From: Test <$wp_admin_email>",
    "Bcc: test@test.com",
    "Reply-To: $wp_admin_email",
    'Content-Type: multipart/alternative; boundary="b_00cdedc7a5309e22d6d51e1ad7ad886e"',
);

$wp_mail_message = '--b_00cdedc7a5309e22d6d51e1ad7ad886e
  Content-Type: text/plain; charset="UTF-8"
  Content-Transfer-Encoding: quoted-printable';

$wp_mail_message .= get_field('order_email_plain_text', 'option');

$wp_mail_message .= '--b_00cdedc7a5309e22d6d51e1ad7ad886e
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

<!doctype html><html lang="en"><head><meta name="viewport" content="width=device-width" /><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Order Email</title></head><body>';
$wp_mail_message .= get_field('order_email', 'option');
$wp_mail_message .= '</body></html>
--b_00cdedc7a5309e22d6d51e1ad7ad886e--';

【问题讨论】:

    标签: email phpmailer


    【解决方案1】:

    PHPMailer 根据您提供的内容为您处理 MIME 结构。这将产生一个multipart/alternative MIME 结构(它不仅仅是一个标题):

    $mail->isHTML();
    $mail->Body = '<h1>Hello</h1>';
    $mail->AltBody = 'Hello';
    

    同样,发件人地址比设置from 标头要多得多,因此请使用PHPMailer 的函数为您正确完成此操作:

    $mail->setFrom('test@test.com', 'Test');
    

    看起来字符集也没有正确设置。您可以通过以下方式解决此问题:

    $mail->CharSet = 'utf-8';
    

    您使用的是旧版本的PHPMailer,建议您升级一下。

    【讨论】:

    • 啊,谢谢!那么如何在WordPress中升级PHPMailer呢?看起来我在外部使用它。
    • 我认为 Wordpress 可能会停留在旧版本上,因为它们沉迷于向后兼容早已过时的 PHP 5.3,但您确实可以自己在外部加载它 - 请参阅 PHPMailer 自述文件以了解您的文件需要 6.0 版。我不确定 Wordpress 如何加载自己的版本。
    • 好吧,看来我必须采用全新的方法来构建电子邮件。在我想添加纯文本替代之前,猜猜它一直在工作。
    • 可能更容易弄清楚如何使用 WP 的 PHPMailer 实例 - 所有这些设置都应该可以通过某种方式访问​​。
    猜你喜欢
    • 2013-07-09
    • 2016-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-07
    • 1970-01-01
    • 2012-08-20
    相关资源
    最近更新 更多