PHPでメール配信処理をしています。
TOもしくはCCに複数のアドレスを指定する時に「,」(カンマ)で指定することで
複数のメールアドレスに配信されるという認識でPHPコードを記述しました。
しかし、TOは正常に配信されますがCCだけ最後に指定したアドレスが配信されないです。
Webで調べましたが、やはり分からないのでアドバイスいただきたいです。
OS:CentOS release 5.4
PHP 5.1.6
mb_language("ja");
mb_internal_encoding("UTF-8");
$header = "From: " . mb_encode_mimeheader("TOサンプル") . "<" . $from . ">\n";
$header .= "Cc: " . mb_encode_mimeheader("CCサンプル") . "<aaa@sample.com>";
$header .= "," . mb_encode_mimeheader("$cc") . "<" . $cc . ">";
mb_send_mail($to, $sub, $data, $header) or die ("メールの送信に失敗しました");
aaa@sample.com は常にCCに入れるためここで記述しています。
受信後のメールのヘッダを見ると下記のようになります。
<"bbb@sample.com, ccc@sample.com, ddd"@sample.com>
最後に指定したメールアドレスの「@」の直前に「"」が入ってしまい
メールアドレスのフォーマット要件を満たしていないため配信されないことは分かったのですが、
何故こうなるかが分かりません。
TOに同様に「,」区切りでメールアドレスを複数指定すると、問題なく配信されます。
cat -e で改行コードもチェックしましたが問題ないです
(全て末尾に「$」が付いたため)
宜しくお願いします。
No.3ベストアンサー
- 回答日時:
書かれていることから判断すると、上記のプログラム編を実行する時点の $cc に、
"bbb@sample.com, ccc@sample.com, ddd" という内容が入っているからそうなるのではないかとしか言えないですね。
・$cc に値をセットする部分が書いてない
・TOにセットしてうまくいくというコードが書いてない
あと、$header の最後に "\n" が無い場合にどうなるのか?自動的に"\n"を補ってくれるのかのあたりも確認するか、マニュアル通りおとなしく"\n"を付けておくか。
>書かれていることから判断すると、上記のプログラム編を実行する時点の $cc に、
>"bbb@sample.com, ccc@sample.com, ddd" という内容が入っているからそうなるのではないかとしか言えないですね。
No.2の返信にも記述しましたが送信処理の前後に echo $cc; で確認しているので「"」を意図的に挿入しているのは考えられないですね。
>・$cc に値をセットする部分が書いてない
説明不足ですいません。
これは単純にPOSTメソッドで受け取った値を一度変数に格納している感じです。
$to = $_POST["to"]; ←こんな感じです。
TOに関して言えばこれ以外に特に記述はないです。
変数にセットした後にmb_send_mail関数に渡しています。
※メールアドレスのフォーマットを満たしているかどうかのチェックは省略します
>あと、$header の最後に "\n" が無い場合にどうなるのか?自動的に"\n"を補ってくれるのかのあたりも確認するか、マニュアル通りおとなしく"\n"を付けておくか。
この際なのでいろいろやってみました。
From列の「\n」を外すとメールの配信処理そのものに失敗します。
Cc列の末尾に「\n」を追記するとデフォルトのCC「aaa@sample.com」のみ配信され、他追加分のCCには配信されません。
3行目の末尾に「\n」を追記すると現状変わらず、最期に指定したCCのアドレスのみ配信されず「@」の前に「"」が挿入されます。
結論を言いますと何とか強引に(?)解決に持っていきました。
>$header .= "," . mb_encode_mimeheader("$cc") . "<" . $cc . ">";
この列を以下のように変えました。
配信自体はどれでも機能しますが、(3)の場合ですとヘッダに下記のように記述されます。
但し、配信自体は重複されず1通ずつ配信されます。
bbb@sample.com,ccc@sample.com,ddd@sample.com,bbb@sample.com,ccc@sample.com,ddd@sample.com
(1)$header .= "," . mb_encode_mimeheader("$cc");
(2)$header .= "," . $cc;
(3)$header .= "," . mb_encode_mimeheader($mail_cc) . "," . $mail_cc;
理由としましてはメールのログに
to=<bbb@sample.com,ccc@sample.com,ddd@sample.com>のログがありまして
この配信は拒否されています。
その後、TOで指定したアドレスデフォルトのCC、bbb、cccへの配信のログが残っていました。
ご回答ありがとうございました。
No.2
- 回答日時:
よく判らないけど、そもそも$ccに『"bbb@sample.com, ccc@sample.com, ddd"@sample.com』が入っていたってオチがあり得る?
仮に正常に入っていたとして、希望通りに動いたとしても
bbb@sample.com, ccc@sample.com, ddd@sample.com <bbb@sample.com, ccc@sample.com, ddd@sample.com>
判り易く宛先+宛名に分解してみると、結局は以下のようにならない?
bbb@sample.com,
ccc@sample.com,
ddd@sample.com <bbb@sample.com, ccc@sample.com, ddd@sample.com>
※1
ここを、やりたい意味を勘案してコードを直しても
bbb@sample.com <bbb@sample.com>,
ccc@sample.com <ccc@sample.com>,
ddd@sample.com <ddd@sample.com>,
どっちみち宛先=宛名なら意味ないから、
>TOに同様に「,」区切りでメールアドレスを複数指定すると、問題なく配信されます。
でOKでは?
ちなみに、※1のように分解されるから、前2つには届くけどって事ではないかな?
>よく判らないけど、そもそも$ccに『"bbb@sample.com, ccc@sample.com, ddd"@sample.com』が入っていたってオチがあり得る?
メールの送信前と送信後に echo $cc; で確認する限り「@」の前後に「"」は入っていないです。
>ちなみに、※1のように分解されるから、前2つには届くけどって事ではないかな?
説明不足でした。
今回はサンプルでbbb、ccc、dddをCCに追加してますが、
通常想定しているのは不特定多数のCCアドレスの追加です。
仰るとおり、最後に指定したアドレスのみ配信されないです。
因みにデフォルトのCCに加え、CCに1つだけ追加なら問題なく配信されます。
ご回答いただきありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP php 完了画面の送信メールのコードを書いているのですが・・・ 2 2023/06/02 12:01
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- Gmail 【お助け!】サーバーからのメール送信でGmailに送信されない問題について 1 2023/06/20 22:03
- Gmail メーラーのThunderbirdの送信機能に関する質問です 3 2022/07/10 10:58
- Visual Basic(VBA) 【追加】ファイルを閉じてダイアログで保存した時だけ処理の実行をする 3 2022/03/23 15:43
- Visual Basic(VBA) VBAにてメール作成した際、一部指定箇所のみ赤文字にしたいです。 下記の内容ですと作成されたメール本 1 2022/04/27 13:31
- その他(ビジネス・キャリア) ビジネスメールの書き方についての質問ですが、メールの書き出し部分で、Toの方を上の行に書き、CCの方 3 2022/04/05 16:27
- Visual Basic(VBA) ExcelVBAで配列2つを結合させて重複アドレスを削除したいです 3 2023/04/25 15:31
- Visual Basic(VBA) エクセルのマクロを使ってメールを送る方法について教えてください 2 2022/03/29 01:36
- その他(メールソフト・メールサービス) メールでtoとcc間違えたんですけど データ送信的には問題ないですかね? (マナーとかは置いといて) 2 2022/07/21 10:23
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
SJISで取得した半角カナをUTF-8...
-
文字化け変換方法
-
PHPmailerでの添付ファイルの文...
-
SJIS→UTF-8変換後の文字化けに...
-
PHP cURLでPOSTした値が文字化...
-
phpのメールフォームの完了画面...
-
RSSを取得すると文字化けする。
-
Access VBA wiht文での実行時エ...
-
小さいひらがな(っ、ょ、ぃ、ゃ...
-
廣のjis変換で文字化け
-
エスケープ文字の復帰(¥r)と...
-
ソースコードの1行が長いとき...
-
VBAのコマンドボタンの文字列の...
-
ファイルから読み取った改行文...
-
メッセージボックスで1025文字...
-
jsp 改行コードで改行させて表...
-
全角英数文字が嫌われる理由を...
-
全角括弧と全角読点の間隔を狭...
-
Excel関数「COUNTIF」で”文字”...
-
記号は半角と全角どちらがよい...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
SQL Serverで文字コードUTF-8
-
文字化け変換方法
-
SJISで取得した半角カナをUTF-8...
-
UTF8メールがLotus Notesで文字...
-
PHPmailerでの添付ファイルの文...
-
PostgreSQLからCSV形式でエクス...
-
phpのメールフォームの完了画面...
-
記号だけの文字化け対応について
-
mail()で送信したメールのタイ...
-
PHP+Postgres 「髙」が文字化け
-
メールのCCに複数のアドレスを...
-
phpフォームで携帯へメール送信...
-
IMAP関数で取得した文字列の、...
-
PHP cURLでPOSTした値が文字化...
-
mb_convert_encoding で 一部の...
-
小さいひらがな(っ、ょ、ぃ、ゃ...
-
mb_strposについて予定外の結果...
-
UTC-8→SJISで文字化け
-
PHPでの文字列置換について
-
SJIS→UTF-8変換後の文字化けに...
おすすめ情報