Mineaki Gotoh
gij****@peak*****
2002年 11月 1日 (金) 09:55:31 JST
こんにちは、PEAKの後藤です。お久しぶりです。 このところずっと他の仕事に忙殺されていたのですが、なんとか時間が取れ そうですので、ブランクの分を追いつこうと、MLを古い方から一通りチェッ クしている最中です。鈴川さんの拡張モジュールは非常に面白そうで、ぜひ 一通り試したいのですが、そこまで到達する時間があるかどうか……。 閑話休題。 まずは、さっそく見つけた不具合(というか、私のバグ)を報告しておきま す。 catalog/includes/classes/email.php 438行目 旧) // tamura mb_encode_mimeheaderを追加 2002/07/01 if ($subject != '') $subject = mb_encode_mimeheader(mb_convert_encoding($subject,'JIS','EUC'));// tamura 2002/04/27 $to = ($to_name != '') ? '"' . (mb_encode_mimeheader(mb_convert_encoding($from_name,'JIS','EUC') ) . '" <' . $from_addr. '>') // tamura 2002/04/27 : $to_addr; $from = ($from_name != '') ? (mb_encode_mimeheader('"' . mb_convert_encoding($from_name,'JIS','EUC') . '"') . ' <' . $from_addr. '>') // tamura 2002/04/27 新) // tamura mb_encode_mimeheaderを追加 2002/07/01 if ($subject != '') $subject = mb_encode_mimeheader(mb_convert_encoding($subject,'JIS','EUC'));// tamura 2002/04/27 $to = ($to_name != '') ? '"' . (mb_encode_mimeheader(mb_convert_encoding($to_name,'JIS','EUC') ) . '" <' . $to_addr . '>') // tamura 2002/04/27 : $to_addr; $from = ($from_name != '') ? '"' . (mb_encode_mimeheader(mb_convert_encoding($from_name,'JIS','EUC') ) . '" <' . $from_addr. '>') // tamura 2002/04/27 : $from_addr; 具体的に何が悪かったか、というと、 mb_encode_mimeheader() は、空白文字によって分けられたトークンごとに、 エンコードするかどうかを決める という仕様だと、私が知らなかったことです。(技術文書を読んだわけでは ありませんが、経験則的には正しそうです) 例えば、宛先や差出人名が、"後藤" であれば、全体がMIMEエンコードされま すので、 =?ISO-2022-JP?B?IhskQjhlRiMbKEIiIDxicj4=?= <gij****@peak*****> となりますが、"PEAK 後藤" だった場合には、トークンごとにエンコードの 要否が判断されますので、前半部分のトークンはエンコードされず、 "PEAK =?ISO-2022-JP?B?GyRCOGVGIxsoQiIgPGJyPg==?= <gij****@peak*****> となってしまいます。 このメールアドレスでは、そもそも送信すらされない可能性が大です。 そんなわけで、" はmb_encode_mimeheaderの外に追い出してあげるのが、一 番無難な選択だと思います。(本当はこれだけだとエラーチェックは不完全 で、例えばKDDIの社員が、「H" 後藤」なんて名前で入力したら、やっぱり送 信に失敗しますが、そこまでは考えなくても良い気はします) 今まで、この部分について、それほど目立ったエラー報告がなかったのは、 たまたまこういう差出人名や宛先名がなかっただけだと思いますが、お客様 が会社名と個人名をスペースで区切って入力することも十分に考えられます ので、影響の大きなバグとも言えます。 というわけで、修正をお願いします。 -- 株式会社PEAK ネットワーク技術担当 後藤 <gij****@peak*****>