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

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

ただいまの
回答率

90.50%

  • PHP

    24089questions

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

  • メール

    311questions

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

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

解決済

回答 4

投稿

  • 評価
  • クリップ 1
  • VIEW 2,667

morie

score 17

メールのことでお聞きしたいのですが、
フリーのメール送信プログラム(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();

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

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 4

check解決した方法

+2

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

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

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

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/06/20 19:57

    もう少し詳しく書きます。
    RFC2822により、ヘッダの行の区切りは CRLF(\r\n) とされています。

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

    キャンセル

  • 2016/06/20 20:18

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

    キャンセル

0

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

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


 追記

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

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/06/20 20:16

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

    キャンセル

0

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

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/06/20 20:06

    おじゃまします。本題からはずれますが。。

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

    雑談でした。

    キャンセル

  • 2016/06/20 20:15

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

    キャンセル

同じタグがついた質問を見る

  • PHP

    24089questions

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

  • メール

    311questions

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

  • トップ
  • PHPに関する質問
  • 特定のメールサーバで受信したメールにだけ、なぜかヘッダー情報が表示されてしまう。