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

Php 如何发送UTF-8电子邮件?,php,email,utf-8,Php,Email,Utf 8,当我发送电子邮件时,电子邮件中不会显示除英语以外的字符。 它确实显示如下: 余瓟äääää” 可能知道这到底是什么原因? 即使我尝试在脚本中添加内容类型和字符集,它仍然显示相同的内容 我使用了邮件::工厂(“邮件”)您可以在邮件正文中添加标题“内容类型:text/html;charset=UTF-8” $headers = "Content-Type: text/html; charset=UTF-8"; 如果使用本机mail()function$headers,则数组将是第四个参数

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

余瓟äääää”

可能知道这到底是什么原因? 即使我尝试在脚本中添加内容类型和字符集,它仍然显示相同的内容

我使用了
邮件::工厂(“邮件”)

您可以在邮件正文中添加标题“内容类型:text/html;charset=UTF-8”

$headers = "Content-Type: text/html; charset=UTF-8";
如果使用本机
mail()
function$headers,则数组将是第四个参数
mail($to、$subject、$message、$headers)

如果您使用PEAR Mail::factory(),则代码将为:

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

$mail = $smtp->send($to, $headers, $body);

我使用的是相当指定的字符集(ISO-8859-2),因为不是每个邮件系统(例如:)都可以读取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());
    }
我做了另一个邮件功能,因为苹果设备不能很好地阅读以前的版本

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);
}
函数utf8mail($to,$s,$body,$from_name=“x”,$from_a=”info@x.com“,$reply=”info@x.com")
{
$s=“=?utf-8?b?”。base64_编码($s)。“?=”;
$headers=“MIME版本:1.0\r\n”;
$headers.=“From:=?utf-8?b?”.base64\u编码($From\u名称)。“?=\r\n”;
$headers.=“内容类型:文本/普通;字符集=utf-8\r\n”;
$headers.=“回复:$Reply\r\n”;
$headers.=“X-Mailer:PHP/”.phpversion();
邮件($to$s$body$headers);
}

如果不是
HTML
,则不建议使用
UTF-8
koi8-r
windows-1251
仅存在问题。所以使用html邮件

$headers['Content-Type']='text/html; charset=UTF-8';
$body='<html><head><meta charset="UTF-8"><title>ESP Notufy - ESP Сообщения</title></head><body>'.$text.'</body></html>';


$mail_object=& Mail::factory('smtp',
    array ('host' => $host,
        'auth' => true,
        'username' => $username,
        'password' => $password));
$mail_object->send($recipents, $headers, $body);
}
$headers['Content-Type']='text/html;字符集=UTF-8';
$body='ESP Notufy-ESPСбббббб'.$text'.';
$mail\u对象=&mail::工厂('smtp',
数组('host'=>$host,
“auth”=>正确,
“用户名”=>$username,
“密码”=>$password));
$mail\u object->send($recipents,$headers,$body);
}

您使用什么?本机
mail()
Zend\u-mail
PHPMailer
?需要一些工厂方法的代码!您还必须另外处理目标电子邮件客户端。即使您设法在电子邮件客户端中正确查看电子邮件,也不意味着您的客户将看到正确的邮件。最后,我总是用utf-8字符集头构建html电子邮件。这样,大多数电子邮件客户端都能正确显示内容。@FlyBy:是的,这正是我想做的,用utf-8字符集显示内容,但我仍然无法正确地看到电子邮件。内容类型和字符集正是您需要的,以使这项工作正常进行,但您需要向我们提供更多信息。你能告诉我们密码吗。和/或结果消息的来源?你确定你的数据是正确的utf8编码吗?下面是我的示例代码:
$mail=mail::factory(“mail”)
$to=”me@abc.com";
$body=”好信";
$headers=array(“内容类型=>”文本/纯文本:字符集=\“UTF-8”,“From=>”abc@abc.com“,”到“=>”me@abc.com“,”主题“=>”测试发送中文邮件-好信“
$mail->send($to,$headers,$body);
是否正确?它没有显示我期望的内容。它应该在body、header甚至subject中显示中文单词。这是我的代码$mail=mail::factory($mail”);$to=”me@abc.com“;$body=”好信“;$headers=array(“内容类型=>”文本/纯文本:字符集=\”UTF-8“,”From“=>”abc@abc.com“,”到“=>”me@abc.com“,”主题“=>”测试发送中文邮件-好信“;$mail->send($to,$headers,$body)是否正确?它没有显示我期望的内容。它应该在正文、标题甚至主题中显示中文单词。哪些电子邮件工具仍然使用7位传输编码?php
mail()的第四个参数
是字符串,不是数组!!一定要写
charset=UTF-8
,在
UTF-8
周围不要加引号!如果发送html格式的电子邮件,只能使用
text/html
。对于纯文本电子邮件,您需要
text/plain
。如果您试图发送ISO-8859-2中无法表示的内容,该怎么办RS= =“UTF-8?b?”。Base64编码($FRONGNEX)。“OR= \r\n”;< /代码>解决了我的问题,谢谢!考虑引用的可打印编码在纯文本邮件中的可读性,它很简单:<代码> > = UTF-8?Q?'。QuooDeTopPrimTable编码($string)。'’='/c> >朱丽亚:谢谢,我的To.cc和BCC怎么办?