2012-11-25 2 views
0

php 및 imap을 사용하여 이메일을 가져 오는 데 문제가 있습니다. 각 발신자가 다른 문자 인코딩으로 인코딩 된 이메일을 보내므로 나에게 보편적 인 해결책을 찾기가 어렵습니다.imap에서 이메일 가져 오기 및 UTF-8로 변환

데이터를 잃지 않고 from, to, subject 및 body/html을 UTF-8 문자열로 가져 오려면 어떻게해야합니까?

몇 시간 동안 해결책을 찾지 못했고 현재 코드가 문제를 해결하지 못했습니다.

인사말. 당신은 mb_detect_encoding() 기능을 사용해 볼 수 있습니다

답변

0

: http://php.net/manual/en/function.mb-detect-encoding.php

그리고 mb_convert_encoding() : http://php.net/manual/en/function.mb-convert-encoding.php UTF-8.

Content-Type: text/html; charset="UTF-8" 
+0

하지만 왜? 모든 전자 메일에는 인코딩 방법에 대한 정확한 정보가 들어 있습니다. 추측 할 필요가 없습니다 (mb_detect_encoding). –

+0

@Pekka - 이것을 어떻게 감지하여 UTF-8로 변환합니까? – Hedam

+0

@RoboForm 네, Pekka는 메일 헤더를 구문 분석 할 수 있습니다. 콘텐츠 인코딩 헤더가 있습니다. 다음과 같은 내용을 찾으십시오 :'Content-Type : text/html; charset = "인코딩 이름" –

1

당신은 그냥 "IMAP 이메일을 가져 오기 및 UTF-8로 변환"말할 수 없다 :

또한 예를 참조 Content-Type 헤더를 찾아, 이메일 헤더를 검사 할 수 있습니다.

$struct = $this->imap_fetchstructure($this->mbox, $mId, FT_UID); 

그런 다음 이메일의 내용을 선택하십시오. 그리고 당신은 당신이 이런 그 다음 필요로하는과에 converto 말 결정 후 : 난 그냥 당신이 당신의 자신에 OUTH을 파악해야 줘야 복사/내 수업 다른 부분에서 붙여

if($partStruct->encoding == 1) { 
    $data = $this->imap_utf8($data); 
} 
elseif($partStruct->encoding == 2) { 
    $data = $this->imap_binary($data); 
} 
elseif($partStruct->encoding == 3) { 
    $data = $this->imap_base64($data); 
} 
elseif($partStruct->encoding == 4) { 
    $data = $this->imap_qprint($data); 
} 
//etc..... 

을! 이것에 대한 쉬운 해결책을 찾고 있다면 아무 것도 없다고 말해 보겠습니다. 인터넷에서 항상 imap php 클래스를 다운로드 할 수 있습니다.