是否可以使用具有其内容类型的wp_mail()函数发送电子邮件:多部分/替代方案?

我需要发送可以根据媒介解释电子邮件显示为HTML或纯文本的电子邮件。

欢迎任何建议!

有帮助吗?

解决方案

就在那里 wp_mail() 文档 (在下面 用法):

默认内容类型是“文本/普通”,不允许使用HTML。您可以使用“ WP_MAIL_CONTENT_TYPE”过滤器(请参阅下面的示例)或包括“ content-type:text/html”之类的标头来设置电子邮件的内容类型。 发送消息后,请小心重置'wp_mail_content_type'返回到“文本/平原”, 但是,因为不这样做可能会导致WP或插件/主题电子邮件的意外问题。

(强调我的)

页面上的第二个示例向您展示了如何做(示例使用 text/html 但是您应该能够使用您的 multipart/alternative 反而。

其他提示

当您可以访问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代码。您也不应包含任何内容类型的标题。我目前使用CC和回复,并在我制作的插件中使用。

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

您可以使用 WP_MAIL_CONTENT_TYPE过滤器, ,现在已在法典中进行了记录。

关于将内容类型重置回“文本/普通”的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';
    }
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top