• 締切済み

複数行の文字列をメールのヘッダーに入れて送る方法?

どなたか複数行の文字列をメールのヘッダーに入れて送る方法しっていますか? 例: $test = "今からテストメールを送信します。\n用意はいいですか?"; $mail_header .= "X- TEST: {$test}\r\n"; 上記のような文字列をメールのヘッダーに入れて送ると「今からテストメールを送信します。」部分はX- TEST:のヘッダーの中に納まりますが、「用意はいいですか?」部分がメールの本文の上部にはみ出してしまいます。ヒアドキュメントも試しましたが、文字列の改行部分以降がメールの本文の上部にはみ出してしまいます。 やはり、一行につき一つのヘッダーが必要なのでしょうか? このスレッドの質問に関して詳しい情報が記載されているサイトのURL等、ご存知でしたら、そちらもお願いします。

みんなの回答

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.4

ちょっと質問が断片的になっていますので、全体構成として 以下のようなソースで送ってもダメでしょうか? <? $version=phpversion(); $header=<<<eof From: hoge <hoge@example.co.jp> Return-Path: <fuga@example.co.jp> MIME-Version: 1.0 Content-Type: text/plain; charset=iso-2022-jp Content-Transfer-Encoding: 7bit X-Mailer: PHP/{$version} eof; $test = "今からテストメールを送信します。\n 用意はいいですか?"; $header .= "X-TEST: {$test}\r\n"; $to="piyo@example.co.jp"; $subject="test"; $message=<<<eof hoge1 hoge2 hoge3 hoge4 eof; mail($to,$subject,$message,$header); print $header; ?>

kitty1000
質問者

お礼

追記: 下記のコードで上記の「この回答への補足」で指摘した文字化けは、なくなりました。 ただし、やはりヘッダー内の文字列は、Becky ver2(メーラー)のテンプレートで出力時にヘッダー内で定めた任意の改行箇所で改行はされません。 例: ヘッダー内の文字列: $test = "今からテストメールを送信します。\n 用意はいいですか?"; 出力: 今からテストメールを送信します。 用意はいいですか? <コード開始> <?php if (isset($_POST['send'])) { $version=phpversion(); $header=<<<eof From: hoge <hoge@example.co.jp> Return-Path: <fuga@example.co.jp> MIME-Version: 1.0 Content-Type: text/plain; charset=iso-2022-jp Content-Transfer-Encoding: 7bit X-Mailer: PHP/{$version} eof; mb_language('japanese'); mb_internal_encoding('UTF-8'); $test = "今からテストメールを送信します。\n 用意はいいですか?"; $header .= "X-TEST: {$test}\r\n"; $to="piyo@example.co.jp"; $subject="test"; $message=<<<eof hoge1 hoge2 hoge3 hoge4 eof; $header = mb_convert_encoding($header, "JIS"); mail($to,$subject,$message,$header); print $header; exit; } ?> <コード終了> いかがでしょうか?やはりヘッダー内に改行を指定するのは無理な話なのでしょうか?

kitty1000
質問者

補足

yambejpさん ご回答、ありがとうございました。 yambejpさんの上記コードだと、X-TEST: ヘッダー内の文字列「今からテストメールを送信します。\n 用意はいいですか」が、文字化けして届きます。 文字化けの改善方法が分かりません。 一様、そのままテンプレートに適用しましたが、文字化けした文字が一行で表示されました。

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.3

rfcを読まれたみたいなのでお分かりだと思いますが $test = "今からテストメールを送信します。\n 用意はいいですか?"; と改行の後ろに半角スペースを一つ以上入れればすみます。 (かなり端折ったやり方なので問題も山積ですが) スペースが邪魔であればきちんとマイムエンコードする必要があります <? //仮にEUC-JPで書いているとして・・・ $test = "今からテストメールを送信します。\r\n用意はいいですか?"; $test=mb_convert_encoding($test,"UTF-8","EUC-JP"); $test=mb_encode_mimeheader($test,"UTF-8"); こうしておいて、受け取った側でmb_decode_mimeheader()すればよいでしょう

