2012-04-02 16 views
10

का उपयोग कर मैं एक साइट है, जिसमें उन टिकट मेल और एक विशिष्ट मेल आईडी के लिए फ़ाइलों को किसी भी प्रकार की संलग्न कर सकते हैं विकासशील हूँ एक विशिष्ट फ़ोल्डर में मेल अटैचमेंट डाउनलोड करने के लिए कैसे। मुझे डेटाबेस में मेल विषय, सामग्री और अनुलग्नक जोड़ने की आवश्यकता है। मैं क्रॉन का उपयोग कर ऐसा कर रहा हूँ। अनुलग्नकों को छोड़कर हर चीज सही काम करती है। मैंने कुछ पोस्ट देखी हैं जो डाउनलोड लिंक बनाते हैं। चूंकि मैं क्रॉन का उपयोग कर रहा हूं, मैं इसे मैन्युअल रूप से नहीं कर सकता।IMAP और php

 $hostname = '{xxxx.net:143/novalidate-cert}INBOX'; 
     $username = '[email protected]'; 
     $password = 'zzzz'; 
     /* try to connect */ 
     $inbox = imap_open($hostname,$username,$password) or die('Cannot connect to : ' . imap_last_error()); 
     $emails = imap_search($inbox,'ALL'); 

       if($emails) { 
      $output = ''; 
      rsort($emails); 
      foreach($emails as $email_number) { 
      $structure = imap_fetchstructure($inbox, $email_number); 
      $name = $structure->parts[1]->dparameters[0]->value; // name of the file 
      $type = $structure->parts[1]->type; //type of the file 
}} 

मैं प्रकार और फ़ाइलों के नाम प्राप्त करने में सक्षम हूँ, लेकिन पता नहीं है आगे

कोई एक मेरी मदद कृपया आगे बढ़ने के लिए कैसे। धन्यवाद ...

उत्तर

6

अनुलग्नकों को बचाने के लिए। आपको लगता है कि लपेट चाहिए अपने स्वयं के वर्गों में तो आप एक आसान उपयोग कर सकते है और आप समय के साथ और अधिक आसानी से त्रुटियों संभाल कर सकते हैं, ईमेल पार्स कमजोर हो सकता है:

$savedir = __DIR__ . '/imap-dump/'; 

$inbox = new IMAPMailbox($hostname, $username, $password); 
$emails = $inbox->search('ALL'); 
if ($emails) { 
    rsort($emails); 
    foreach ($emails as $email) { 
     foreach ($email->getAttachments() as $attachment) { 
      $savepath = $savedir . $attachment->getFilename(); 
      file_put_contents($savepath, $attachment); 
     } 
    } 
} 

इन कक्षाओं का कोड और अधिक या कम imap_... लपेटकर है कार्य, लेकिन अनुलग्नक वर्गों के लिए, यह संरचनाओं की पार्सिंग भी कर रहा है। You find the code on github। उम्मीद है कि यह सहायक है।

+0

आपको बहुत बहुत धन्यवाद ... & + 1. अब यह काम कर रहा है – Juice

+0

हाय @ लिमी जेरिन, क्या आप यहां काम करने वाले कोड पोस्ट करने के लिए बहुत दयालु होंगे? ऐसा लगता है कि मेरे अंत से काम नहीं करना है, अनुलग्नक डाउनलोड नहीं किया जा रहा है –

5

पीएचपी + क्रॉन और एक मानक मेल सर्वर का उपयोग कर काम कर सकते हैं हालांकि, काम सब किनारे मामलों संभालने के लिए आवश्यक, त्रुटि की सूचना, आदि की राशि समय के लायक नहीं हो सकता है। हालांकि मैं उपयोग नहीं किया है, Postmark Inbound एक अविश्वसनीय (भुगतान) सेवा है कि PHP imap एपीआई के माध्यम से प्रसंस्करण ईमेल का सिरदर्द का सबसे समाप्त करेंगे की तरह लगता है।

आप PHP के माध्यम से सब कुछ संभाल करने की कोशिश करना चाहते हैं, तो आप this resource की जाँच कर सकते हैं। के रूप में फाइल, तो आप संदेश की संरचना को पार्स करने और सभी भागों है कि यह की अपनी (सामग्री स्वभाव) पर संलग्नक हैं बाहर लेने की जरूरत

+0

कभी बोझ बहुत मूल्यवान समझना एकीकृत और त्रुटि रिपोर्ट निकालें-सेवाओं के लिए। खासकर किनारे के मामलों। – hakre

+0

सच - दोनों पक्षों को निश्चित रूप से वजन कम करना होगा। यदि आपकी प्रोजेक्ट के मूल में ईमेल प्रोसेसिंग नहीं है, तो अपने आप को लिखना सबसे अच्छा हो सकता है, लेकिन यदि आप इनबाउंड ईमेल प्रोसेसिंग आउटसोर्सिंग को सरल बनाना चाहते हैं तो तर्क एक अच्छा विकल्प हो सकता है। – iloveitaly

0

मामले में आप के रूप में जिप

$zip = new ZipArchive(); 
$tmp_file = tempnam('.', ''); 
$zip->open($tmp_file, ZipArchive::CREATE); 

$mailbox = $connection->getMailbox('INBOX'); 
foreach ($mailbox->getMessage() as $message) { 
    $attachments = $message->getAttachments(); 
    foreach ($attachments as $attachment) { 
     $zip->addFromString($attachment->getFilename(), $attachment->getDecodedContent()); 
    } 
} 

$zip->close(); 

# send the file to the browser as a download 
header('Content-disposition: attachment; filename=download.zip'); 
header('Content-type: application/zip'); 
readfile($tmp_file); 

This code uses library hosted on GitHub से डाउनलोड करना चाहते हैं। उम्मीद है कि यह सहायक है।