« 眠れる偉大なる力 | トップページ | Webリテラシー検定 »

添付ファイル付きメール

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メールでも メーラーでの受信でも、ちゃんと添付ファイルあり、本文も見えてる、送信者も件名も化けてないメールが出来ました。

今回は、だいぶメールヘッダーのお勉強になりました。

|

« 眠れる偉大なる力 | トップページ | Webリテラシー検定 »

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/520403/43326808

この記事へのトラックバック一覧です: 添付ファイル付きメール:

« 眠れる偉大なる力 | トップページ | Webリテラシー検定 »