سؤال

ولدي هذا الرمز. انها من 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
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top