我想從IMAP郵箱中讀取郵件,并在每次有新郵件進入時提取 "發件人"、"主題 "和 "正文"(這是HTML),它應該使未讀郵件變為已讀,并最終將郵件放入一個字典中。我做了整個事情,除了將未讀郵件改為已讀的部分。這在我使用的'imbox'模塊中似乎是不可能的。我避免使用imaplib,因為它看起來相當低級/復雜,我認為應該用更簡單的方法來完成,當然,如果沒有其他方法,必須使用imaplib。
這里是代碼:
from imbox import Imbox
import html2text
with Imbox('<IMAP SERVER>',
username='<USER>',
password='<PASS>',
ssl=True。
ssl_context=None。
starttls=False) as imbox:
unread_inbox_messages = imbox.messages(unread=True)
for uid, message in unread_inbox_messages:
mail_from = message.send_from[0] ['email']
mail_subject = message.subject
h = html2text.HTML2Text()
h.ignore_links = True]
output = (h.handle(f''{message.body['plain']}'') 。 replace("
", " ")
output = output.replace("
", "")
mail_body = output[2: -2]
mail_dict = {
'email': {
'From': mail_from,
'Subject': mail_subject,
'Body': mail_body
}
}
print(mail_dict)
它回傳的行是這樣的:
{'email': {'From': '[email protected]', '主題': 'subject', 'body': 'body message'}}。
但是郵件在郵箱中仍然是未讀的,所以每次都是取相同的未讀郵件。 我的代碼是否可以被修改,以便將郵件從未讀變為已讀,也許需要一些額外的模塊?
uj5u.com熱心網友回復:
根據檔案,你可以使用函式mark_seen與uid將郵件標記為已讀。
我還在下面添加了示例代碼。
from imbox import Imbox
with Imbox('imap.gmail.com', username='用戶名', password='密碼',
ssl=True, ssl_context=None, starttls=False) as imbox:
# 從收件箱獲取所有郵件。
all_inbox_messages = imbox.messages()
for uid, message in all_inbox_messages:
# 標記該訊息為已讀。
imbox.mark_seen(uid)
uj5u.com熱心網友回復:
試試lib。https://github.com/ikvk/imap_tools
from imap_tools import MailBox
with MailBox('imap.mail.com').login('[email protected]', 'pwd') as mailbox:
for msg in mailbox.fetch(): # 所有默認情況下,mark_seen=True 默認情況下。
from_ = msg.from_
主題 = msg.subject
body = msg.text or msg.html
uids_for_move = []
if 'cat' in body:
uids_for_move.append(msg.uid)
mailbox.move(uids_for_move, 'INBOX/cat')
另外,如果mark_seen=False,你可以使用mailbox.flag來設定MailMessageFlags.SEEN標志
。感謝,lib作者。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/313434.html
標籤:
