2009-07-08 15 views
11

शायद मुझे आज एक बुरा मस्तिष्क मिला है, लेकिन अचानक मैं यह नहीं समझ सकता कि रूबी की नेट/आईमैप लाइब्रेरी के साथ एक ईमेल कैसे पढ़ा जाए। मैं कई घंटों तक रहा हूं। मैंने Google में "रूबी इमाप रीड बॉडी" के कई बदलाव टाइप किए हैं और कई साइटों की खोज की है। उनमें से सभी में अनुलग्नक खींचने, ई-मेल सर्वर सिंक करने, जीमेल आदि के साथ काम करने के उदाहरण हैं ... कुछ (चिलकट की तरह) वास्तव में शेयरवेयर लाइब्रेरी हैं जो आपके लिए यह करते हैं। मैंने नेट/इमेप दस्तावेज को देखा है और हालांकि सबकुछ करने के लिए कई उदाहरण हैं लेकिन शरीर के पाठ को पढ़ना।रूबी की नेट/आईमैप लाइब्रेरी का उपयोग करके ईमेल के बॉडी टेक्स्ट को कैसे पढ़ा जाए?

मैंने पहले नेट/आईमैप के साथ काम किया है, लेकिन मुझे केवल एक इनबॉक्स में एक निर्देशिका में संलग्नक खींचने की आवश्यकता है। मैंने # रूबी और # रूब्योनराइल्स में कोई फायदा नहीं लिया है - कोई भी इसे समझ नहीं सकता है।

 

imap=Net::IMAP.new('mail.xks.com') #of course these are not real 
imap.login('web1_xk3','pxx2006') 
imap.select('INBOX') 
imap.search(["SENTSINCE",(Time.now-1.day).strftime("%d-%b-%Y")]).each do |msgid| 
    body = imap.fetch(msgid,"BODY")[0].attr["BODY"] 
    ##insert code for getting the text from the body here 
    ##body.class is BodyTypeText 
end 
 

पीएस हालांकि मैं कोड में सक्रिय समर्थन के लिए एक संदर्भ करते हैं, इस बिना रेल है, तो इसका मतलब है कि कोई कार्रवाई नहीं की-मेलर

उत्तर

20

तुम सिर्फ संदेश का सिर्फ शरीर सामग्री आप का उपयोग कर सकते हैं:

body = imap.fetch(message_id,'BODY[TEXT]')[0].attr['BODY[TEXT]'] 

आईएमएपी एपीआई हालांकि थोड़ा गूढ़ है। आप पूरे संदेश के साथ सौदा करना चाहते हैं, मैं एक प्रारूप आसान उपयोग करने के लिए में पार्स करने के लिए TMail का उपयोग कर की सिफारिश करेंगे:

msg = imap.fetch(message_id,'RFC822')[0].attr['RFC822'] 
mail = TMail::Mail.parse(msg) 
body = mail.body 
7

या यदि आप गहरे लाल रंग का 1.9.x पर हैं TMail समस्याओं
के लिए मैं लगता है 'मेल का उपयोग कर हूँ (https://github.com/mikel/mail)

body = imap.fetch(message_id,'BODY[TEXT]')[0].attr['BODY[TEXT]'] 
msg = imap.fetch(-1,'RFC822')[0].attr['RFC822'] 
mail = Mail.read_from_string msg 

body = mail.body 
from = mail.from 
23

@ Bjer के जवाब बंद पिगीबैकिंग, यहाँ एक पूर्ण समाधान OAuth2 को उपयोग जीमेल में लॉग इन करने mail मणि और gmail_xoauth मणि का उपयोग कर और सभी ईमेल को पार्स करता है:

imap = Net::IMAP.new('imap.gmail.com', 993, usessl = true, certs = nil, verify = false) 
imap.authenticate('XOAUTH2', '[email protected]', 'access_token_goes_here') 
imap.select('INBOX') 
imap.search(['ALL']).each do |message_id| 

    msg = imap.fetch(message_id,'RFC822')[0].attr['RFC822'] 
    mail = Mail.read_from_string msg 

    puts mail.subject 
    puts mail.text_part.body.to_s 
    puts mail.html_part.body.to_s 

end 
+0

क्या 'मेल 'मणि के पास' xoauth' के लिए कोई निर्भरता है क्योंकि जब मैं आपके कोड का पालन करता हूं, तो यह त्रुटि 'अज्ञात लेख प्रकार -" XOAUTH2 "को फेंकता है। मैं आपके कोड – Jashwant

+1

आह से पहले 'आवश्यकता' नेट/आईमैप 'और' मेल की आवश्यकता 'कर रहा हूं, हां, इसके बारे में खेद है। Google के XOAUTH2 का उपयोग करने के लिए आपको ['gmail_xoauth'] (https://github.com/nfo/gmail_xoauth) gem – Andrew

+0

की आवश्यकता होगी ओह, मैं पहले से ही उस प्लगइन का उपयोग कर रहा हूं लेकिन आपकी पोस्ट देखने के बाद, मैंने सोचा कि यह शानदार प्लगइन XOAUTH2 प्रमाणीकरण भी करते हैं, इसलिए इसे हटा दिया गया। मैं अब दोनों का उपयोग कर रहा हूँ। प्रमाणीकरण के लिए 'gmail_xoauth' और बेहतर तरीके से मेल प्रबंधित करने के लिए 'मेल'। यह ठीक काम कर रहा है! – Jashwant

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

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