- 締切済み
mb_send_mail()関数のタイトルで特定の文字が入ると送信できません。
環境:WinXP+Apache2+PHP5 mb_send_mail()でタイトルに ”時間は何時でもokです。” を入力すると、送信に失敗します。 コードは以下の通りです。よろしくお願いします。 <?php $address=$_POST['address']; $subject=$_POST['subject']; $message=$_POST['message']; $header="Content-Type: text/plain;charset=iso-2022-jp"; mb_language("Japanese"); if(mb_send_mail($address,$subject,mb_convert_encoding($message,"JIS","EUC-JP"),$header)){ print("送信完了しました"); }else{ print("エラー:送信に失敗しました"); } ?> ($subject="時間は何時でもokです。"にするとエラーになります。)
- みんなの回答 (5)
- 専門家の回答
みんなの回答
- hegemonism
- ベストアンサー率53% (37/69)
以下動作環境です PHP Version 4.3.11 Apache 1.3.27 OS:FreeBSD 4.9 HTML,スクリプト,共にEUC-JPで統一してあります。 php.ini 設定のマルチバイトに関する設定は以下 mbstring.internal_encoding = EUC-JP mbstring.http_input = EUC-JP,SJIS mbstring.http_output = EUC-JP mbstring.encoding_translation = On mbstring.detect_order = auto mbstring.func_overload = 0
- hegemonism
- ベストアンサー率53% (37/69)
ごめんなさい。訂正です。(Return-Path削除) Content-Type や、Content-Transfer-Encoding,MIME-Version 属性は 自動でつけられるようです。 //==============(ここから)=============== mb_language("Japanese"); mb_internal_encoding("EUC-JP"); // EUC-JPの部分はPHPスクリプトコードの文字コードを指定 // 以下はヘッダの例 $header= "From: webmaster@{$_SERVER['SERVER_NAME']}\r\n" . "Date: ".date("r")."\r\n" . "Reply-To: webmaster@{$_SERVER['SERVER_NAME']}\r\n" . "X-Mailer: PHP/" . phpversion() . "\r\n"); if(mb_send_mail($address,$subject,$message,$header)){ print("送信完了しました"); }else{ print("エラー:送信に失敗しました"); } //===========(ここまで)===================
お礼
回答ありがとうございます。 自分のPHPはVer5で、参考WEBの症状は 再現しませんでした。 出来れば、hegemonismさんのPHPの動作環境(OS)を教えていただけないでしょうか?。(WinXP+Apache2+PHP特有の問題かも知れません)
- hegemonism
- ベストアンサー率53% (37/69)
補足です。 PHP 4.4.1 ではサブジェクトに特定の文字においてエンコーディングに不具合があって文字化けすると聞いたことがあります。 参考URL参照してください
- hegemonism
- ベストアンサー率53% (37/69)
以下のようにしてみてください。 $header には各パラメータの末尾にはCRLFが必要です。 mb_convert_encodingはmb_send_mail()が勝手にやるようですので不要です。 //==============(ここから)=============== mb_language("Japanese"); mb_internal_encoding("EUC-JP"); // EUC-JPの部分はPHPスクリプトコードの文字コードを指定 // 以下はヘッダの例 $header= "From: webmaster@{$_SERVER['SERVER_NAME']}\r\n" . "Return-Path: $email\r\n" . "Date: ".date("r")."\r\n" . "Reply-To: webmaster@{$_SERVER['SERVER_NAME']}\r\n" . "X-Mailer: PHP/" . phpversion() . "\r\n"); if(mb_send_mail($address,$subject,$message,$header)){ print("送信完了しました"); }else{ print("エラー:送信に失敗しました"); } //===========(ここまで)=================== 私の環境ではこれできちんと送信されます。 PHP Version 4.3.11 Apache 1.3.27
- moon_night
- ベストアンサー率32% (598/1831)
サブジェクトもエンコードしましょうね。 (さらにbase64エンコードをかけると吉)
お礼
回答ありがとうございました。
お礼
環境情報をありがとうございました。 どうやら、WINXP環境下よりUNIX系のほうが 安定してるのかな・・ PHP.INIの情報まで教えていただき参考になります。 一旦、質問を閉じて、もっと研究しようかと思います。 また、見かけましたらよろしくお願いします。