首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >wp_mail与邮件函数和标头数组的比较

wp_mail与邮件函数和标头数组的比较
EN

WordPress Development用户
提问于 2022-08-05 22:52:18
回答 2查看 428关注 0票数 0

在指定函数中的标头元素时,我在应用程序中使用wp_mail和mail函数时遇到了问题。

我通常将标题设置为关联数组,如

代码语言:javascript
复制
$mailheader = array(
                'MIME-Version' => '1.0',
                'Content-type' => ' text/html; charset=utf-8',
                'From' => 'fred@sender.com'  ,
);

使用mail()命令,将正确处理标头,并将消息作为HTML邮件发送。

代码语言:javascript
复制
mail("to@domain.com", "my subject", "A message here.", $mailheader);

但是,如果我对wp_mail函数使用相同的命令(在WP 6.x站点上),消息将以纯文本的形式发送:

代码语言:javascript
复制
wp_mail("to@domain.com", "my subject", "A message here.", $mailheader);

如果要对wp_mail中的标头使用关联数组,则必须将其转换为文本:

代码语言:javascript
复制
        foreach ($mailheader as $key => $value) {

            $header_wp .= "$key: $value \r\n";   // for wp-mail header which doesn't do arrays
     }

(注意语句中使用双引号,因此\r\n被正确处理。)

然后使用以下wp_mail命令:

代码语言:javascript
复制
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关联数组。

EN

回答 2

WordPress Development用户

发布于 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数组的格式转换为:

代码语言:javascript
复制
$mailheader = array(
    'MIME-Version: 1.0',
    'Content-type: text/html; charset=utf-8',
    'From: fred@sender.com',
);

或者从该数组中为wp_mail()创建一个标头数组,如下所示:

代码语言:javascript
复制
$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可以是字符串,也可以是数组,但它在数组表单中可能最容易使用。
  • 在使用数组窗体时,不需要提供换行("\n“或"\r\n")。因此,我们可以节省时间试图确定是否应该使用CRLF (\r\n)或LF (\n)。
票数 1
EN

WordPress Development用户

发布于 2022-08-05 22:52:18

添加的

虽然wp_mail将接受一维数组,但它不会接受关联数组,如

代码语言:javascript
复制
$mailheader = array(
                'MIME-Version' => '1.0',
                'Content-type' => ' text/html; charset=utf-8',
                'From' => 'fred@sender.com'  ,
);

wp_mail()函数允许的关联数组将不使用wp_mail()。

原始

若要正确使用wp_mail中的标头,报头必须是字符串,而不是数组。示例代码

代码语言:javascript
复制
    foreach ($mailheader as $key => $value) {

            $header_wp .= "$key: $value \r\n";   // for wp-mail header which doesn't do arrays
     }

(注意语句中使用双引号,因此\r\n被正确处理。)

然后使用以下wp_mail命令:

代码语言:javascript
复制
wp_mail("to@domain.com", "my subject", "A message here.", $header_wp );

这将导致在使用wp_mail时产生HTML格式的消息。如果在wp_mail中使用数组作为标题,则消息将以纯文本的形式发送。

更正对数组类型使用了错误的术语--它是关联的,而不是二维的。关联数组将不能在wp_mail中工作。

票数 0
EN
页面原文内容由WordPress Development提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://wordpress.stackexchange.com/questions/408331

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档