Python, IMAP и GMail. Пометить сообщения как Увиденные - PullRequest
7 голосов
/ 12 февраля 2010

У меня есть скрипт на python, который должен извлекать невидимые сообщения, обрабатывать его и помечать как видимые (или прочитанные)

Я делаю это после входа в систему:

    typ, data = self.server.imap_server.search(None, '(UNSEEN)')

    for num in data[0].split():
        print "Mensage " + str(num) + " mark"
        self.server.imap_server.store(num, '+FLAGS', '(SEEN)')

Первая проблема заключается в том, что поиск возвращает ВСЕ сообщения, а не только НЕИЗВЕСТНЫЕ. Вторая проблема заключается в том, что сообщения не помечены как SEEN.

Кто-нибудь может мне помочь с этим?

Спасибо!

Ответы [ 3 ]

13 голосов
/ 29 июня 2010
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')
3 голосов
/ 13 февраля 2010

Я думаю, что имена флагов должны начинаться с обратной косой черты, например: \ SEEN

0 голосов
/ 25 октября 2017

Я не очень знаком с imaplib, но я реализую это хорошо с модулем imapclient

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.

Допустим, я хочу просто просмотреть непрочитанные письма, ответить отправителю и пометить письмо как прочитанное. Отсюда я бы вызвал функцию smtp, чтобы составить и отправить ответ.

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()

Надеюсь, это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...