kitty1000
質問者

お礼

追記: ちなみに、mb_encode_mimeheaderを使用した場合ですが、mb_decode_mimeheader()でデコードしないと、Becky ver2(メーラー)のテンプレートで出力時に改行位置に半角スペースが自動で挿入されます(改行はされません)。 例: ヘッダー内の文字列: $test = "今からテストメールを送信します。\r\n用意はいいですか?"; 出力: 今からテストメールを送信します。 用意はいいですか?";

kitty1000
質問者

補足

yambejpさん ご回答、ありがとうございました。 数時間いろいろ試しましたが、できません。 >改行の後ろに半角スペースを一つ以上入れればすみます。 改行の後ろに半角スーペースを入れても、出力時にヘッダー内の任意の改行の場所で改行されません。 確かにyambejpさんがおっしゃるように、ヘッダ内の\nの後に半角スペースをいれると、そこでヘッダーは切れません。ですが、改行されずに半角スペースのみ反映されて出力されます。 例: ヘッダー内の文字列: $test = "今からテストメールを送信します。\n 用意はいいですか?"; 出力: 今からテストメールを送信します。 用意はいいですか?"; 出力は、Becky ver2(メーラー)のテンプレートにしています。 >受け取った側でmb_decode_mimeheader()すればよいでしょう 出力先がBecky ver2(メーラー)のテンプレートであるため、自分でmb_decode_mimeheader()をコードに付加できません。確かに半角スペースがあっては邪魔になりますが、出力先のmb_decode_mimeheader()以外で回避する方法はないのでしょうか? よろしくお願いします。

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

であれば一度基本となるrfc2822を参照するとよいでしょう。 今回の件は文字コードや一行文字数の制限なども絡んでくる可能性もあり ちょっと微妙ではありますが・・・

kitty1000
質問者

お礼

上記「この回答への補足」に記述した文章の訂正: 以下訂正後: >ヘッダの "折り返し(folding)" と "展開(unfolding)" とを使用する >場合には CRLF を含むこともできる。 了解しました。ただし、この場合、”ヘッダー内の記述”を折り返すかどうかだけのように思います。私の場合は、ヘッダー内の文字列を引用(他の場所で使用)した場合に、任意の位置(この位置を予めヘッダー内で指定したい)で改行して出力したいのです。

kitty1000
質問者

補足

yambejpさん ご回答ありがとうございました。 以下を読みましたが、改行する方法があるのかどうか分かりません。 http://srgia.com/docs/rfc2822j.html >この仕様が 1 行の文字数に課す制限は二つある。CRLF を除いて、各 >行は 998 文字を超えてはならならず(MUST)、78 文字を超えるべきで >はない(SHOULD)。 了解しました。 >ヘッダの "折り返し(folding)" と "展開(unfolding)" とを使用する >場合には CRLF を含むこともできる。 了解しました。ただし、この場合、”ヘッダー内の記述”を折り返すかどうかだけのように思います。私の場合は、ヘッダー内の文字列を引用(他の場所で使用)した場合に、任意の位置で改行したいのです。 >今回の件は文字コードや一行文字数の制限なども絡んでくる可能性も >あり ヘッダー内の文字コードですが、ASCIIと日本語文字を含みます。 少しRFCの解読の方に話がずれてきてしまっているので、元の質問に戻りますが、「どなたか複数行の文字列をメールのヘッダーに入れて送る方法しっていますか?」 よろしくお願いします。

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

メールのヘッダについてどこまでRFCで確認しましたか?

kitty1000
質問者

補足

yambejpさん >メールのヘッダについてどこまでRFCで確認しましたか? RFCで確認はしていませんが、私の知っている限りでは、通常、改行はそのメールヘッダーの終了を意味すると言うことです。 ただ、ここでメールヘッダー内の改行の仕方についてお聞きしたのは、何か特殊にメールヘッダー内の改行の仕方があるのではないかと思ったからです(根拠はありません。)。 ご意見をいただけますか?