2012-11-30 4 views
0

포워드 계정으로 전자 메일을 전달하는 .forward.postix가 있습니다. 따라서 전자 메일을 구문 분석하는 PHP 스크립트가 제공됩니다.PHP에서 전자 메일 첨부 파일 구문 분석

지금까지 온라인에서 본 모든 것을 기반으로 explode('From: ', $email); 접근 방식을 사용하여 데이터베이스에 필요한 모든 데이터를 분할했습니다.

첨부 파일을 입력하십시오! 동일한 접근법을 사용하여 jpg 첨부 파일을 꺼내기 위해이 작업을 수행합니다. 그러나 모든 이메일 클라이언트가 원시 소스를 동일한 방식으로 포맷하지는 않으며 일부 두통을 유발합니다.

$contentType1 = explode('Content-type: image/jpg;', $email); //start ContentType 
$contentType2 = explode("--Boundary_", $contentType1[1]); //end ContentType 

$jpg1 = explode("\n\n", $contentType2[0]); //double return starts base64 blob 
$jpg2 = explode("\n\n", $jpg1[1]); //double return marks end of base64 blob 

$image = base64_decode($jpg2[0]); //decode base64 blob into jpg raw 

여기 내 문제입니다 : 모든 메일 클라이언트 - Gmail과 같은 예를 들어 - 'Content-type: image/jpg' 등의 첨부 파일을 나열합니다. GMail은 'Content-Type: IMAGE/JPEG'에 넣고 때로는 'Content-Type: image/jpeg'으로 보냅니다! 어느 내 폭발과 일치하지 않습니다 ...

내 질문 : 누군가가 base64 BLOB의 경계를 찾는 더 나은 방법을 알고 있습니까? 또는 'Content-Type:'을 폭발시키는 대소 문자를 구분하지 않는 방법 일 수 있습니다. 그런 다음 image/jpg 또는 image-jpeg과 비교해 볼 수 있습니다.

+0

추가 참고 : Regex를 사용하여 폭발하지 말고 머리글 문과 일치시킬 것을 권장합니다. – h2ooooooo

+0

PHP 내장 IMAP 기능을 사용해 보셨습니까? 나는 과거에 그걸 가지고 성공적으로 해결책을 구현했다. –

답변

1

preg_split()을 사용하여 문자열을 분할 할 수 있습니다. 아마도 이런 식으로

$pattern = '#content-type: image/jpe?g#i'; 
$split_array = preg_split($pattern, $email); 
+0

나는 내 모든 문제를 해결할 수있는 패턴을 쓰는 방법이있을 것이라고 생각한다. 그러나 그 패턴은 나에게 의미가 없으며 나는 내 삶을 찾을 수 없다. "사전"은 무엇을하는지. 'e? '는 e를 옵션으로 만들고,'i'는 대문자와 소문자를 구별합니다. 고마워 친구 야! –

+0

@JoelHackney 예 '?'는 0 또는 1 또는 이전 패턴 구성 요소가 될 수 있음을 나타냅니다. 패턴 변경자'i'는 당신이 짐작했던 것처럼 대소 문자를 구분하지 않습니다. –

+0

@JoelHackney 제 수정 된 답변에 유의하십시오. 나는 단지 이미지/jpe? g (내용 유형)가 아닌'image.jpe? g' (파일 이름과 같은)를 검색했다는 것을 알아 냈습니다 –

관련 문제