使用wp_mail()发送带有附件的HTML电子邮件

时间:2016-05-23 作者:Maija Vilkina

这个应该很容易,但我想不出来。我想发送一封HTML格式的电子邮件,但也有一个附件。附件发送正确,但消息以明文形式传递,如下所示:

<p>Hello!</p>
<p>&nbsp;</p>
<p>Some text.</p>
<p>&nbsp;</p>
<p>Best wishes,</p>
<p>Team</p>
如果它是一封没有附件的电子邮件,我会通过更改标题来强制它发送html,如前所述here. 但现在我需要内容类型为多部分/混合(对吗?)。所以我的问题是:我如何说服wp_mail() 以html格式发送邮件并包含附件?

3 个回复
SO网友:Naveen Kumar

参考链接click here.

使用下面的代码,您可以用html格式发送邮件。

$to = \'[email protected]\';
$subject = \'The subject\';
$body = \'The email body content\';
$headers = array(\'Content-Type: text/html; charset=UTF-8\');

wp_mail( $to, $subject, $body, $headers );

// For attachment 

$attachments = array( WP_CONTENT_DIR . \'/uploads/file_to_attach.zip\' );
$headers = \'From: My Name <[email protected]>\' . "\\r\\n";

wp_mail( \'[email protected]\', \'subject\', \'message\', $headers, $attachments );

SO网友:majick

我相信在您的特定情况下,答案并不涉及链接线程中提到的bug。无需设置自定义标题来实现所需的操作。

相反,您只需使用$phpmailer->AltBody. 这会自动将设置为内容类型multipart/alternative (不是多部分/混合)并且您允许phpmailer 类来处理其余的头,而无需手动设置自定义头。

add_action(\'phpmailer_init\',\'wp_mail_set_text_body\');
function wp_mail_set_text_body($phpmailer) {
     $phpmailer->AltBody = strip_tags($phpmailer->Body);
}

$to = \'[email protected]\';
$headers = array();
$attachments = array(dirname(__FILE__).\'/test.txt\');
wp_mail($to,$subject,$message,$headers,$attachments);
如果添加附件,总体内容类型将自动变为multipart/mixed 具有multipart/alternative wchi包含的内部text/plaintext/html 零件,然后是附件。

您还可以添加multipart/related (内联)通过将图像等附件传递给wp_mail 通过$attachements (第5个参数为“inline”),甚至在HTML主体本身中声明它们。据我所知,文本版本无法访问这些内容。

SO网友:flero

link you posted:

默认内容类型为“文本/普通”,不允许使用HTML。但是,您可以使用“wp\\u mail\\u content\\u type”筛选器设置电子邮件的内容类型。

将此添加到函数。php,如中所述wp_mail_content_type:

add_filter( \'wp_mail_content_type\', \'set_content_type\' );
function set_content_type( $content_type ) {
    return \'text/html\';
}
应该做到这一点。

相关推荐

Cron not sending wp-mail()

我对cron计划功能有问题,它不想用wp_mail() 作用This is my code:它被放置在函数中。php<?php add_filter(\'cron_schedules\', \'add_review_invites_schedule\'); function add_review_invites_schedule($schedules){ $schedules[\'send_review_invites_interva