【PHP】Errors-Toが文字化けの原因になっている可能性について

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

他人の作ったシステムを改修することが増えてきまして、その中で遭遇した謎現象について、どうやら「Errors-To」が原因なのではないかというお話です。

いわゆる普通の「お問い合わせフォーム」の項目追加等、改修を行っていた時の事。


テスト送信メールが文字化けしていることに気づきました。
メーラー側で表示設定を変更すると正しく表示されるので、正確には「メーラー側の不具合(設定ミス等)」なのですが…

ふと思い立って「Errors-To」を削除したところ、メーラーの設定変更はしていないにもかかわらず、文字化けが解消するという事態に…

とりあえずmb_send_mailが利用できる前提で、ヘッダーまわりの実装についておさらいしておきます。

$header = '';
$header .= "Content-Type: text/plain \r\n";
$header .= "Return-Path: " . $from_mail . " \r\n";
$header .= "From: " . $from ." \r\n";
$header .= "Sender: " . $from ." \r\n";
$header .= "Reply-To: " . $from_mail . " \r\n";
$header .= "Organization: " . $from_name . " \r\n";

上記のように設定するのが一般的です。
それぞれ簡単に解説しておきましょう。

Content-Type:
メールの形式です。
テキスト形式のメールであれば「text/plain」、HTMLメールであれば「multipart/alternative」となります。
添付ファイルがある場合は「multipart/mixed」です。

Return-Path:
送信エラーが発生した場合に、エラーメールが送信されるアドレスとなります。
掲題の「Errors-To」と同様ですが、「Return-Path」が一般的。

From:
差出人メールアドレスですね。
複数のメールアドレスを設定することが可能です。

Sender:
送信者メールアドレスです。
一般的には設定不用とされています。
「From」と異なり、単一のメールアドレスしか設定できません。

Reply-To:
返信先メールアドレスです。
フォーム内容を受信するアドレスと問い合わせ窓口を分けたい場合などは、設定しても良いかもしれません。

Organization:
組織名です。
問い合わせフォーム等、PHPからメール送信する場合には、あまり設定する機会はないように思います。

フォームの入力内容をメールで送信する場合、エンコードの問題や、オートコンプリート等ユーザー側の問題も発生するので、原因特定が難しくなる傾向にあるように思います。

問題の切り分けがうまくいかない場合は、「とりあえずどこかにアウトプットしてみる」というのも候補に入れておきましょう!
それで解決すれば儲けものです!

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

SNSでもご購読できます。

コメント

コメントを残す

*