PHPMailer 字符编码问题

标签 php email phpmailer

我尝试使用PHPMailer发送注册、激活。等邮件给用户:

require("class.phpmailer.php");
$mail -> charSet = "UTF-8";
$mail = new PHPMailer();
$mail->IsSMTP();  
$mail->Host     = "smtp.mydomain.org";  
$mail->From     = "name@mydomain.org";
$mail->SMTPAuth = true; 
$mail->Username ="username"; 
$mail->Password="passw"; 
//$mail->FromName = $header;
$mail->FromName = mb_convert_encoding($header, "UTF-8", "auto");
$mail->AddAddress($emladd);
$mail->AddAddress("mytest@gmail.com");
$mail->AddBCC('mytest2@mydomain.org', 'firstadd');
$mail->Subject  = $sub;
$mail->Body = $message;
$mail->WordWrap = 50;  
if(!$mail->Send()) {  
   echo 'Message was not sent.';  
   echo 'Mailer error: ' . $mail->ErrorInfo;  
}

$message 包含拉丁字符。不幸的是,所有网络邮件(gmail、webmail.mydomain.org、emailaddress.domain.xx)都使用不同的编码。

如何强制使用 UTF-8 编码在所有邮箱上显示完全相同的邮件?

我尝试转换邮件标题宽度mb_convert_encoding(),但没有运气。

最佳答案

如果您 100% 确定 $message 包含 ISO-8859-1,您可以使用 utf8_encode正如大卫所说。否则使用 mb_detect_encodingmb_convert_encoding在 $message 上。

还要注意

$mail -> charSet = "UTF-8"; 

应替换为:

$mail->CharSet = 'UTF-8';

并且放置在类的实例化之后(在new之后)。属性区分大小写!见 PHPMailer doc列出列表并准确拼写。

PHPMailer 的默认编码也是 8bit,这可能对 UTF-8 数据造成问题。要解决此问题,您可以这样做:

$mail->Encoding = 'base64';

请注意,'quoted-printable' 在这些情况下也可能会起作用(甚至可能是 'binary')。更多详情可以阅读RFC1341 - Content-Transfer-Encoding Header Field .

关于PHPMailer 字符编码问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2491475/

相关文章:

java - "text/plain; charset=ISO-8859-2"电子邮件正文类型中的新行

ASP.NET 发送电子邮件

c# - 从 .EML 文件中检索电子邮件信息

php - SetFrom PHPMailer 不工作

php - Textarea 新行用于使用 php 发送电子邮件

php - 带有 rowGrouping 插件 aoColumns 定义的数据表失败

php - 禁用 symfony 缓存/appDevDebugProjectContainer.php 怪物

php - 如何 mysql join 在我的结果中起作用

javascript - 如何删除JS文本/模板中的默认链接

php - 使用 PHP 邮件程序发送 2 封电子邮件失败