将字符串转换为 MIME 标头

Posted

技术标签:

【中文标题】将字符串转换为 MIME 标头【英文标题】:Convert string to MIME header 【发布时间】:2014-04-25 18:31:24 【问题描述】:

我有这个字符串:

Let's begin

我想用它作为电子邮件的主题。当我收到电子邮件时,字符串如下所示:

Let's begin

经过一番研究,我了解到电子邮件标头只能包含 ASCII 字符,但有一些方法可以对符号进行编码。我试过使用mb_encode_mimeheader(),但我无法让它工作,而且看起来很像。 php 中是否有另一种方法可以将字符串简单地转换为可接受的 MIME 标头?这是我的代码,我使用的是 Wordpress 3.8.1(最新)和 PHP 5.3。

$sub = "Let's begin";
$email_sendto = $author_email;
mb_internal_encoding("UTF-8");

$email_subject = mb_encode_mimeheader ( $sub, 'UTF-8' );
$email_headers[] = 'From: '.$sender_name.' <'.$sender_email.'>';
$email_headers[] = 'MIME-Version: 1.0' . PHP_EOL;
$email_headers[] = 'Content-type: text/html; charset=utf-8' . PHP_EOL;
ob_start();
include(base_url_server . '/includes/email/userinquiry.php');
$email_content = ob_get_clean();

wp_mail( $email_sendto, $email_subject, $email_content, $email_headers );

【问题讨论】:

您如何查看收到的电子邮件?从某个网络邮件系统中,该网络邮件需要转义撇号?请注意,撇号是完全有效的 ASCII,因此您建议的解释实际上没有意义。您的电子邮件标题中不需要 PHP_EOL,但我怀疑这会有所作为。 如果撇号是有效的 ASCII,那么我的问题肯定出在其他地方。我正在使用测试电子邮件地址检查最新版本的 Outlook 中的电子邮件。感谢您的提醒。 【参考方案1】:

原来是 Wordpress 的问题。

http://wordpress.org/support/topic/apostrophes-show-up-incorrectly-in-email-subjects

【讨论】:

以上是关于将字符串转换为 MIME 标头的主要内容,如果未能解决你的问题,请参考以下文章

Gmail API 游乐场:发送方法,转换后的 MIME 原始标头在发送时未填充电子邮件字段

如何在诺基亚 Asha 的 J2ME 中将对象转换为字符串?

MailMessage 到 MIME 字符串

将String类型的json数据转换为真正的json数据

BigQuery 将 RFC 1123 日期格式字符串转换为 unixtime

将 HttpHeaders 转换为 Map