主题或消息中包含特殊字符的电子邮件的 PHP 邮件标头

Posted

技术标签:

【中文标题】主题或消息中包含特殊字符的电子邮件的 PHP 邮件标头【英文标题】:PHP Mail header for emails with special characters in the subject or message 【发布时间】:2013-02-21 09:48:42 【问题描述】:

我的代码:

$to      = 'example@example.com';
$subject = $_REQUEST['subject'] ;
$message = $_REQUEST['message'] ;
$header = "From: noreply@example.com\r\n"; 
$header.= "MIME-Version: 1.0\r\n"; 
$header.= "Content-Type: text/html; charset=ISO-8859-1\r\n"; 
$header.= "X-Priority: 1\r\n"; 

mail($to, $subject, $message, $header);

当我发送带有特殊字符(例如®ð-˚©-ʼ“æ,˚ˍðß©)的邮件时, 在消息中,它可以工作,但不再处理间距(每个新行或空格都被删除) 第二个问题是主题中没有显示特殊字符。 他们只是输出:øʼªʼ

提前致谢!

【问题讨论】:

【参考方案1】:

内容类型:文本/html

如果您设置此标头,则意味着您必须将 HTML 发送给用户。您可以决定使用 TinyMCE 之类的东西,让用户在 Word 样式的编辑器中编写消息,并使用其中的 HTML 输出。或者将您的标题设置为纯文本。

内容类型:文本/纯文本

编辑:试试这个

$to      = 'example@example.com';
$subject = $_REQUEST['subject'] ;
$message = $_REQUEST['message'] ;
$header = "From: noreply@example.com\r\n"; 
$header.= "MIME-Version: 1.0\r\n"; 
$header.= "Content-Type: text/plain; charset=utf-8\r\n"; 
$header.= "X-Priority: 1\r\n"; 

mail($to, $subject, $message, $header);

【讨论】:

谢谢,这解决了间距问题和主题中的字符。然而,这条消息给了我类似的东西:¨®ð¥þƒˍ©ˇ˚ 更新了我的答案并提出了解决该问题的建议。让我知道它是否有效 这也保留了间距,但在主题和消息中都输出����.�˚��˚之类的东西 那不就是你得到的请求参数坏了吗?试试 var_dump($_REQUEST) 看看你得到了什么样的数据。 php_EOL 上使用 \r\n 有什么好处吗?【参考方案2】:

我已经使用了这个标题,这对我有用...

$headers = '';
$headers = 'MIME-Version: 1.0'.PHP_EOL;
$headers .= 'Content-type: text/html; charset=iso-8859-1'.PHP_EOL;
$headers .= 'From: webmaster@example.com<From: webmaster@example.com>'.PHP_EOL; 

【讨论】:

【参考方案3】:

不要使用 mail() 函数。使用为您完成(正确)工作的完全精心设计的课程。

http://code.google.com/a/apache-extras.org/p/phpmailer/

【讨论】:

当我看到像“composer”或“autoload”这样的简单任务(如发送邮件)时,我会立即关闭选项卡。这不是解决方案,而是一大堆新问题。 当一些黑客利用您的 mail() 例程或您的所有电子邮件都进入垃圾邮件时,您将重新打开选项卡 :) 顺便说一句,我使用的是普通库,没有自动加载,没有作曲家。仅包含 2 个。【参考方案4】:

您的代码的问题是因为特殊字符也需要“特殊”字符集。

尝试将 charset=ISO 更改为 charset=UTF8...

此外,PHP 的 mail() 函数也可以,但如果您寻求更好的解决方案,例如 Swift Mailer,您会发现更多的好处和选择

【讨论】:

谢谢,但这样做我确实得到了正确的间距,但输出就像�����&amp;#717;�&amp;#711;&amp;#730; 确保在 mail() 函数中设置了正确的字符集,并将文件保存在相同的字符集中。

以上是关于主题或消息中包含特殊字符的电子邮件的 PHP 邮件标头的主要内容,如果未能解决你的问题,请参考以下文章

如何通过 php 在 mailchimp API 中包含消息正文

如何在 Jenkins 电子邮件中包含 git changelog?

如何在字符串中包含href链接? [复制]

如何在 s-s-rS 订阅的主题行中包含报告参数?

使用Ews API去删除邮件内容中包含特定关键字的邮件

在 php 函数中包含 css 内容