背景
PHPで作成したサービスを運用していますが、現在利用しているレンタルサーバのメール送信数制限が厳しいため、外部のメールリレーサービスの利用を検討しています。
従来作成のPHPスクリプトではmb_send_mail関数を使い、レンタルサーバのSMTPを利用していました。このレンタルサーバ環境ではphp.iniの編集などでSMTPを外部に振ることができないので、PHPのmb_send_mail関数を使うのはやめ、メール処理ライブラリを導入することにしました。
発生している問題
現在qdmail.php/qdsmtp.phpを試していて、このライブラリへ対応させるよう従来のスクリプトを書き換えるのは容易にできたのですが、UTF-8エンコードのメールで肝心の日本語の扱いが正しくできません。
具体的には、サブジェクト、メールボディ、およびメールアドレスに付随する署名で
「日本語」などのように漢字で始まる文字列およびANK文字だけで構成される文字列は受信側で正しく表示されるのですが
「にほんご」のような平仮名かANK文字で始まり、かな漢字を含む文字列は化けてしまいます。
正しく表示される例
「nihongo」
「日本語」
文字化けする例
「にほんご」
「nihon語」
これはサブジェクト、メールボディ、メールアドレス署名部のそれぞれで独立して起きる現象です。
この日本語文字化けを解消したいと思います。
根本的な設定の見落としがあるのかと思います。問題点をご指摘いただければ幸いです。
補足情報
テスト環境(レンタルサーバ)のPHPバージョンは5.6
(近々7.Xへバージョンアップ予定)
qdmail.php/qdsmtp.phpは、
https://gist.github.com/YukiYamashina/2c53e0c43bf035ffc8d2bf0dcfbf7b29
にある PHP7.0対応版を利用 (PHP7.1でのcount関数仕様変更へは手元で対応済み)
mb_languageの設定は'ja'および'uni'の両方を試しましたが結果は変わりませんでした。
qdmail.phpのもともとの推奨設定は'ja'のようです。
テストを行ったソースは以下の通りです。
問題を検証するため作成したコード
サーバ名・メールアドレスは伏せました。
php
1<?php 2ini_set('display_errors', 1); 3mb_internal_encoding("UTF-8"); 4mb_language('ja'); 5 6require_once('qdmail.php'); 7require_once('qdsmtp.php'); 8 9$host = 'xxxx'; 10$port = 25; 11$protocol = 'SMTP'; 12 13$from = 'xxxx'; 14$to = 'xxxx'; 15$body = 'にほんご'; 16$subject = 'にほんご'; 17$name = 'にほんご'; 18 19$mail = new Qdmail(); 20$mail->charset('UTF-8' , 'base64'); 21$mail->errorDisplay( true ); 22$mail->smtp( true ); 23 24$param = array( 25 'host' => $host, 26 'port' => $port, 27 'from' => $from, 28 'protocol' => $protocol, 29 'user' => '', 30 'pass' => '' 31); 32$mail->smtpServer($param); 33 34$mail->to($to); 35$mail->from($from, $name); 36$mail->subject($subject); 37$mail->text($body); 38 39if( $mail->send() ){ 40 echo "OK"; 41}else{ 42 echo "NG"; 43} 44 45exit;
回答1件
あなたの回答
tips
プレビュー