mb_send_mailでのメール送信トラブルについて - PHPプロ!Q&A掲示板

2587

  • 2000P

mb_send_mailでのメール送信トラブルについて

質問日時 / 2010年3月5日 00:47    回答数 / 6件

Questioner:  warashi4  このエントリーをはてなブックマークに追加 

キーワード / mb_send_mail    メール送信   

お世話になっております。
mb_send_mailでのメール送信時のトラブルについて教えて下さい。
PHP5.1.6では問題なかったのですが、PHP5.3.1で発生します。

現象は、受信したメールに「送信者」が表示されない事と、
本文によけいなもの(?)が入ってくる事です。

以下、スクリプトです。UTF-8で保存してあります。
  1. $day = date('Y年m月d日 H:i:s');
  2. //if (date("w", date("U")) == '1') {
  3. $sub = "メール送信テスト";
  4. $mail = "aaa@aaa.com";
  5. $header = "From:".$mail;
  6. $Return = $mail;
  7. // メール本文組み立て
  8. $naiyo = "
  9. メール送信テスト\n
  10. 【日時】: $day
  11. ";
  12. mb_language("ja");
  13. mb_internal_encoding("UTF-8");
  14. mb_send_mail($mail, $sub, $naiyo, $header, "-f $Return");

受信した本文です。
//本文ここから
From: aaa@aaa.com
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-2022-JP
Content-Transfer-Encoding: 7bit

メール送信テスト
【日時】: 2010年03月05日 00:37:04
//本文ここまで

本来は、メール送信テスト 2010年03月05日 00:37:04 の2行だけのはずなのですが...
文字コードの問題でしょうか?

PHP5.3.1の状態です。
default_charset UTF-8(Local Value) no value(Master Value)
mbstring.detect_order UTF-8,EUC-JP,SJIS,JIS,ASCII auto
mbstring.encoding_translation Off Off
mbstring.func_overload 0 0
mbstring.http_input pass pass
mbstring.http_output pass pass
mbstring.http_output_conv_mimetypes ^(text/|application/xhtml\+xml) ^(text/|application/xhtml\+xml)
mbstring.internal_encoding UTF-8 EUC-JP
mbstring.language Japanese Japanese
mbstring.strict_detection Off Off
mbstring.substitute_character no value no value

また、.htaccessで以下のように指定してみましたが、関係無いようでした。
php_value default_charset UTF-8
php_value mbstring.language Japanese
php_value mbstring.internal_encoding UTF-8
php_value mbstring.http_output pass
php_value mbstring.http_input pass
php_value mbstring.detect_order UTF-8,EUC-JP,SJIS,JIS,ASCII
php_flag mbstring.encoding_translation Off
php_value mbstring.substitute_character none
php_flag output_buffering Off

スクリプトの問題でしょうか?
自分なりに調べてみましたが、どうしても分かりませんでした。
また、他の方が作ったスクリプトも試してみましたが同じでした。

何とか解決したいのですが、ご指導いただけないでしょうか?
サーバー会社は、スクリプトについてはノーサーポートです。

宜しくお願いいたします。

この質問への意見の募集は締め切られ、ポイントは既に配分されました。
意見を投稿することはできますが、ポイントを受け取ることはできません。



ツリー一覧

┗A01shimix>現象は、受信したメールに「送信者」が表示されない
 ┗A01-1warashi4おはようございます。shimixさん。 以下、受信後の
  ┗A01-1-1shimixSubjectは問題ないようですね。最後が「X-PHP-Origina
   ┗A01-1-1-1warashi4php_flag mail.add_x_header Off これで、解決しまし
    ┗A01-1-1-1-1shimix解決してよかったです。探したらバグ報告はすでに出て
     ┗A01-1-1-1-1-1warashi4なるほど、バグだったんですね。 よほど自分がヘボな

回答一覧

並び替え:

A01 満足
answerershimix [3月5日 08:53] (最終編集:3月5日 09:00)

