6月 04

この記事をブックマークする : このページをはてなブックマークに追加 このページをLivedoorクリップ! このページをニフティクリップに登録 newsing it! このページをdel.icio.usに登録 このページをBuzzurlにブックマーク

タガヤっす。

空メールを処理する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として使う。という仕様にしました。

うーん、スッキリ♪

この記事をブックマークする : このページをはてなブックマークに追加 このページをLivedoorクリップ! このページをニフティクリップに登録 newsing it! このページをdel.icio.usに登録 このページをBuzzurlにブックマーク

Comments are closed.