3

バウンスしたメールを php スクリプトに転送して処理したいと考えています。私は使っている。

 #!/usr/bin/php -q
 <?php

 // read from stdin
 $fd = fopen("php://stdin", "r");
 $email = "";
 while (!feof($fd)) {
$email .= fread($fd, 1024);
 }
   fclose($fd);

   // handle email
   $lines = explode("\n", $email);

  // empty vars
   $from = "";
    $subject = "";
    $headers = "";
    $message = "";
    $splittingheaders = true;

    for ($i=0; $i < count($lines); $i++) {
    if ($splittingheaders) {
    // this is a header
    $headers .= $lines[$i]."\n";

    // look out for special headers
    if (preg_match("/^Subject: (.*)/", $lines[$i], $matches)) {
        $subject = $matches[1];
    }
    if (preg_match("/^From: (.*)/", $lines[$i], $matches)) {
        $from = $matches[1];
    }
} else {
    // not a header, but message
    $message .= $lines[$i]."\n";
}

if (trim($lines[$i])=="") {
    // empty line, header section has ended
    $splittingheaders = false;
   }
   }

  ?>     

完璧に動作します!しかし、バウンスされたメッセージの「To」フィールドを収集するにはどうすればよいでしょうか? $to 変数を追加しようとしましたが、うまくいきません。

どんな助けでも素晴らしいでしょう、

ありがとう、

編集:実際には、メッセージの本文内に「TO」フィールドを取得する必要があります。- 返送元のメール。メッセージの本文を分解して特定の情報を取得するにはどうすればよいですか? この情報を簡単に取得できるように、その人の電子メールで特別なヘッダーを作成する必要がありますか?

4

1 に答える 1

1

カスタム ヘッダーを作成できる場合は、それが最も簡単です。それ以外の場合は、特定のパターンについて全身と照合する必要があります。また、本文のテキストが異なる可能性がある場合、常に正しいテキストと一致していることを確認するのが難しくなる可能性があります。

カスタム ヘッダーは で始まる必要がX-あるため、次のようにします。

if (preg_match("/^X-Originally-To: (.*)/", $lines[$i], $matches)) {
    $originallyto = $matches[1];
}

ただし、X- ヘッダーは非標準であるため、次のいずれかの名前を選択することをお勧めします。

  1. 同じ目的のためにのみ一般的に使用される、または
  2. 他の人が使用する可能性はまったくありません

もう 1 つ注意する必要があります。メッセージ内の行は常に「\r\n」で終わる必要があるため、より一貫した動作を確保するために、(単に「\n」ではなく) 両方の文字で分割することをお勧めします。

于 2012-02-05T11:13:31.983 に答える