[PHP-dev 1186] Re: PHP4.4.1でmb_send_mailの第5引数が利かなくなってる
Tadashi Jokagi
ml @ elf.no-ip.org
2005年 11月 5日 (土) 19:31:52 JST
上鍵です.こんにちは.
Rui Hirokawaさんの<20051105141734.FABA.RUI_HIROKAWA @ ybb.ne.jp>から
>mb_send_mail()については、改行コードに\nがハードコードされている
>ところやヘッダが長い場合の折り返しについて問題点として指摘されて
>いた気がしますが、具体的にはどんな問題だったでしょうか?
mb_send_mail() は最終的に mail() に橋渡しするのですが,下記の
ような問題があります.
・Subject が RFC 違反
メールヘッダーはフィールド名とフィールド値(と改行文字)の合計が
76 文字未満としていますが,mb_encode_mimeheader() は 74 文字で
ハードコーディングされているため,フィールド値だけで 74 文字で
改行されます.よって 1 行目が「Subject:」の分長くなります.
・Windows は改行文字は「\r\n」でなければ RFC 違反
Windows は引数で渡された値がそのまま SMTP プロトコルに使用され
ます.SMTP は CR+LF の改行文字でなければならないので,LF だけ
では RFC 違反になります.
・いきなり第 2 引数あるいは(省略値)でエンコードしようとする
「[php-users:####]」のように ASCII で始まる場合でもいきなり MIME
エンコードしようとします.その為,一部の ML ドライバーやメーラー
などで問題が出る場合があるようです.
#ある程度細かいことは自分の blog に書いてあるのですが
一応現在 Text_I18n という名前のクラスを作成しており,iconv,
mbstring を選択してマルチバイト文字列を扱えるようなものを作成しよ
うとしています.MIME エンコードは iconv の方がより正確に行えること,
海外では mbstring より組み込まれている可能性は非常に高いので,むし
ろ最近は iconv に期待したいところです.
#iconv も箇条書きの 3 つ目の問題が BASE64 の場合だけあるんですよね.
がっくししたので自分でエンコード処理書いちゃいました
--
----.----1----.----2----.----3----.----4----.----5----.----6----.----7
Tadashi Jokagi/Setagaya city mailto:elf @ elf.no-ip.org
YokukitanaII http://elf.no-ip.org/
Yokukitablog http://blog.poyo.jp/
Yokukitawiki http://wiki.poyo.jp/
PHP-dev メーリングリストの案内