添付ファイル付きメール
PHPで添付ファイル付きのメール送信を作った。
OutlookExpressで無事受信できていたので、出来た!!と思っていたら大間違い。
なぜかWEBメールでは本文が表示されなかった orz
通常にメーラーから送った添付ファイル付きメールとどう違うのか、
ヘッダー情報を見比べながら、試行錯誤すること まる2日。
添付なしメールの時は問題なく本文が送れているし・・・ んーーー、、、
「あ!」
charset="iso-2022-jp";
添付付きメールでは、文字コードを明示してるけど、本文の文字コードはJISにしたままだからいけないんじゃないか・・・?
で、早速本文にあたる部分だけISO-2022-JPにエンコードする処理を追加。
msnのメールで確認して、これで問題なーし!! と思ったら、今度は普通のメーラーで送信者名が表示されないし、添付ファイルもbase64のバケバケ文字のまま、
本文の中に表示されちまってて 添付ファイル付きメールとして認識されていない。
$subject = mb_convert_encoding( $subject,"JIS","EUC-JP");
$subject = mb_encode_mimeheader( $subject,);
上記のように記述していたんだけど、XREAのサーバでは、パラメータを省略するとうまくエンコードされない事が前にもあったので、
$subject = mb_convert_encoding( $subject,"JIS","EUC-JP");
$subject = mb_encode_mimeheader( $subject,"ISO-2022-JP");
って変更。
しかし、まだ駄目。 msnは良いけど、OEで件名以降を本文として見なしている。
ヘッダーの情報を確認してみると、
Subject: =?ISO-2022-JP?B?GyRCIVobKEJZVUNISVpPLm5ldBskQiFbRTpJVSQiJGokTiVGJTklSBso?=
=?ISO-2022-JP?B?Qg==?=
あれれ? なんで二つも“=?ISO-2022-JP?B?”の記述があるのだ?
mail関数で勝手にISO-2022-JPにしてくれる、なんて事はなかったよなー
などと、エンコードの処理を追加したり消してみたりまさに試行錯誤。
しかし、エンコード無しにすると見事に文字化けするし。一回しかエンコードしてないのに、二回やったようになっちゃうし?
で 最後に「駄目モト」でやってみたのが、二つのエンコード処理を1行で書くってヤツ。
$subject = mb_encode_mimeheader(mb_convert_encoding( $subject,"JIS","EUC-JP"),"ISO-2022-JP");
でもこれって、結局は同じことだよなぁ、なんて思いつつも試してみたら
(@∇@)まぁ! 素敵~!!
無事に Webメールでも メーラーでの受信でも、ちゃんと添付ファイルあり、本文も見えてる、送信者も件名も化けてないメールが出来ました。
今回は、だいぶメールヘッダーのお勉強になりました。
| 固定リンク


コメント