2012-02-05 7 views
3

バウンスしたメールをPHPスクリプトに転送して、そのメールを処理したいと考えています。使っています。TOフィールドを収集する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"フィールドを収集するのですか?私は変数に$を追加しようとしましたが、うまくいきません。

すべてのヘルプは素晴らしいことだ、

おかげで、

EDITは:実は私は、メッセージの本文内の "TO" フィールドを取得する必要があります。 - それが戻ってきた電子メール。特定の情報を取得するには、メッセージの本文をどのように分解しますか?この情報を入手するのがより簡単になるように、その人の電子メールで特別なヘッダーを作成する必要がありますか?

+0

あなたはメッセージの本文をどのように見ているのかを知ってから、正規表現でそれをつかむ必要があります。 – Alasdair

+0

時にはより信頼できる別のオプションは、すべてのメッセージを一意のリターンパスで送信することです。そうすれば、メッセージが返送されている電子メールアドレスに基づいて、どのメッセージがあなたに返ってくるのか正確に知ることができます。 –

答えて

1

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

ある名前を選択するのが最善であるので、

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

しかし、X-ヘッダで、彼らは非標準です:

カスタムヘッダーはそうかもしれないような何かを、X-で始める必要があります

  1. 一般的に、同じ目的のために独占的に使用、またはすべての
で誰が使用する
  • そうにありません

    もう1つ注意してください。メッセージの行は常に "\ r \ n"で終わるべきです。したがって、より一貫性のある動作を確保するために、( "\ n"の代わりに)両方の文字を分割したい場合があります。

  • 関連する問題