2012-02-05 5 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"필드를 얻을 필요가있다. - 다시 반송 된 이메일. 특정 정보를 얻기 위해 메시지 본문을 어떻게 분리합니까? 이 정보를 얻는 것이 더 쉽도록 그 사람의 이메일과 함께 특별한 헤더를 만들어야합니까?

+0

메시지의 본문이 어떻게 보이는지 알아야 정규식으로 그 메시지를 가져올 수 있습니다. – Alasdair

+0

때로는 더 신뢰할 수있는 또 다른 옵션은 고유 한 리턴 경로로 모든 메시지를 보내는 것입니다. 그렇게하면 메시지가 반송되는 이메일 주소를 기반으로 어떤 메시지가 다시 수신되는지 알 수 있습니다. –

답변

1

사용자 정의 헤더를 만들 수 있다면 가장 쉽습니다. 그렇지 않으면 특정 패턴에 대해 몸 전체를 대조해야합니다. 본문 텍스트가 다를 수 있다면 항상 올바른 텍스트와 일치하는지 확인하기가 어려울 수 있습니다.

사용자 정의 헤더는 그래서 아마 그런 짓을, X-로 시작해야합니다

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

그러나 X- 헤더, 그들은 표준이 아닌, 그래서 그것은이다 이름 중 하나

을 선택하는 것이 가장 좋습니다
    일반적으로 같은 목적으로 만 사용
  1. , 또는
  2. 하지 가능성은 모든
에서 다른 사람에 의해 사용되는

당신이 알아야 할 또 하나의 사실; 메시지의 줄은 항상 "\ r \ n"으로 끝나야하므로보다 일관된 동작을 보장하기 위해 두 문자 ("\ n"대신)로 분할 할 수 있습니다.

관련 문제