2008-10-02 6 views
6

मैं दो दिनों के बेहतर हिस्से के लिए PHP के ईमेल पढ़ने के कार्यों से जूझ रहा हूं। मैं मेलबॉक्स से ईमेल पढ़ने और सर्वर पर कोई अनुलग्नक सहेजने के लिए एक स्क्रिप्ट लिख रहा हूं। यदि आपने कभी ऐसा कुछ किया है, तो आप मेरे दर्द को समझ सकते हैं: PHP ईमेल के साथ अच्छा नहीं खेलता है!मैं PHP में सर्वर से ईमेल संलग्नक कैसे सहेज सकता हूं?

मैंने पीओपी 3 सर्वर से कनेक्ट किया है और मैं फ़ाइलों को पुन: सक्रिय कर सकता हूं। यहां कोड की एक मोटा रूपरेखा है:

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 
... 

मुझे विश्वास है कि इस माइम डेटा है नेतृत्व कर रहा हूँ। मुझे इसे एक छवि के रूप में चाहिए! मैंने इंटरनेट के चारों ओर बमबारी करने वाले कई वर्गों को देखा है जो आवश्यक जादूगर करने का दावा करते हैं। मैं उनमें से कोई भी काम करने के लिए नहीं मिल सकता है। मुझे समझ में नहीं आता कि मुझे यह इतना मुश्किल क्यों मिल रहा है!

कम में, मैं कुछ है कि वास्तविक डेटा में एक कच्चे माइम स्ट्रिंग बदल सकते हैं के लिए देख रहा हूँ।

+0

क्या आपने संलग्नक एन्कोडिंग की जांच की है? – kender

+0

अरे क्या आप एक और पूर्ण स्निपेट पोस्ट कर सकते हैं? मुझे यह काम नहीं मिल रहा है बीसी मुझे यकीन नहीं है कि – st4ck0v3rfl0w

+0

से $ ओवरव्यू आ रहा है, मुझे आपकी जैसी ही समस्या है। मुझे कुछ अच्छा लेख मिला, और मुझे लगता है कि यह आपकी मदद कर सकता है http://www.linuxscope.net/articles/mailAttachmentsPHP.html इसका आनंद लें :) – Hassan

उत्तर

4

मैं एक त्वरित गाइड पाया कैसे पीएचपी के साथ ईमेल के इलाज के लिए उपयोग कर इसे डिकोड करने के लिए सक्षम होना चाहिए: here

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

मुझे लगता है कि यह है कि तुम क्या जरूरत हो सकती है ...

(संपादित करें:

कि पृष्ठ के तल पर एक लगाव शरीर echo वहाँ आपके मामले में अगर यह छवि हमेशा तुम्हारे है if हिस्सा छोड़ सकते हैं। और बेशक, बजाय इसे :) गूंज की फाइल को सेव

+0

एक आकर्षण की तरह काम किया। हाँ मैं पहले से ही सामग्री-प्रकार-पहचान कर रहा हूं (मेरे स्विच-स्टेटमेंट के साथ) इसलिए मुझे केवल imap_base64 की आवश्यकता है। – Oli

1

माइम डेटा बेस -64 एन्कोड किया गया है, तो मुझे लगता है आप base64_decode

1

आप एक फाइल करने के लिए कि imap_base64 समारोह और सिर्फ उत्पादन का उपयोग कर सकते हैं या उसका उपयोग imap_savebody

+0

imap_savebody (मेरे हालिया अनुभव से) एन्कोडेड डेटा बचाता है (जैसे कि आप fetchbody चलाते हैं) – Oli

1

ज़ेंड फ्रेमवर्क में ज़ेंड_Mail शामिल है, जो मेल संदेशों को पढ़ने में बहुत आसान बनाना चाहिए, और ज़ेंड_Mime, जो मुझे विश्वास है कि एक समझदार डेटा संरचना में मल्टीपार्ट माइम संदेश को पार्स कर सकता है।

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

+0

मुझे ज़ेंड फ्रेमवर्क पर तैनाती करने में सक्षम होना पसंद है लेकिन होस्टिंग सीमाएं इसे प्रतिबंधित करती हैं। यह एक वास्तविक दयालुता है क्योंकि सादा PHP में मेल-रीडिंग कार्यक्षमता सभी तार्किक समझ से परे है। – Oli

+0

क्या यह ढांचा का आकार है जो आपको वापस पकड़ रहा है? हमारे वेब ऐप्स बंडल ज़ेंड फ्रेमवर्क के लिए जब यह ग्राहक के वेब सर्वर पर उपलब्ध नहीं है। –

संबंधित मुद्दे