>現象は、受信したメールに「送信者」が表示されない事と、
>本文によけいなもの(?)が入ってくる事です。

メールのヘッダとボディ(本文)を分けているのは「改行」だけです。なので、ヘッダ内に改行が紛れ込むとそれ以降は本文と認識されてしまいます。

受信したメールのヘッダの最後の項目は何でしょうか?その項目が問題だと思います。出来れば(メーラが処理する前の)生のメールデータで確認するといいです(telnetでpopサーバに繋いで)。



>文字コードの問題でしょうか?

subjectが日本語ですからね・・。mb_send_mailがちゃんと処理(ISO-2022-JPにしてからmime_encode)してくれるハズですが、何かのバグがあるかもしれません。subjectを英字にしても現象が出るかどうか確認してみてください。

この意見に回答する

ツリーへ TOPへ

A01-1
replyerwarashi4 [3月5日 09:12]

おはようございます。shimixさん。

以下、受信後のメールヘッダです。
Return-Path: <aaa@aaa.com>
Delivered-To: aaa@aaa.com
Received: (qmail 19853 invoked from network); 5 Mar 2010 09:02:58 +0900
Received: from aaa.co.jp (***.***.***.***)
  by aaa.com with SMTP; 5 Mar 2010 09:02:58 +0900
Received: (qmail 7412 invoked by uid 48); 5 Mar 2010 09:02:57 +0900
Date: 5 Mar 2010 09:02:57 +0900
Message-ID: <20100305000257.7411.qmail@sss.co.jp>
To: aaa@aaa.com
Subject: =?ISO-2022-JP?B?GyRCJWEhPCVrQXc/LiVGJTkbKEI=?=
 =?ISO-2022-JP?B?GyRCJUgbKEI=?=
X-PHP-Originating-Script: 501:aaa.php

> 出来れば(メーラが処理する前の)生のメールデータで確認するといいです(telnetでpopサーバに繋いで)。
スミマセン、これは勉強不足で方法がわかりません。

あと、件名、本文ともに半角英文字のみにしましたが、結果は同じでした。
他に、何か確認することはありますでしょうか?

この意見に回答する

ツリーへ TOPへ

A01-1-1 満足
replyershimix [3月5日 09:28] (最終編集:3月5日 09:40)

Subjectは問題ないようですね。最後が「X-PHP-Originating-Script」ですか・・。とりあえずmail.add_x_headerをOffにしてみてください。

  http://www.php.net/manual/ja/mail.configuration.php#ini.mail.add-x-header

この意見に回答する

ツリーへ TOPへ

A01-1-1-1
replyerwarashi4 [3月5日 09:35]

php_flag mail.add_x_header Off
これで、解決しました。(助かりました~)
ありがとうございました。本当に勉強になりました。
また何かありましたら、宜しくお願いいたします。

この意見に回答する

ツリーへ TOPへ

A01-1-1-1-1 満足
replyershimix [3月5日 09:43]

解決してよかったです。探したらバグ報告はすでに出ているようですね。「X-PHP-Originating-Script adding two new lines in *NIX」ということらしいです。

この意見に回答する

ツリーへ TOPへ

A01-1-1-1-1-1
replyerwarashi4 [3月5日 09:47]

なるほど、バグだったんですね。
よほど自分がヘボなのかと落ち込んでいました。
今後は、バグも疑ってみることにします。
本当にありがとうございました。

この意見に回答する

ツリーへ TOPへ

<<質問一覧へ



Pick Up Q&A

Q
ログファイルの中の空のデータ行を削除したい
 このエントリーをはてなブックマークに追加 
A
ログのデータ個数(列数)が固定で、空のログが"<><><>"だと既知であれば if ($line === "<><><>") { continue; } で読み飛ばしてもいいのでは? ...

>>続きを読む

まずは配列や文字列の扱いから、じっくり勉強して行きましょう。

▲解説者:岡本(アシアル株式会社 教育コーディネーター兼 システムエンジニア)