2011-11-08 3 views
1

특정 주소로 보낸 전자 메일 메시지를 기록하는 작업을하고 있습니다. 나는 잘 작동하는 MySql에 정보를 넣는 PHP 스크립트를 가지고있다.PHP의 전자 메일, 메시지 스레딩, 정규식이 필요합니다

Gmail과 유사한 '대화'를 기반으로 메일을 그룹화 할 수 있어야하며 이미이 내용을 읽었습니다. 메시지가 웹 사이트에 표시되기 전에 수동으로 승인되어 오류를 수정할 수 있기 때문에 완벽 할 필요는 없습니다. 나는 새로운 전자 메일을 원본에 연결하는 작업이 자동으로 수행되도록 작업량을 최대한 줄이고 싶습니다.

내 이해는 In-Reply-To 헤더가 원본 메시지를 식별 할 수 있지만 그 사용은 표준이 아닙니다.

내가 다른 페이지에이를 발견,이 그것이 인 - 회신하려면 필드가있는 경우, 그 가정에 무리 아니라고 것처럼 보입니다 그러나

The most common forms of In-Reply-To seemed to be: 

31%  NAME's message of TIME <[email protected]> 
22%  <[email protected]> 
9%  <[email protected]> from NAME at "TIME" 
8%  USER's message of TIME <[email protected]> 
7%  USER's message of TIME 
6%  Your message of "TIME" 
17%  hundreds of other variants (average 0.4% each?) 

, 다음 첫 번째 <> 괄호 문자를 발견 여기에는 상위 메시지의 Message-ID가 있습니다.

그래서 가장 쉬운 방법은 무엇입니까? 사용할 수있는 경우 <> 안에있는 모든 것을 잡을 수있는 정규식이 있습니까? (내가 발견 한 게시물에 따르면, 이것이 <>의 첫 번째 값이어야합니까?)

도움을 주셔서 감사합니다.

답변

2

그냥 백 참조의 첫 경기를 잡아 할 수 있어야한다 :

<(.+)>

설명 : 달성하기 위해 다음과 같은

// Match the character “<” literally «<» 
// Match the regular expression below and capture its match into backreference number 1 «(.+)» 
//  Match any single character that is not a line break character «.+» 
//   Between one and unlimited times, as many times as possible, giving back as needed (greedy) «+» 
// Match the character “>” literally «>» 

this documentation에 따르면 당신이 뭔가를 쓸 수 당신이 무엇을하고 싶어하는지 (이 PHP가 유효하지 않은 경우 용서해주세요) :

$string ='blah blah blah <[email protected]>'; 
preg_match('/<(.+)>/', $string, $match); 
print_r($match); 
+0

어떻게 PHP 커맨드가 변수에 필요한 값을 얻을 수 있을지와 같이 어떻게 사용합니까? –

+0

@SherwinFlight 예제를 업데이트했습니다. – Matt

+0

안녕하세요, SO가 알림을 자주 보내지 않고 업데이트 된 것을 깨달았습니다. 나는 당신의 코드를 체크 아웃하고 완벽하게 작동합니다. 고마워. 이 질문에 대한 답을 수락 할 것입니다. –

관련 문제