لماذا لم تكن هذه رسالة بريد فك شفرة بشكل صحيح؟
-
08-07-2019 - |
سؤال
ولدي هذا الرمز. انها من rel="nofollow سبيل المثال زند قراءة البريد .
$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 ويكونف مع أي حظ.
وهذا هو مثال على ما أنا عليه مع $foundPart->getContent();
وقاعة = F3 = هايم الأقصى
اقتباس فقرة>وينبغي أن يقول "مرحبا heimúr"
وماذا اريد فقط بعض المكتبات حيث يمكن "ضغط على زر، وتلقي لحم الخنزير المقدد" في الممارسة العملية. ما أعنيه هو، أريد فقط أن أشير المكتبة إلى صندوق البريد الإلكتروني POP3 والحصول على البريد الإلكتروني في شكل مقروء (دون أية مشاكل الترميز) والمرفقات.
وimap_mime_header_decode()
يعطي لي مجموعة مع نفس البيانات.
iconv_ mime_ decode()
هل هي نفسها
هل لديها أي فكرة لماذا يحدث هذا أو بعض المكتبات حيث يمكنني فقط مجردة هذا بعيدا (PHP / بيثون أو بيرل)
المحلول
وهذا يمكن أن يكون بسبب base64 ترميز. وتقول مستندات Zend_Mail (تحت "ترميز"):
<اقتباس فقرة>... جميع الملحقات الأخرى المشفرة عبر base64 في حالة عدم ترميز الآخر بالنظر في الدعوة addAttachment () أو تعيين إلى كائن جزء MIME في وقت لاحق.
اقتباس فقرة>وجرب شيئا مثل:
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
}