0

我向俄罗斯用户发送自动电子邮件,我使用 utf-8 编码,当他们在 gmail 中打开时显示完美,在 Outlook 中显示不正确,但在俄罗斯用户流行的电子邮件帐户 mail.ru 中显示为 gobblygook。

所以我们用acryllic从Outlook向mail.ru发送了一封电子邮件,它显示相同的内容没有问题,然后我将编码更改为windows-1251,它再次在gmail中显示正常,但在mail.ru中(谁没有选项我可以找到切换编码并且不支持 UTF-8)它显示为不同类型的 gooblygook。

代码在这里:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=koi8-r" />
<title>Untitled Document</title>


</head>

//error_reporting(E_ALL);
error_reporting(E_STRICT);

date_default_timezone_set('America/Toronto');

require_once('PHPMailer_5.2.2/class.phpmailer.php');
//include("class.smtp.php"); // optional, gets called from within class.phpmailer.php if not already loaded

$mail             = new PHPMailer();


$body = "Это письмо отправлено потому. This is english";




$mail->IsSMTP(); // telling the class to use SMTP
$mail->Host       = "smtp.gmail.com"; // SMTP server
$mail->SMTPDebug  = 1;                     // enables SMTP debug information (for testing)
                                           // 1 = errors and messages
                                           // 2 = messages only
$mail->SMTPAuth   = true;                  // enable SMTP authentication
$mail->SMTPSecure = "ssl";                 // sets the prefix to the servier
$mail->Host       = "smtp.gmail.com";      // sets GMAIL as the SMTP server
$mail->Port       = 465;                   // set the SMTP port for the GMAIL server
$mail->Username   = "xxx@gmail.com";  // GMAIL username
$mail->Password   = "xxx";            // GMAIL password

$mail->SetFrom('xxx@gmail.com', 'xxx');

$mail->AddReplyTo("xxx@gmail.com","xxx");

$mail->Subject    = "Urgent";

$mail->AltBody    = "To view the message, please use an HTML compatible email viewer!"; // optional, comment out and test

$mail->MsgHTML($body);

$address1 = "xxx@mail.ru";
$address2 = "xxx@gmail.com";


if(!$mail->Send()) {
  echo "Mailer Error: " . $mail->ErrorInfo;
} else {
  echo "Message sent!";
}

当然有一种方法可以将俄语消息发送到 mail.ru,我显然做了一些愚蠢的事情,即使从 Outlook 发送,因为丙烯酸的作品,但也许我必须将编码放在除标题之外的其他地方。

我的计划是它会自动编码消息,但由于他们不支持 UTF-8,我的新计划是显示一条消息,用俄语显示“单击此处在网页中查看此消息”,然后我可以自己控制编码,它会显示正常,但我什至无法弄清楚如何将俄语消息发送到 mail.ru,因为它都显示在 gobblygook 中,用于 win-1251、UTF-8 甚至 kio

4

2 回答 2

1

您在 HTML 标头中设置的字符集绝对不会影响稍后在同一脚本中运行的 php 代码。PHP 不太关心客户端字符集,直到客户端将一些数据发送回 php。您需要生成正确的 MIME 电子邮件,并为此在标题中设置正确的字符集。

我强烈建议使用 PHPMailer 或 Swiftmailer,它们都可以让发送 MIME 电子邮件变得微不足道,而且比 PHP 的mail()功能完全垃圾更容易和更可靠。

于 2013-04-08T20:36:08.217 回答
0

您还可以添加:

$mail->SetLanguage("ru","phpmailer/language");

它可以使用或不使用,但在我发现用俄语发送时会强制执行。

于 2014-09-13T00:11:27.523 回答