Python, IMAP and GMail. Mark messages as SEEN

前端 未结 3 1417
北荒
北荒 2020-12-13 16:36

I have a python script that has to fetch unseen messages, process it, and mark as seen (or read)

I do this after login in:

    typ, data = self.serve         


        
相关标签:
3条回答
  • 2020-12-13 16:58
    import imaplib
    obj = imaplib.IMAP4_SSL('imap.gmail.com', '993')
    obj.login('user', 'password')
    obj.select('Inbox')   <--- it will select inbox
    typ ,data = obj.search(None,'UnSeen')
    obj.store(data[0].replace(' ',','),'+FLAGS','\Seen')
    
    0 讨论(0)
  • 2020-12-13 17:17

    I think the flag names need to start with a backslash, eg: \SEEN

    0 讨论(0)
  • 2020-12-13 17:20

    I am not so familiar with the imaplib but I implement this well with the imapclient module

    import imapclient,pyzmail,html2text
    from backports import ssl
    context=ssl.SSLContext(ssl.PROTOCOL_TLSv1_2)
    
    iobj=imapclient.IMAPClient('outlook.office365.com', ssl=True, ssl_context=context)
    iobj.login(uname,pwd)# provide your username and password
    iobj.select_folder('INBOX',readonly=True)# Selecting Inbox.
    
    unread=iobj.search('UNSEEN')# Selecting Unread messages, you can add more search criteria here to suit your purpose.'FROM', 'SINCE' etc.
    print('There are: ',len(unread),' UNREAD emails')
    
    for i in unread:
    
        mail=iobj.fetch(i,['BODY[]'])#I'm fetching the body of the email here.
        mcontent=pyzmail.PyzMessage.factory(mail[i][b'BODY[]'])#This returns the email content in HTML format
        subject=mcontent.get_subject()# You might not need this             
        receiver_name,receiver_email=mcontent.get_address('from')
        mail_body=html2text.html2text(mcontent.html_part.get_payload().decode(mcontent.html_part.charset))# This returns the email content as text that you can easily relate with.
    

    Let's say I want to just go through the unread emails, reply the sender and mark the email as read. I'd call the smtp function from here to compose and send a reply.

    import smtplib
    smtpobj=smtplib.SMTP('smtp.office365.com',587)
    smtpobj.starttls()
    smtpobj.login(uname,pwd)# Your username and password goes here.
    sub='Subject: '+str(subject)+'\n\n'# Subject of your reply
    msg='Thanks for your email! You're qualified for the next round' #Some random reply :(
    fullmsg=sub+new_result
    smtpobj.sendmail(uname,test,fullmsg)# This sends the email. 
    iobj.set_flags(i,['\\Seen','\\Answered'])# This marks the email as read and adds the answered flag
    iobj.append('Sent Items', fullmsg)# This puts a copy of your reply in your Sent Items.
    
    iobj.logout()
    smtpobj.logout()
    

    I hope this helps

    0 讨论(0)
提交回复
热议问题