質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

メール

メールは、コンピュータネットワークを利用し、 情報等を交換する手段のことです。

Q&A

解決済

4回答

9171閲覧

特定のメールサーバで受信したメールにだけ、なぜかヘッダー情報が表示されてしまう。

morie

総合スコア29

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

メール

メールは、コンピュータネットワークを利用し、 情報等を交換する手段のことです。

0グッド

1クリップ

投稿2016/06/20 10:31

メールのことでお聞きしたいのですが、
フリーのメール送信プログラム(PHP)を使い、数箇所にテストメールを送ったところ、yahooメール・gmailは問題なく受信できたのですが、あるサーバーに送ったメールだけ、メール本文の上部に、通常非表示になっているはずのヘッダー情報がなぜか表示されてしまいます。

これはメールプログラム側の問題なのでしょうか?
それともサーバー側の問題なのでしょうか?

受信したメールの本文欄は以下のようなものです。


=?ISO-2022-JP?B?GyGAUDFINASELO=?= test@test.co.jp Content-Type: text/plain;charset=iso-2022-jp X-Mailer: PHP/5.5.0 Message-Id: 20160410012541.77T4ADF@f300.HATA.net Date: Mon, 10 Aplil 2016 15:12:11 +0900 (JST) X-CMAE-Envelope: ASFklafjiejfajfoKJDOFONEEHAIjfjpawokPOFHEEIUHJFIKDJSADFEIkihn154+adfkei145aeo==

ここからメール本文~


PHPメールプログラムの該当の箇所は以下です。差出名(FROM:)を日本語にエンコードしたり、ヘッダ情報を付加したりする部分ですが、例えばこれをコメントアウトすると上記のようなエラーは出ません。また、差出名(FROM:)を英数字のみにすると同じくエラーは出ません。とすると文字コードや日本語変換の問題なのでしょうか。

PHPコード

$reheader="From: ".mb_encode_mimeheader($refrom_name)." test@test.co.jp\nContent-Type: text/plain;charset=iso-2022-jp\nX-Mailer: PHP/".phpversion();

特定のメールサーバで受信したメールにだけ、なぜかヘッダー情報が表示されてしまうのにはどのような原因が考えられるのでしょうか?ご存知の方がいらっしゃいましたら、何卒お助けください。。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答4

0

自己解決

皆様に教えていただいた方法を試したのですが、症状は変わらずでした。

ネットでさらに調べてみたところ、mb_encode_mimeheader関数に、他にも引数があることが気にかかり、引数を設定してみたところ、質問に書いたようなヘッダー情報が消え、通常通りの表示になりました。

mb_encode_mimeheader($refrom_name)を、
mb_encode_mimeheader($refrom_name,ISO-2022-JP,'B', "\n")←こんなような記述に変更しました。

どうやら(FROM:差出名)は、一定の文字数を超えると自動改行されるらしく、それが原因で不具合が出ると。引数を設定することで、改行を明示的に指定する(?)と解決しました。

いずれにしましても皆様のご協力に感謝いたしております。ありがとうございました。

投稿2016/06/21 13:36

morie

総合スコア29

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

CRLFとLFが混じったメールがqmailのMTAを通ったのが原因かも知れません。
参考: phpからメールを送ると、改行がなくなったり、改行が増えたりする件 at softelメモ

qmailはCRLFとLFの処理がぶっ壊れているらしいのですが、残念ながら、まだまだ使っているところがあったりします。本来、メールの改行コードはすべて"CRLF"でなければなりません。しかし、手動でヘッダ部分を作ったりすると、一部のみ"LF"のみになっていたりして、混ざった物になってしまいます。全体のコードを見てみないとはっきりとはわかりませんが、書かれているコードでは"\n"のみを改行コードとして使っているため、この現象に該当する可能性があります。

"\r\n"にしてみる、最後に全て改行コードをまとめてリプレースしてみるなど、改行コードが統一されるように修正してみてください。

投稿2016/06/20 10:47

raccy

総合スコア21735

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kaz.Suenaga

2016/06/20 11:06

おじゃまします。本題からはずれますが。。 bare LFですね。 これ(bare LF 問題) RFC 的にはqmailの問題ではない、というのが作者(DJB)の立場なんですよね http://cr.yp.to/docs/smtplf.html 。 MTAとしてのqmailが受け取る時点でCR+LFになっていなければならない、という。 雑談でした。
morie

2016/06/20 11:15

お知恵をお借りすることができて光栄です。明日、早速試してみたいと思います。
guest

0

プログラムの問題の可能性が高いと思います。

メールのヘッダと本文の境目は空白行が入る、というように決まっています。
おそらく本来ヘッダであるべきところで空白行が発生しているのだと思います。
エンコード等が関わっている箇所に見えますので、想定していない空白行が発生していないか、確認してみてください。


追記

他の方のご指摘の改行コードの問題の方が今回の回答としては適切でしたのでそちらをご確認ください。

投稿2016/06/20 10:42

編集2016/06/20 11:08
kaz.Suenaga

総合スコア2037

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

morie

2016/06/20 11:16

お知恵をお借りすることができて光栄です。感謝しております。
guest

0

規定ではメールヘッダの行の区切りは \r\n となっていますが、こう直してもダメですか?

投稿2016/06/20 10:40

Zuishin

総合スコア28660

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Zuishin

2016/06/20 10:57

もう少し詳しく書きます。 RFC2822により、ヘッダの行の区切りは CRLF(\r\n) とされています。 メールサーバーによっては LF のみの行を自動的に CRLF へと変換するものもあるのですが、出力された本文を見ますと、ヘッダが改行無しに挿入されています。 したがって、ソース中の「\n」を「\r\n」へと変更することで改善する可能性があります。 google や yahoo などは受信時に改行を自動的に修復しているのではないかと思われます。
morie

2016/06/20 11:18

お知恵をお借りすることができて光栄です。yahooメールやgmailでは補完機能があるとするなら合点がいきますね。明日、早速試してみたいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問