【问题标题】:Python Outlook Emails identification and reading links using IMAP使用 IMAP 的 Python Outlook 电子邮件识别和阅读链接
【发布时间】:2019-07-27 09:46:49
【问题描述】:

我正在尝试编写一个登录 Outlook 电子邮件帐户的 python3 代码,然后搜索具有某些特定过滤器(FROM、SUBJECT、DATE)的电子邮件以获取它,然后对其进行解析,然后从其正文中取出一个特定链接,使用 IMAP 和 BeautifulSoup。

我能够做到: 1- 登录我的电子邮件帐户,然后使用 IMAP 登录我的收件箱。 2-获取电子邮件然后解析它们。 3- 在不同的 .txt 文件中找到链接

我无法做到的是: 使用 IMAP 搜索特定的电子邮件。

我想知道是否有人可以通过显示正确的语法来帮助我在 Outlook 上搜索某些电子邮件。

提前谢谢你。

import imaplib
import email
from email.utils import parseaddr

username = 'hae42@mail.aub.edu'
password = 'Null'
Mymail = imaplib.IMAP4_SSL('outlook.office365.com')#imap- 
mail.outlook.com or outlook.office365.com
Mymail.login(username, password)
#Mymail.list() #OUT: list of "folders"
Mymail.select("INBOX") #connect to inbox

def get_body(msg):
    if msg.is_multipart():
        return get_body(msg.get_payload(0))
    else:
        return msg.get_payload(None,True)

def search(key, value, Mymail):
    result, data = Mymail.search(None, key, '"()"'.format(value))
    return data

result, data = Mymail.fetch(latest_email_id, '(RFC822)')
raw_email = email.message_from_bytes(data[0][1])

 print(search('FROM', 'email@outlook.example'))

【问题讨论】:

  • 您阅读过 RFC 3501 的搜索规范吗? imaplib 没有提供任何花哨的功能,您只需将原始搜索字符串提供给库。
  • 我认为如果我提供更多解释会更好,我只是添加了读取 Outlook 电子邮件的代码的 sn-p。在 GMAIL 示例中,相同的搜索功能用于指定您要获取然后解析的电子邮件,并识别发件人“FROM”、“EXAMPLE@GMAIL.COM”。并且返回 [b '1 2 3'] 例如,在您的收件箱中的前 3 封电子邮件来自该发件人。我的问题是,我不知道如何为 Outlook 电子邮件实现此功能,它返回 b ' ' 因为没有来自我指定的发件人的电子邮件,尽管我确定有(我检查过)。

标签: python beautifulsoup imap imaplib


【解决方案1】:

我已经能够使用IMAPClientmailparser 阅读来自 Outlook 和 Gmail(以及其他)的电子邮件:

from imapclient import IMAPClient
import mailparser

with IMAPClient(self.host) as server:
    server.login(self.username, self.password)
    server.select_folder('INBOX')
    messages = server.search(['UNSEEN', ])  # in your case: ['FROM', 'email@outlook.example']

    # for each unseen email in the inbox
    for uid, message_data in server.fetch(messages, 'RFC822').items():
        email_message = mailparser.parse_from_string(message_data[b'RFC822'])

然后,您可以按照邮件解析器文档(上面的链接)中的说明访问电子邮件的元素。例如:

# parse html from email
soup = BeautifulSoup(email_message.body, "html.parser")
msg_body = soup.get_text()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-27
    • 2011-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-24
    • 2022-06-13
    相关资源
    最近更新 更多