WordPress邮件头设置,否则为纯文本。

7
希望能获得一些关于代码的帮助。我正在使用WordPress主题,该主题将邮件头设置为text/html格式,这会导致纯文本邮件出现问题,例如换行符不再显示。
我尝试进行以下设置:
} else {
    return 'text/plain';
}

但我并不很了解PHP,因此不知道应该放在哪里才能使其起作用。我想设置邮件的纯文本而未定义。

这是WP头部的代码:

 /**
 * filter mail headers
 */
function wp_mail($compact) {
    if (isset($_GET['action']) && $_GET['action'] == 'lostpassword') return $compact;
    if ($compact['headers'] == '') {

        //$compact['headers']   = 'MIME-Version: 1.0' . "\r\n";
        $compact['headers'] = 'Content-type: text/html; charset=utf-8' . "\r\n";
        $compact['headers'].= "From: " . get_option('blogname') . " < " . get_option('admin_email') . "> \r\n";
    }

    $compact['message'] = str_ireplace('[site_url]', home_url() , $compact['message']);
    $compact['message'] = str_ireplace('[blogname]', get_bloginfo('name') , $compact['message']);
    $compact['message'] = str_ireplace('[admin_email]', get_option('admin_email') , $compact['message']);

    $compact['message'] = html_entity_decode($compact['message'], ENT_QUOTES, 'UTF-8');
    $compact['subject'] = html_entity_decode($compact['subject'], ENT_QUOTES, 'UTF-8');

    //$compact['message']       =   et_get_mail_header().$compact['message'].et_get_mail_footer();

    return $compact;
}
1个回答

3

不要改变那个,而是将你的普通换行符更改为HTML。

$message=nl2br($message); // of course use your var name.

这样,您就可以保持电子邮件的标准格式。在这种情况下,纯文本没有什么特别之处需要单独的标题。此功能将把所有换行符转换为HTML版本。

除了换行符外,大多数纯文本格式即使在HTML中也会保留其格式,因为它没有特殊的标记。

以下是如何放置它:

function wp_mail($compact) {
    // leave your existing code intact here, don't remove it.
    $compact["message"]=nl2br($compact["message"]); 
    return $compact;
}

嗨Hanky 웃 Panky,你的回答非常有道理,我感觉我已经接近成功了。基于我上面发布的代码,是否可以知道变量应该是什么?以及你发布的代码应该放在哪里? - Elcangri
我尝试了建议的方法,对于纯文本电子邮件有效,它们现在有了正确的换行符,但是 HTML 电子邮件显示为空白。我查看了源代码,发现每一行都得到了 <br> 标签 code <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><br /> <html><br /> <head><br /> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/><br /> <style type="text/css"><br /> - Elcangri
我把它移到了function wp_mail的下面,但是每一行仍然有一个<br />标签。我找到了另一个话题,我相信如果是HTML,则会剥离该标签,但不确定如何使用它。链接 - Elcangri
然后调用此函数的函数正在发送包括所有HTML标记的电子邮件正文。您只需在那里接听此呼叫,并查找仅获取实际电子邮件文本而未附加标题和页脚的点。这就是应该放置的位置。 - Hanky Panky
我找到了包含所有邮件功能的文件,但是有点压倒性。我尝试将代码放置在一些定义头部的地方,但还没有成功。例如 public static function header_email() { $blog_name = get_option('blogname'); $headers = 'MIME-Version: 1.0' . "\r\n"; $headers.= 'Content-type: text/html; charset=utf-8' . "\r\n"; $headers.= "From: " . $blog_name . " < " . get_option('admin_email') . "> \r\n"; $headers = apply_filters('filter_header_email_', $headers); return $headers; } 感谢您的帮助。 - Elcangri
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接