2010-02-12 31 views
7

Tôi có một kịch bản python có để lấy các thông điệp vô hình, xử lý nó, và đánh dấu như đã thấy (hoặc đọc)Python, IMAP và GMail. Đánh dấu tin nhắn như SEEN

Tôi làm điều này sau khi đăng nhập vào:

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

Vấn đề đầu tiên đó là, tìm kiếm trả về TẤT CẢ các tin nhắn, và không chỉ là UNSEEN. Vấn đề thứ hai là thư không được đánh dấu là SEEN.

Ai có thể cho tôi một bàn tay với điều này không?

Cảm ơn!

Trả lời

3

Tôi nghĩ rằng tên cờ cần phải bắt đầu với một dấu chéo ngược, ví dụ: \ SEEN

12
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

Tôi không quá quen thuộc với imaplib nhưng tôi thực hiện điều này tốt với các mô-đun 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. 

Giả sử tôi muốn xem qua các email chưa đọc, trả lời người gửi và đánh dấu email là đã đọc. Tôi muốn gọi hàm smtp từ đây để soạn và gửi trả lời.

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

Tôi hy vọng điều này sẽ giúp

Các vấn đề liên quan