كيف يمكنني حفظ مرفقات البريد الإلكتروني إلى ملقم في PHP?

StackOverflow https://stackoverflow.com/questions/162576

  •  03-07-2019
  •  | 
  •  

سؤال

لقد تقاتل PHP قراءة البريد الإلكتروني وظائف أفضل جزء من يومين.أنا أكتب سيناريو قراءة رسائل البريد الإلكتروني من علبة حفظ المرفقات على الملقم.إذا كنت من أي وقت مضى فعلت شيئا من هذا القبيل ، قد يفهم ألمي: PHP لا تلعب بشكل جيد مع البريد الإلكتروني!

لقد متصلا إلى ملقم POP3 و لا يمكن تكرار الملفات.هنا هو مخطط تقريبي من التعليمات البرمجية:

if (!$mbox = imap_open ("{myserver.com:110/pop3/notls}INBOX", "u", "p"))
    die ('Cannot connect/check mail! Exiting');

if ($hdr = imap_check($mbox)) 
    $msgCount = $hdr->Nmsgs;
else 
    die ("Failed to get mail");

foreach ($overview as $message) {
    $msgStruct = imap_fetchstructure($mbox, $message->msgno);

    // if it has parts, there are attachments that need reading
    if ($msgStruct->parts) {
        foreach ($msgStruct->parts as $key => $part) {
            switch (strtoupper($part->subtype)) {
                case 'GIF': case 'JPEG':case 'PNG':

                    //do something - but what?!

                    break;
            }
        }
    }
}

لقد علمت أين أنا عالقة.يمكنني استخدام imap_fetchbody($mbox, $message->msgno, $key+1) ولكن هذا يحصل لي مجموعة من البيانات مثل هذا:

/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAUDBAQEAwUEBAQFBQUGBwwIBwcHBw8LCwkMEQ8S
EhEPERETFhwXExQaFRERGCEYGh0dHx8fExciJCIeJBweHx7/2wBDAQUFBQcGBw4ICA4eFBEU
Hh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh7/wAAR
CAHiAi0DASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAA
AgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkK
FhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWG
h4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl
5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREA
...

أنا أعتقد أن هذا هو MIME البيانات.أنا في حاجة إليها كصورة!لقد رأيت عدة فصول القصف في جميع أنحاء شبكة الإنترنت التي تدعي أنها تفعل المطلوبة السحر.لا أستطيع الحصول على أي منهم إلى العمل.أنا لا أفهم لماذا أجد هذا صعب جدا!

باختصار, أنا أبحث عن شيء يمكن أن تتحول الخام MIME السلسلة إلى بيانات حقيقية.

هل كانت مفيدة؟

المحلول

لقد وجدت دليل سريع كيفية التعامل مع رسائل البريد الإلكتروني مع PHP: هنا.

في أسفل الصفحة هناك ارتباط الجسم echo:

if (substr($ContentType,0,4) == "text") {
echo imap_qprint($fileContent);
} else {
echo imap_base64($fileContent);
}

أعتقد أن هذا هو ما قد تحتاج...

(تحرير:في حالة إذا كانت الصورة دائما يمكنك تخطي if جزء.وبالطبع حفظ الملف بدلا من ترديد ذلك:)

نصائح أخرى

MIME البيانات هو قاعدة-64 المشفرة ، لذلك أعتقد أن عليك أن تكون قادرة على فك ذلك باستخدام base64_decode

يمكنك استخدام imap_base64 وظيفة فقط الإخراج إلى ملف أو استخدام imap_savebody

الإطار زند يحتوي على Zend_Mail, التي ينبغي أن تجعل قراءة رسائل البريد الإلكتروني أسهل بكثير ، Zend_Mime التي أعتقد أن تحليل متعدد الأجزاء رسالة mime إلى معقول بنية البيانات.

http://framework.zend.com/manual/en/zend.mail.read.html

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top