0

ロシアのユーザーに自動メールを送信しています。utf-8 エンコーディングを使用しました。gmail で開くと完璧に表示されます。Outlook では正しく表示されませんが、ロシアのユーザーに人気のあるメール アカウントである mail.ru では、goblygook として表示されます。

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 をサポートしていないため、「ここをクリックしてこのメ​​ッセージを Web ページで表示する」というメッセージをロシア語で表示し、エンコーディングを自分で制御できるようにすることを新しい計画にしています。正常に表示されますが、ロシア語のメッセージをmail.ruに送信する方法さえわかりません.win-1251、UTF-8、さらにはkioでもすべてgoblygookで表示されるためです

4

2 に答える 2

1

HTML ヘッダーに設定した文字セットは、同じスクリプトで後で実行される php コードにはまったく影響しません。クライアントが何らかのデータをphpに送り返すまで、PHPはクライアント側の文字セットをあまり気にしません。適切な MIME メールを生成し、ヘッダーに適切な文字セットを設定する必要があります。

mail()PHPMailer または Swiftmailer を使用することを強くお勧めします。どちらも MIME メールの送信を簡単にし、PHP の関数である完全なゴミよりもはるかに簡単で信頼性が高くなります。

于 2013-04-08T20:36:08.217 に答える
0

以下を追加することもできます。

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

有無にかかわらず機能しますが、ロシア語で送信するときに強制されます。

于 2014-09-13T00:11:27.523 に答える