2018/11/06

PHP 日本語メールの環境依存文字 文字化け対策

先般、SPF問題の解決の為、PHPMAILERにてメール送信を行うように仕様変更したが、
まだ、JIS-2022-JPの7bit問題が解決していない。

問題点としては、さまざまな環境のメールサーバやOSがアンドロイドでないフィーチャーフォン
(所謂ガラケー)では、8bitを許容していないようだが、ほとんどの動作環境下でUTF-8が
利用できるようになってきている。
と思われる。

そこで、今までは、JIS-2022-JP(7bit)の制約を受け、環境依存文字や半角カナ
が文字化けを起こす環境で運用を行っていたが、さすがに、ガラケーのみで
運用をするユーザが現役社会人である可能性は、万が一くらいでいいだろうと判断した。

前段が長くなってしまったが、
UTF-8でPHPMAILERのインスタンスを生成する際の記載をオボエガキ
前回との変更箇所をオレンジ表記



smtp送信テストPHP(UTF-8送信)
<?
require_once("/置いた所/vendor/autoload.php" ); //これを忘れると動かない!!
require_once("/置いた所/vendor/phpmailer/phpmailer/class.phpmailer.php"); //これを忘れると動かない!!
mb_language("japanese"); 
mb_internal_encoding("UTF-8");   
 
$to = "XXXX@gmail.com";
$subject = "SMTP587テスト";
$body = "smtpサーバ経由のメールテスト";
$from = "hoge@hogehoge.com";
$fromname = "送信テスト君";

$mail = new PHPMailer();//インスタンス生成
$mail->CharSet = "UTF-8";//UTF-8の宣言をすること
$mail->Encoding = "base64";//記述しないと正しく認識しないサーバが存在するらしい。

$mail->IsSMTP(); //smtp利用宣言
$mail->SMTPAuth = TRUE;//smtp認証宣言
$mail->Host = 'mail.xxxx.jp:587';    // ホストアドレス:ポート25or587
$mail->Username = 'hoge'; //smtp認証ユーザ
$mail->Password = 'hogehoge';  //smtp認証パス

$mail->AddAddress($to);
$mail->From = $from;
$mail->FromName = $fromname;
$mail->Subject = $subject;
$mail->Body  = $body;
$mail->AddAttachment('./hogefile.pdf');日本語は極力使わない!!
 
 //メールを送信
if (!$mail->Send()){
    echo("Failed to send mail. Error:".$mail->ErrorInfo);
}else{
    echo("Send mail OK.");
}
?>

大分後になって
$mail->CharSet = "UTF-8";
$mail->Encoding = "base64";
と宣言をするよりも、
$mail->CharSet = "iso-2022-jp";
$mail->Encoding = "7bit";
として、愚直に
mb_encode_mimeheader(mb_convert_encoding($fromname,"JIS","UTF-8"))
としたほうが、エンコード率が高いことが分かった。

0 件のコメント:

コメントを投稿