2006.06.26

PHPを使ってメールを送信する時の注意

PHPでメールを送信するには、mail()関数やmb_send_mail()関数を
使用することになるかと思います。
日本語のメールを送るにはmb_send_mail()が便利であると、
いろいろなサイトでも紹介されていると思いますが
私は今までmail()関数を使用してきました。

今回、PHPプログラムの文字コードがEUCJP、プログラムの文字コードが
SJISでメール送信処理を行ったところ、件名が途中で切れてしまい
本文のなかにヘッダー情報が紛れ込んでいました。

参考に、件名「途中で文字がきれてしまうかもしれない」を入力したところ
このようなメールが届いてしまいます。

mail.gif

メールのソースを確認してみるとこのようなメールが届いています。

source.gif
通常、メールヘッダとメール本文は一行の空行で区切られるとRFC2822で定義されています。
この決まりによって、メーラーが一行改行以降は本文と認識してしまい、
途中で切れてしまう結果となりました。
メールヘッダのエンコード処理を行ったために、おきてしまったようです。
この場合は、無駄な改行コードを取り除く処理を行うことで、
件名が途切れることなく送信できるようになりました。

その後、mb_send_mail()関数を使用してみたところ、エンコード処理
を行うこともなく、改行を取り除く必要もなく、当たり前のように
簡単にメールが送れてしまいました。

どちらを使うべきなのか、悩みどころです。

コメント (1)

ちょっと疑問が…。
『件名に「途中で文字がきれてしまうかもしれない」を指定すると
なぜ余計な改行が入るか』について言及されていないようですね。

>この場合は、無駄な改行コードを取り除く処理を行うことで、
>件名が途切れることなく送信できるようになりました。

とありますが、もとの文章には無駄な改行コードは無いように見えます。

それがわかればどちらの関数を使った方が良いのか悩む必要もないのでは?
それ以前に、なぜmail()を使うのかについても書いてもらえるともっとわかりやすいです。

コメントを投稿

(いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)

photo
nishimaki