在指定函数中的标头元素时,我在应用程序中使用wp_mail和mail函数时遇到了问题。
我通常将标题设置为关联数组,如
$mailheader = array(
'MIME-Version' => '1.0',
'Content-type' => ' text/html; charset=utf-8',
'From' => 'fred@sender.com' ,
);使用mail()命令,将正确处理标头,并将消息作为HTML邮件发送。
mail("to@domain.com", "my subject", "A message here.", $mailheader);但是,如果我对wp_mail函数使用相同的命令(在WP 6.x站点上),消息将以纯文本的形式发送:
wp_mail("to@domain.com", "my subject", "A message here.", $mailheader);如果要对wp_mail中的标头使用关联数组,则必须将其转换为文本:
foreach ($mailheader as $key => $value) {
$header_wp .= "$key: $value \r\n"; // for wp-mail header which doesn't do arrays
}(注意语句中使用双引号,因此\r\n被正确处理。)
然后使用以下wp_mail命令:
wp_mail("to@domain.com", "my subject", "A message here.", $header_wp );这将导致在使用wp_mail时产生HTML格式的消息。
我已经在PHP版本7.3和8.x的不同WP 6.01站点上验证了这一点。wp_mail对标头的处理是在将其发送到phpMailer之前进行的。
我花了几个星期的时间和这只狗搏斗,所以我想提醒其他人。
我将把正确的代码放在我对这个问题的回答中。
添加的
我调整了我的问题,以强调二维标头数组不适用于wp_mail(),而将使用mail()。如果设置了二维数组,则需要转换为文本字符串或一维数组(如SallyCJ的答案中所述)。
**加2 **
Oops...got我的任期错了。它是一个不适用于wp_mail的关联数组。参见我的示例$mailheader关联数组。
发布于 2022-08-06 04:50:54
mail()函数在PHP中和wp_mail()在WordPress中都支持传递一个数组或标题字符串,但区别是:
mail(),数组键是头名,其值是相应的头值,例如array( 'Content-type' => 'text/html; charset=utf-8' )。wp_mail()期望头名称和值放在数组值中,例如array( 'Content-type: text/html; charset=utf-8' )。所以这句话不一定是真的:
如果要对wp_mail中的标题使用数组,则必须将其转换为文本。
因为您实际上可以将$mailheader数组的格式转换为:
$mailheader = array(
'MIME-Version: 1.0',
'Content-type: text/html; charset=utf-8',
'From: fred@sender.com',
);或者从该数组中为wp_mail()创建一个标头数组,如下所示:
$headers = array();
foreach ( $mailheader as $key => $value ) {
$headers[] = "$key: $value";
}Codex的示例(参见https://developer.wordpress.org/reference/functions/wp_邮件/评论-348):
要发送HTML格式的邮件,还可以在
$headers参数中指定内容类型HTTP报头:$to = 'sendto@example.com';$subject =‘subject';$body =’电子邮件正文内容‘;$headers =数组(’Content: text/html;charset=UTF-8');wp_mail( $to、$subject、$body、$headers );
文件还指出:
$headers可以是字符串,也可以是数组,但它在数组表单中可能最容易使用。\r\n)或LF (\n)。发布于 2022-08-05 22:52:18
添加的
虽然wp_mail将接受一维数组,但它不会接受关联数组,如
$mailheader = array(
'MIME-Version' => '1.0',
'Content-type' => ' text/html; charset=utf-8',
'From' => 'fred@sender.com' ,
);wp_mail()函数允许的关联数组将不使用wp_mail()。
原始
若要正确使用wp_mail中的标头,报头必须是字符串,而不是数组。示例代码
foreach ($mailheader as $key => $value) {
$header_wp .= "$key: $value \r\n"; // for wp-mail header which doesn't do arrays
}(注意语句中使用双引号,因此\r\n被正确处理。)
然后使用以下wp_mail命令:
wp_mail("to@domain.com", "my subject", "A message here.", $header_wp );这将导致在使用wp_mail时产生HTML格式的消息。如果在wp_mail中使用数组作为标题,则消息将以纯文本的形式发送。
更正对数组类型使用了错误的术语--它是关联的,而不是二维的。关联数组将不能在wp_mail中工作。
https://wordpress.stackexchange.com/questions/408331
复制相似问题