【问题标题】:PHP Mail header for emails with special characters in the subject or message主题或消息中包含特殊字符的电子邮件的 PHP 邮件标头
【发布时间】: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);

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

提前致谢!

【问题讨论】:

    标签: php email character-encoding header mime


    【解决方案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() 函数中设置了正确的字符集,并将文件保存在相同的字符集中。
      猜你喜欢
      • 2019-09-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-15
      • 2016-02-03
      • 1970-01-01
      • 2021-02-06
      • 2012-12-12
      • 1970-01-01
      相关资源
      最近更新 更多