4

是否可以使用具有 Content-Type: multipart/alternative 的 wp_mail() 函数发送电子邮件?

我需要发送可以显示为 HTML 或纯文本的电子邮件,具体取决于解释电子邮件的媒介。

欢迎任何建议!

4

3 回答 3

2

它就在wp_mail()文档中(在Usage下):

默认内容类型是“文本/纯文本”,不允许使用 HTML。您可以使用“wp_mail_content_type”过滤器(参见下面的示例)或包含“Content-type: text/html”之类的标题来设置电子邮件的内容类型。但是,在发送消息后请小心将“wp_mail_content_type”重置回“text/plain”,因为不这样做可能会导致来自 WP 或插件/主题的电子邮件出现意外问题。

(强调我的)

页面上的第二个示例向您展示了如何执行此操作(示例使用text/html但您应该能够使用您的multipart/alternative代替。

于 2013-12-03T14:56:02.730 回答
2

当您可以访问 phpmailer 实例时,这是完全可能的。

if ($is_html) 
    add_action('phpmailer_init', 'fix_mimeheader');

// more code.

wp_mail( $to, $subject, $html_message, $headers, $attachments );

// ...

function fix_mimeheader( $phpmailer ) {
     // Generate $text_message here.
     // ...

     $phpmailer->AltBody = $text_message;
}

发送到 wp_mail 的消息应该是您的 html 代码。您也不应该包含任何内容类型标头。我目前在我制作的插件中使用 from、cc 和 reply-to。

如果电子邮件以 HTML 格式发送,我将运行直接在 phpmailer 对象上设置 AltBody 属性的操作。然后,这会导致适当的标志将电子邮件转换为多部分/替代电子邮件。

于 2014-04-04T16:29:01.290 回答
1

您可以使用wp_mail_content_type 过滤器,该过滤器现已记录在 Codex 中。

关于将内容类型重置回“文本/纯文本”的 wp_mail 文档有点误导,IMO。由于这是一个过滤器,因此您不会真正“重置”它。您需要在过滤器中考虑一些条件逻辑,以确定何时需要使用多部分与纯文本或 html:

add_filter( 'wp_mail_content_type', 'my_mail_content_type' );
function my_mail_content_type( $content_type ) {

    if( $some_condition ) {
        return 'multipart/mixed';
    } else {
        return 'text/plain';
    }
}
于 2014-02-09T19:38:49.967 回答