我正在尝试编写一个Python3代码,该代码登录一个Outlook Email帐户,然后使用某些特定的过滤器(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'))
答案 0 :(得分:0)
我已经能够使用IMAPClient和mailparser从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()