[PHP-users 18956]550エラーメールの処理

A.Nishio a-nishio @ m-3.co.jp
2003年 11月 16日 (日) 19:51:05 JST


はじめまして。
にしおと申します。
サイトより、メール配信を行っているのですが、その際に
550エラーで返送されたメールアドレスをスクリプトを利用し
自動的に停止せたく考えています。
下記のスクリプトを使用したのですが、停止になりません。
アドバイスを頂戴できればと思います。
よろしくお願いいたします。

$stdin = fopen("php://stdin", "r");
$flag = "no";
$flag2 = 0;

while (!feof ($stdin)) {
  $buffer = fgets($stdin);
  if (preg_match ("/^From: MAILER-DAEMON @ www.tenq.net/i", $buffer)) {
    $flag = "local";
    break;
  } elseif (preg_match ("/^From: Postmaster @ ezweb.ne.jp/i", $buffer)) {
    $flag = "ez1";
    break;
  } elseif (preg_match ("/^From: Mail Administrator
<Postmaster @ ezweb.ne.jp>/i"
            , $buffer)) {
    $flag = "ez2";
    break;
  } elseif (preg_match ("/^From: Postmaster @ docomo.ne.jp/i", $buffer)) {
    $flag = "docomo1";
    break;
  } elseif (preg_match ("/^From: Mail Administrator
<Postmaster @ docomo.ne.jp>/i"
            , $buffer)) {
    $flag = "docomo2";
    break;
  } elseif (preg_match ("/^From: Postmaster @ jp-k.ne.jp/i", $buffer)) {
    $flag = "jp1";
    break;
  } elseif (preg_match ("/^From: Mail Administrator
<Postmaster @ jp-k.ne.jp>/i"
            , $buffer)) {
    $flag = "jp2";
    break;
//  } elseif (preg_match ("/^From: /i", $buffer)) {
//    $flag = "st1";
//    break;
  }
   }


if ($flag != "no") {
  while (!feof ($stdin)) {
    $buffer = fgets($stdin);
    switch ($flag) {
      case 'local':
        if ((preg_match ("/^Remote host said: 550/i", $buffer))) {
          $flag2 = 1;
 }
        if ((preg_match ("/^Remote_host_said: 550/i", $buffer))) {
          $flag2 = 1;
 }
        if (($flag2 == 1) && (preg_match ("/^To: /i", $buffer))) {
          $pattern = array ("/^To: /i", "/\s$/i");
          $replace = array ("", "");
          $mail = preg_replace ($pattern, $replace, $buffer);
          break 2;
        }
//      case 'st1':
//        if (preg_match ("/^\sfor </i", $buffer)) {
//          $pos1 = strpos ($buffer, "<") +1;
//          $pos2 = strpos ($buffer, ">");
//          $len = $pos2 - $pos1;
//          $mail = substr ($buffer, $pos1, $len);
//          break 2;
//        }
      case 'ez1':
        if (preg_match ("/^\sfor </i", $buffer)) {
          $pos1 = strpos ($buffer, "<") +1;
          $pos2 = strpos ($buffer, ">");
          $len = $pos2 - $pos1;
          $mail = substr ($buffer, $pos1, $len);
          break 2;
        }
      case 'ez2':
        if (preg_match ("/^</i", $buffer)) {
          $pos1 = 1;
          $pos2 = strpos ($buffer, ">");
          $len = $pos2 - $pos1;
          $mail = substr ($buffer, $pos1, $len);
          break 2;
        }
      case 'docomo1':
        if (preg_match ("/^\sfor </i", $buffer)) {
          $pos1 = strpos ($buffer, "<") +1;
          $pos2 = strpos ($buffer, ">");
          $len = $pos2 - $pos1;
          $mail = substr ($buffer, $pos1, $len);
          break 2;
        }
      case 'docomo2':
        if (preg_match ("/^</i", $buffer)) {
          $pos1 = 1;
          $pos2 = strpos ($buffer, ">");
          $len = $pos2 - $pos1;
          $mail = substr ($buffer, $pos1, $len);
          break 2;
        }
      case 'jp1':
        if (preg_match ("/^\sfor </i", $buffer)) {
          $pos1 = strpos ($buffer, "<") +1;
          $pos2 = strpos ($buffer, ">");
          $len = $pos2 - $pos1;
          $mail = substr ($buffer, $pos1, $len);
          break 2;
        }
      case 'jp2':
        if (preg_match ("/^</i", $buffer)) {
          $pos1 = 1;
          $pos2 = strpos ($buffer, ">");
          $len = $pos2 - $pos1;
          $mail = substr ($buffer, $pos1, $len);
          break 2;
      }
    }
  }
}
fclose ($stdin);
// print ($mail . "\n");



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