どなたか複数行の文字列をメールのヘッダーに入れて送る方法しっていますか?
例:
$test = "今からテストメールを送信します。\n用意はいいですか?";
$mail_header .= "X- TEST: {$test}\r\n";
上記のような文字列をメールのヘッダーに入れて送ると「今からテストメールを送信します。」部分はX- TEST:のヘッダーの中に納まりますが、「用意はいいですか?」部分がメールの本文の上部にはみ出してしまいます。ヒアドキュメントも試しましたが、文字列の改行部分以降がメールの本文の上部にはみ出してしまいます。
やはり、一行につき一つのヘッダーが必要なのでしょうか?
このスレッドの質問に関して詳しい情報が記載されているサイトのURL等、ご存知でしたら、そちらもお願いします。
A 回答 (4件)
- 最新から表示
- 回答順に表示
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;
?>
この回答への補足
yambejpさん
ご回答、ありがとうございました。
yambejpさんの上記コードだと、X-TEST: ヘッダー内の文字列「今からテストメールを送信します。\n 用意はいいですか」が、文字化けして届きます。
文字化けの改善方法が分かりません。
一様、そのままテンプレートに適用しましたが、文字化けした文字が一行で表示されました。
追記:
下記のコードで上記の「この回答への補足」で指摘した文字化けは、なくなりました。
ただし、やはりヘッダー内の文字列は、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;
}
?>
<コード終了>
いかがでしょうか?やはりヘッダー内に改行を指定するのは無理な話なのでしょうか?
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()すればよいでしょう
この回答への補足
yambejpさん
ご回答、ありがとうございました。
数時間いろいろ試しましたが、できません。
>改行の後ろに半角スペースを一つ以上入れればすみます。
改行の後ろに半角スーペースを入れても、出力時にヘッダー内の任意の改行の場所で改行されません。
確かにyambejpさんがおっしゃるように、ヘッダ内の\nの後に半角スペースをいれると、そこでヘッダーは切れません。ですが、改行されずに半角スペースのみ反映されて出力されます。
例:
ヘッダー内の文字列:
$test = "今からテストメールを送信します。\n 用意はいいですか?";
出力:
今からテストメールを送信します。 用意はいいですか?";
出力は、Becky ver2(メーラー)のテンプレートにしています。
>受け取った側でmb_decode_mimeheader()すればよいでしょう
出力先がBecky ver2(メーラー)のテンプレートであるため、自分でmb_decode_mimeheader()をコードに付加できません。確かに半角スペースがあっては邪魔になりますが、出力先のmb_decode_mimeheader()以外で回避する方法はないのでしょうか?
よろしくお願いします。
追記:
ちなみに、mb_encode_mimeheaderを使用した場合ですが、mb_decode_mimeheader()でデコードしないと、Becky ver2(メーラー)のテンプレートで出力時に改行位置に半角スペースが自動で挿入されます(改行はされません)。
例:
ヘッダー内の文字列:
$test = "今からテストメールを送信します。\r\n用意はいいですか?";
出力:
今からテストメールを送信します。 用意はいいですか?";
No.2
- 回答日時:
であれば一度基本となるrfc2822を参照するとよいでしょう。
今回の件は文字コードや一行文字数の制限なども絡んでくる可能性もあり
ちょっと微妙ではありますが・・・
この回答への補足
yambejpさん
ご回答ありがとうございました。
以下を読みましたが、改行する方法があるのかどうか分かりません。
http://srgia.com/docs/rfc2822j.html
>この仕様が 1 行の文字数に課す制限は二つある。CRLF を除いて、各
>行は 998 文字を超えてはならならず(MUST)、78 文字を超えるべきで
>はない(SHOULD)。
了解しました。
>ヘッダの "折り返し(folding)" と "展開(unfolding)" とを使用する
>場合には CRLF を含むこともできる。
了解しました。ただし、この場合、”ヘッダー内の記述”を折り返すかどうかだけのように思います。私の場合は、ヘッダー内の文字列を引用(他の場所で使用)した場合に、任意の位置で改行したいのです。
>今回の件は文字コードや一行文字数の制限なども絡んでくる可能性も
>あり
ヘッダー内の文字コードですが、ASCIIと日本語文字を含みます。
少しRFCの解読の方に話がずれてきてしまっているので、元の質問に戻りますが、「どなたか複数行の文字列をメールのヘッダーに入れて送る方法しっていますか?」
よろしくお願いします。
上記「この回答への補足」に記述した文章の訂正:
以下訂正後:
>ヘッダの "折り返し(folding)" と "展開(unfolding)" とを使用する
>場合には CRLF を含むこともできる。
了解しました。ただし、この場合、”ヘッダー内の記述”を折り返すかどうかだけのように思います。私の場合は、ヘッダー内の文字列を引用(他の場所で使用)した場合に、任意の位置(この位置を予めヘッダー内で指定したい)で改行して出力したいのです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBAにてメール作成した際、一部指定箇所のみ赤文字にしたいです。 下記の内容ですと作成されたメール本 1 2022/04/27 13:31
- その他(Microsoft Office) outlookで宛先が異なるメールを一括送信する方法 outlookで200人それぞれをtoに指定し 2 2023/08/03 21:24
- 迷惑メール・スパム 迷惑メールの発信国 7 2022/11/20 21:17
- その他(メールソフト・メールサービス) メールアドレスに大文字を含んだメールの仕分けができない。 1 2022/04/28 12:02
- Amazon アマゾン 7 2022/06/11 11:03
- Excel(エクセル) PowerQueryに詳しい方教えてください(Office365) 1 2022/07/24 21:11
- Android(アンドロイド) スマホ Gメール URLの文字が青く表示されない 4 2023/06/13 19:32
- UNIX・Linux redmineにメールを飛ばす方法 1 2022/09/13 22:02
- PHP カラーミーショップのSmartyでの文字列抜き出し 2 2022/05/06 11:51
- UNIX・Linux Postfixでドコモメールに送信すると届くまで10分ぐらいかかる 6 2023/03/05 13:56
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
メールの本文が取得できない
-
mb_send_mailについて
-
メール送信者の日本語指定について
-
mb_send_mailでタイトルにハテ...
-
php 完了画面の送信メールのコ...
-
PHP5での空メールが実行されない
-
メールフォームのタイトルが文...
-
PEAR::Mailを使ったメール本文...
-
mb_send_mail の出力をファイル...
-
【BAT(バッチ)ファイル】Web...
-
PHP8を使うと、大量のWarningが...
-
onedrive にexcelファイルをア...
-
文字化けに関して
-
ヒアドキュメントを中断してinc...
-
文字化けについて
-
FORMで送信ボタンと戻るボタン...
-
空メールの作り方教えて欲しい...
-
透過PNGが透過されない!!
-
「localhostの応答を待っていま...
-
携帯で、phpページからhtmlペー...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
さくらサーバーにて、phpからメ...
-
mb_send_mail関数が利用出来ない
-
ローカル環境でのメール送信
-
pearのMailライブラリがうまく...
-
メールの本文が取得できない
-
PHPからメールを送る@さくらイ...
-
cronでメールを送信すると文字...
-
指定した時間にPHPプログラムを...
-
mail関数を使った場合のReturn-...
-
mb_send_mailでのメール送信が...
-
mb_send_mailについて
-
ワードプレス 予約システム
-
mb_send_mailでタイトルにハテ...
-
phpでのメール送信
-
PHP4.4.1でmb_send_mailの送信...
-
mb_send_mail()が使えない
-
PHPで、一度に大量のメールの送...
-
mb_send_mailを実行するとエラ...
-
PHPでのフォーム送信・・・・
-
コマンドプロンプト、VBSでの添...
おすすめ情報