如何阅读HTML Python



我想从IMAP邮箱中读取电子邮件,并从", "主题"one_answers";Body"(也就是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.sent_from[0]['email']
mail_subject =  message.subject
h = html2text.HTML2Text()
h.ignore_links = True
output = (h.handle(f'''{message.body['plain']}''').replace("\r\n", ""))
output = output.replace("n", "")
mail_body = output[2:-2]
mail_dict = {
'email': {
'From': mail_from,
'Subject': mail_subject,
'Body': mail_body
}
}
print(mail_dict)

返回一行如下:

{'email': {'From': 'emailaddress@email.com', 'Subject': 'subject', 'Body': 'body message'}} 

但是email在邮箱中保持未读状态,所以每次都取相同的未读邮件。我的代码可以修改,使电子邮件从未读改为读,与一些额外的模块可能?

根据文档,您可以使用mark_seenuid函数将电子邮件标记为已读。

我还在下面添加了示例代码。

from imbox import Imbox
with Imbox('imap.gmail.com', username='username', password='password',
ssl=True, ssl_context=None, starttls=False) as imbox:
# fetch all messages from inbox
all_inbox_messages = imbox.messages()

for uid, message in all_inbox_messages:

# mark the message as read
imbox.mark_seen(uid)

Try lib: https://github.com/ikvk/imap_tools

from imap_tools import MailBox
with MailBox('imap.mail.com').login('test@mail.com', 'pwd') as mailbox:
for msg in mailbox.fetch():  # all by default, mark_seen=True by default
from_ = msg.from_
subject = msg.subject
body = msg.html or msg.text
uids_for_move = []
if 'cat' in body:
uids_for_move.append(msg.uid)
mailbox.move(uids_for_move, 'INBOX/cats')

另外,如果mark_seen=False,您可以使用mailbox。设置MailMessageFlags的标志。看到国旗

敬礼,lib作者。

最新更新