이 메일 메시지가 올바르게 해독되지 않는 이유는 무엇입니까?
-
08-07-2019 - |
문제
이 코드가 있습니다. 그것은 온 것입니다 Zend Reading Mail 예시.
$message = $mail->getMessage(1);
// output first text/plain part
$foundPart = null;
foreach (new RecursiveIteratorIterator($mail->getMessage(1)) as $part) {
try {
if (strtok($part->contentType, ';') == 'text/plain') {
$foundPart = $part;
break;
}
} catch (Zend_Mail_Exception $e) {
// ignore
}
}
if (!$foundPart) {
echo 'no plain text part found';
} else {
echo $foundPart->getContent();
}
내가 얻을 수있는 것은 메시지가 잘 작동합니다. 그러나 메시지를 읽을 수있는 것으로 해독하는 것은 작동하지 않습니다. 나는 Zend_mime, imap_mime 및 iconv를 운이없이 시도했습니다.
이것은 내가 얻는 것의 예입니다 $foundPart->getContent();
hall = f3 heim = far
"Halló Heimúr"라고 말해야합니다.
내가 원하는 것은 실제로 "푸시 버튼, 베이컨을받을 수있는"도서관입니다. 내 말은, 라이브러리를 POP3 전자 메일 상자에 가리키고 (인코딩 문제없이) 읽을 수있는 형태로 이메일과 첨부 파일로 이메일을 받고 싶습니다.
imap_mime_header_decode()
동일한 데이터가있는 배열을 제공합니다.
iconv_ mime_ decode()
동일합니다
누구든지 왜 이런 일이 일어나고 있는지 또는 내가 이것을 추상화 할 수있는 도서관 (PHP/Python 또는 Perl)
해결책
이것은 Base64 인코딩 때문일 수 있습니다. zend_mail 문서는 ( '인코딩'아래) say라고 말합니다.
... 다른 모든 첨부 파일은 addAttachment () 호출에 다른 인코딩이 제공되지 않으면 나중에 MIME 부품 객체에 할당되지 않은 경우 Base64를 통해 인코딩됩니다.
다음과 같은 것을 시도하십시오.
echo base64_decode($foundPart->getContent());
또한 읽기 :http://framework.zend.com/manual/en/zend.mail.encoding.html
어떻게 든 도움이되기를 바랍니다.
다른 팁
전자 메일 읽기에 Zend_mail을 사용하는 방법을 배우면서 비슷한 문제를 해결했습니다. 인코딩 된 이메일을 해독하고 문자 세트를 변환하는 등 Zend_mail이 구현하지 않는 추가 논리를 추가해야합니다. 평범한 텍스트 부분을 찾은 후에 내가하는 일은 다음과 같습니다.
$content = $foundPart->getContent();
switch ($foundPart->contentTransferEncoding) {
case 'base64':
$content = base64_decode($content);
break;
case 'quoted-printable':
$content = quoted_printable_decode($content);
break;
}
//find the charset
preg_match('/charset="(.+)"$/', $foundPart->contentType, $matches);
$charset = $matches[1];
if ($charset == 'iso-8859-1') {
$content = utf8_encode($content); //convert to utf8
}