如何发送UTF-8电子邮件?

dee*_*Mie 76 php email utf-8

当我发送电子邮件时,电子邮件不会显示英语以外的字符.它确实如下所示:

ä½™C"雅»ä»

实际上可能知道这是什么原因?即使我尝试在脚本中添加Content-type和charset,它仍然显示相同.

我用了 Mail::Factory("mail");

s.w*_*dit 108

您可以在邮件正文中添加标题"Content-Type:text/html; charset = UTF-8".

$headers = "Content-Type: text/html; charset=UTF-8";
Run Code Online (Sandbox Code Playgroud)

如果你使用本机mail()函数$ headers数组将是第4个参数 mail($to, $subject, $message, $headers)

如果你用户PEAR Mail :: factory()代码将是:

$smtp = Mail::factory('smtp', $params);

$mail = $smtp->send($to, $headers, $body);
Run Code Online (Sandbox Code Playgroud)

  • 如果您要以HTML格式发送电子邮件,请仅使用`text/html`.对于纯文本电子邮件,您需要`text/plain`. (4认同)
  • php`mail()`的第4个参数是一个字符串,而不是一个数组! (3认同)
  • 一定要在`UTF-8`周围写一个没有引号的`charset = UTF-8`! (2认同)

小智 31

我正在使用相当指定的字符集(ISO-8859-2),因为不是每个邮件系统(例如:http : //10minutemail.com)都可以读取UTF-8邮件.如果你需要这个:

function utf8_to_latin2($str)
{
    return iconv ( 'utf-8', 'ISO-8859-2' , $str );
}
function my_mail($to,$s,$text,$form, $reply)
    {
        mail($to,utf8_to_latin2($s),utf8_to_latin2($text),
        "From: $form\r\n".
        "Reply-To: $reply\r\n".
        "X-Mailer: PHP/" . phpversion());
    }
Run Code Online (Sandbox Code Playgroud)

我已经制作了另一个邮件程序功能,因为苹果设备无法很好地读取以前的版本.

function utf8mail($to,$s,$body,$from_name="x",$from_a = "info@x.com", $reply="info@x.com")
{
    $s= "=?utf-8?b?".base64_encode($s)."?=";
    $headers = "MIME-Version: 1.0\r\n";
    $headers.= "From: =?utf-8?b?".base64_encode($from_name)."?= <".$from_a.">\r\n";
    $headers.= "Content-Type: text/plain;charset=utf-8\r\n";
    $headers.= "Reply-To: $reply\r\n";  
    $headers.= "X-Mailer: PHP/" . phpversion();
    mail($to, $s, $body, $headers);
}
Run Code Online (Sandbox Code Playgroud)

  • `$ headers.="From:=?utf-8?b?".base64_encode($ from_name)."?= <".$ from_a.">\r \n";`这行解决了我的问题,谢谢! (4认同)
  • 如果您尝试发送无法在ISO-8859-2中表示的内容,该怎么办?! (2认同)
  • 考虑使用带引号的可打印编码以提高纯文本邮件的可读性,它同样简单:`'=?utf-8?Q?' . quoted_printable_encode($string) 。'?='` (2认同)