2012-12-25 16 views
8

I read this already और इस स्क्रिप्ट को कुछ मेल बॉक्स में ईमेल के लिए लाने के लिए लिखा है, जिसका शीर्षक '$' से शुरू होता है और कुछ प्रेषक द्वारा भेजा जाता है।पायथन imaplib fetch body email gmail

import email, getpass, imaplib, os 

detach_dir = "F:\PYTHONPROJECTS" # where you will save attachments 
user = raw_input("Enter your GMail username --> ") 
pwd = getpass.getpass("Enter your password --> ") 

# connect to the gmail imap server 
m = imaplib.IMAP4_SSL("imap.gmail.com") 
m.login(user, pwd) 

m.select("PETROLEUM") # here you a can choose a mail box like INBOX instead 
# use m.list() to get all the mailboxes 

resp, items = m.search(None, '(FROM "[email protected]")') 
items = items[0].split() # getting the mails id 

my_msg = [] # store relevant msgs here in please 
msg_cnt = 0 
break_ = False 
for emailid in items[::-1]: 
    resp, data = m.fetch(emailid, "(RFC822)") 
    if (break_): 
     break 
    for response_part in data: 
     if isinstance(response_part, tuple): 
      msg = email.message_from_string(response_part[1]) 
      varSubject = msg['subject'] 
      if varSubject[0] == '$': 
       msg_cnt += 1 
       my_msg.append(msg) 
       print msg_cnt 
       print email.message_from_string(response_part[1]) 
       if (msg_cnt == 5): 
        break_ = True 

अगर मैं email.message_from_string(response_part[1]) प्रिंट, मैं देख सकता यह (, से करने के लिए, तारीख ..., हेडर) पहले में जानकारी शामिल है, पूरा टेक्स्ट शरीर। लेकिन, मैं शरीर को खुद नहीं ला सकता हूं। email.message_from_string(response_part[0]) मेल आईडीएस प्रिंट करता है, और email.message_from_string(response_part[2]) सीमा से बाहर है। email.message_from_string(response_part[1][0]) न तो यह कर रहा है।

धन्यवाद और सम्मान करता है।

अद्यतन

अब, मेरे पास लगभग शरीर का पाठ हो सकता है। हालांकि, यह अभी भी आने वाले सूचना वक्तव्य से खराब हो गया है। मैं एक परिणाम

From nobody Tue Dec 25 11:42:58 2012 

US=3D$4.030 

EastCst=3D$4.036 

NewEng=3D$4.205 

CenAtl=3D$4.149 

LwrAtl=3D$3.921 

Midwst=3D$3.984 

GulfCst=3D$3.945 

RkyMt=3D$4.195 

WCst=3D$4.187 

CA=3D$4.268 

के रूप में मिलता है और मैं From nobody Tue Dec 25 11:42:58 2012 जो जानकारी है से छुटकारा पाने के लिए करना चाहते हैं। मुझे पता है कि मैं पहली प्रासंगिक रेखा के लिए टेक्स्ट लुक पार्स कर सकता हूं ... मुझे पता है।

तो प्राप्त करने (मेरी पहली नमूने में प्लग करने के लिए) के लिए कोड है

if varSubject[0] == '$': 
     r, d = m.fetch(emailid, "(UID BODY[TEXT])") 
     msg_cnt += 1 
     my_msg.append(msg) 
     print email.message_from_string(d[0][1]) 

आप एक बेहतर तरीका (कोई जानकारी स्ट्रिंग) है ??? अधिक: अब तारीख लाने के लिए क्या आदेश है? मुझे पता है कि मैं varDate = msg['date'] कर सकता हूं जहां ऊपर उपयुक्त है, लेकिन दिन-दर-साल कैसे प्राप्त करें? धन्यवाद

उत्तर

4

मैं इस जीमेल का प्रयोग काम करने के लिए प्राप्त करने के लिए प्रबंधित किया है विधि द्वारा कर शरीर की सामग्री को प्राप्त कर सकते हैं यह उपयोगी बिट्स और आउटपुट अर्क उन्हें पाठ फ़ाइलों के लिए:

import datetime 
import email 
import imaplib 
import mailbox 


EMAIL_ACCOUNT = "[email protected]" 
PASSWORD = "your password" 

mail = imaplib.IMAP4_SSL('imap.gmail.com') 
mail.login(EMAIL_ACCOUNT, PASSWORD) 
mail.list() 
mail.select('inbox') 
result, data = mail.uid('search', None, "UNSEEN") # (ALL/UNSEEN) 
i = len(data[0].split()) 

for x in range(i): 
    latest_email_uid = data[0].split()[x] 
    result, email_data = mail.uid('fetch', latest_email_uid, '(RFC822)') 
    # result, email_data = conn.store(num,'-FLAGS','\\Seen') 
    # this might work to set flag to seen, if it doesn't already 
    raw_email = email_data[0][1] 
    raw_email_string = raw_email.decode('utf-8') 
    email_message = email.message_from_string(raw_email_string) 

    # Header Details 
    date_tuple = email.utils.parsedate_tz(email_message['Date']) 
    if date_tuple: 
     local_date = datetime.datetime.fromtimestamp(email.utils.mktime_tz(date_tuple)) 
     local_message_date = "%s" %(str(local_date.strftime("%a, %d %b %Y %H:%M:%S"))) 
    email_from = str(email.header.make_header(email.header.decode_header(email_message['From']))) 
    email_to = str(email.header.make_header(email.header.decode_header(email_message['To']))) 
    subject = str(email.header.make_header(email.header.decode_header(email_message['Subject']))) 

    # Body details 
    for part in email_message.walk(): 
     if part.get_content_type() == "text/plain": 
      body = part.get_payload(decode=True) 
      file_name = "email_" + str(x) + ".txt" 
      output_file = open(file_name, 'w') 
      output_file.write("From: %s\nTo: %s\nDate: %s\nSubject: %s\n\nBody: \n\n%s" %(email_from, email_to,local_message_date, subject, body.decode('utf-8'))) 
      output_file.close() 
     else: 
      continue 
संबंधित मुद्दे