PHPでメールを送信するには、mail()関数やmb_send_mail()関数を
使用することになるかと思います。
日本語のメールを送るにはmb_send_mail()が便利であると、
いろいろなサイトでも紹介されていると思いますが
私は今までmail()関数を使用してきました。
今回、PHPプログラムの文字コードがEUCJP、プログラムの文字コードが
SJISでメール送信処理を行ったところ、件名が途中で切れてしまい
本文のなかにヘッダー情報が紛れ込んでいました。
参考に、件名「途中で文字がきれてしまうかもしれない」を入力したところ
このようなメールが届いてしまいます。
メールのソースを確認してみるとこのようなメールが届いています。
通常、メールヘッダとメール本文は一行の空行で区切られるとRFC2822で定義されています。
この決まりによって、メーラーが一行改行以降は本文と認識してしまい、
途中で切れてしまう結果となりました。
メールヘッダのエンコード処理を行ったために、おきてしまったようです。
この場合は、無駄な改行コードを取り除く処理を行うことで、
件名が途切れることなく送信できるようになりました。
その後、mb_send_mail()関数を使用してみたところ、エンコード処理
を行うこともなく、改行を取り除く必要もなく、当たり前のように
簡単にメールが送れてしまいました。
どちらを使うべきなのか、悩みどころです。
コメント (1)
ちょっと疑問が…。
『件名に「途中で文字がきれてしまうかもしれない」を指定すると
なぜ余計な改行が入るか』について言及されていないようですね。
>この場合は、無駄な改行コードを取り除く処理を行うことで、
>件名が途切れることなく送信できるようになりました。
とありますが、もとの文章には無駄な改行コードは無いように見えます。
それがわかればどちらの関数を使った方が良いのか悩む必要もないのでは?
それ以前に、なぜmail()を使うのかについても書いてもらえるともっとわかりやすいです。
投稿者: EGA | 2006年6月26日 20:11