タガヤっす。
空メールを処理するPHPを書いてて気付いたことがあったので、
備忘録的に記録しておきます。
まずソースをば。
// PEARのライブラリ読み込み
require_once 'Mail/mimeDecode.php';
require_once 'Mail/RFC822.php';
// メールソースを標準入力から読み込み
$source = file_get_contents("php://stdin");
// メール解析
$decoder = new Mail_mimeDecode($source);
$params['include_bodies'] = false;
$params['decode_bodies'] = false;
$params['decode_headers'] = true;
$structure = $decoder->decode($params);
$from = Mail_RFC822::parseAddressList($structure->headers['from']);
$mailto = $from[0]->mailbox . '@' . $from[0]->host;
これでハマりました(汗)
ソフトバンクのケータイからのメールを処理するときに、
Mail_RFC822::parseAddressList がエラーを吐きます(涙)
メールヘッダを解析して発見しました。
From: =?ISO-2022-JP?B?GyRCJVIlbRsoQg==?=
なんだこれ?
ISO-2022 のくだり、ダブルコーテーションでくくられて無いので、
parseAddressListが、「Invalid address spec. Unclosed bracket or quotes」を返してました。
で、以下のように変更。
// for Softbank
if (is_array($from)) {
$mailto = $from[0]->mailbox . '@' . $from[0]->host;
} else {
$mailto = $structure->headers['sender'];
}
Softbank には、「Sender」というヘッダ情報があるので、
これをFromと認定して、これをFromとして使う。という仕様にしました。
うーん、スッキリ♪
6月 04
最近のコメント