PHPコーディング

不達メールの取り出し

2009年03月02日
送ったメールアドレスが無効な場合、エラーメールが返ってきます。

PHPからエラーメールをメールボックスから取り出します。

メールボックスにあるメールの全てのヘッダとボディを見ていると、不達で返ってきたリターンメールにはどうやら、

Final-Recipient: rfc822; メールアドレス
Action: failed

が含まれているようです。


不達メールを調べるには、【Final-Recipient】と【Action: failed】を探し、メールアドレスを抽出するのがよさそうです。


はじめはボディに含まれている【User Unknown】と【Host Unknown】を調べていたのですが、Yahoo!メールはアカウントがないという意味のエラーメールを返しているようなのです。Yahoo!メールからのリターンメールには【User Unknown】も【Host Unknown】も含まれていません。


他に共通するものがないかと調べてみると、全てに共通するのが、
Final-Recipient: rfc822; メールアドレス
Action: failed
のようなのです。

エラーナンバーからの調査も考えたのですが、他のものもひっかかりそうなので、断念しました。



メールボックスのメールを読むの各々のメールを取得の部分を少し書き換えればエラーメールのみ抽出できます。

for($id=1; $id<=$mail_num; $id++){
  @fputs($fp, "RETR ".$id."
");
  $line = @fgets($fp);
  while(!eregi("^.
? ", $line)){
    $mail = fgets($fp, 512);
  }
}

$mailの中に【stristr】関数を使って【Final-Recipient】と【Action: failed】が含まれるかチェックすればわかります。