[PHP-users 26669] PEAR のPOP3で送信元アドレスが取得できない問題

倉谷蓮(有限会社コットンシステム開発) ren @ ctnml.net
2005年 8月 29日 (月) 00:12:45 JST


以前PEARのPOP3.phpについて投稿しました倉谷です。
今回も同じくPOP3.phpについてどうしても解決できない問題に当たり投稿に踏み切りました、よろしくお願いします。

今回目的とするプログラムはPOP3サーバーに接続し、そこにあるメールを一括受信しそのメールのタイトルや本文、そして送信者のメールアドレスなど基本的な情報を取得しようというものです。

<?
require_once("Net/POP3.php");
$pop3 = new Net_POP3;
$res=$pop3->connect('POP3サーバーのホスト名',110);
if(PEAR::isError($res))die("error");
$res=$pop3->login("ユーザー名","パス");
if(PEAR::isError($res))die("error");

$list=$pop3->getListing();
foreach($list as $item){
	$id=$item["msg_id"];
	$msg= $pop3->getMsg($id);
	print $msg."<br><br>";
}
$pop3->disconnect();
?>

本当は$msgをmimeDecodeで要素ごとに取得しています。
今当たっている問題はその要素で、Subjectや本文などはとれているのですがreturn-pathやFrom,TOのメアド部分がとれないというものです。
おかしいなと思い$msgを上のように生で表示してみると

Return-Path: Received: from mx.crocus.ocn.ne.jp (mx.crocus.ocn.ne.jp [222.146.51.144]) by crocus.ocn.ne.jp (Postfix) with ESMTP id 1F22F2F25 for ; Sun, 28 Aug 2005 22:05:02 +0900 (JST) Received: from server.ctnml.net (125.109.138.210.bn.2iij.net [210.138.109.125]) by mx.crocus.ocn.ne.jp (Postfix) with ESMTP id 7FA552ED0 for ; Sun, 28 Aug 2005 22:05:01 +0900 (JST) Date: Sun, 28 Aug 2005 22:05:01 +0900 From: =?ISO-2022-JP?B?GyRCQVJDK08hGyhCKBskQk0tOEIycTxSJTMlQyVIJXMlNyU5JUYlYDMrSC8bKEIp?= X-Mailer: EdMax Ver3.06 MIME-Version: 1.0 To: =?ISO-2022-JP?B?GyRCQVJDK08hGyhCKE9DTik=?= Subject: =?ISO-2022-JP?B?GyRCJD8kJCRIJGsbKEI=?= Content-Type: text/plain; charset=ISO-2022-JP Content-Transfer-Encoding: 7bit Message-Id: <20050828130403.0B5A3FB018E @ server.ctnml.net> 本文 

このように <ren @ ctnml.net> と入るはずの文字が完全に消えている状態です。
なお、対象としているPOP3サーバーはプロバイダ(OCN)の提供するものですのでサーバー側の問題とはあまり考えられません。
念のためこのサーバーにRETRを投げてみるときちんとRetrurn-Path: <ren @ ctnml.net>と返ってきています。
POP3.phpはサーバーに対してRETRを投げその返しを見てるんだろうと予測しソースを読んだところまさにそのとおりでした。
RETRコマンドを送りその返しの最初3字がOK+だったら返しの文章を1行ずつよみつなげていくという_getMultiline部分(1120行目)が要だろうと思いここで$tmpを毎回表示したんですがこの部分ですでにReturn-Pathの値は消えていました。
となると_recvLnが原因かと思い見てみたところsocket部へ突入してしまい、一応socket.phpのほうも見ましたがあまりに深く入りすぎ結局どこで消えてしまっているのか解決できませんでした。
この<メアド>部分が消えてしまうことについて何か知っていることありましたら教えていただけませんか?




PHP-users メーリングリストの案内