mb_send_mailで添付メール

2006年12月28日 | PHP+DB
たまには開発日記らしいことも書かないと「タイトルに偽りあり!」って言われそうなので、書いておきますかぁ。プログラムやらない人にはちんぷんかんぷんでしょうから、どうかなとも思うのですが・・・。

先日、PHPのmb_send_mailで添付メールを送るスクリプトを作ろうとしたときのこと。具体的にどうするかはググっていただければいくつか出てくると思うので省略しますが、mb_send_mailでは無理と書いている方もいらっしゃいました。これは、ほぼイエスですがノーでもあります。結論的には、受け手の環境によるということです。

問題はヘッダです。mb_send_mailは、関数自身が作成するヘッダの後にこちらが付けたいヘッダを付け加えます。ファイルを添付するには、

Content-Type: multipart/mixed;・・・・

というヘッダにする必要があるのですが、mb_send_mailは通常のメールと同様

Content-Type: text/plain;・・・・

を入れてしまうんですよね。つまり、2つのContent-Typeヘッダが

Content-Type: text/plain;・・・・
Content-Type: multipart/mixed;・・・・

の順に送られることになります。これを(おそらく最初のは無視して)multipart/mixedと解釈してくれるメールソフトなら添付ファイルとして認識してくれます。MacOS XのMailとか私が以前使っていたMusashiというメールソフトはOKでした。でも、WinのOutlookはNGです。Winで出来ないものを世間では出来るとは言わないので(笑)、そういう意味ではmb_send_mailで添付ファイルは無理ということになりますね。

で、結局どうするかといいますと、mb_send_mailではなくmailという関数を使います。mb_send_mailが勝手にやってくれる処理を自分で行う必要がありますが(必要なヘッダは自分で付けないとなりませんし、本文をJISに変換してから渡さないと文字化けします)、これで問題なく添付ファイルが送れることになります。

最新の画像もっと見る

コメントを投稿