ExchangelibPython将电子邮件提取为HTML,但我想要纯文本



除了使用ArcGIS之外,我对用Python获取电子邮件很陌生。然而,我被分配了一项任务,要持续查看一封主题特殊的电子邮件的电子邮件地址,并从该电子邮件中提取一些内容。我想我可以很容易地做到。然而,我使用的是用于Python的Exchangelib,当我提取电子邮件并生成文本时,我会得到一大堆HTML代码。这是我从Python提取的所有电子邮件上的代码。有没有办法用像BeautifulSoup这样的东西来做这件事?如果是,怎么办?

from exchangelib import DELEGATE, Account, Credentials
from bs4 import BeautifulSoup
credentials = Credentials(
username='user.name@company.com', #Microsoft Office 365 requires you to use user.name@domain for username
password='MyS3cretP@$$w0rd'          #Others requires DOMAINUser.Name
)
account = Account(
primary_smtp_address='primary.email@company.com',
credentials=credentials,
autodiscover=True,
access_type=DELEGATE
)
# Print first <number selected> inbox messages in reverse order
for item in account.inbox.all().order_by('-datetime_received')[:1]:
print(item.subject, item.body)

我还附上了两张图片。一封是邮件的样子,另一封是python吐出来的东西。

同样,我想学习的是如何做到python吐出的内容是纯文本。

更新:这只是一封测试电子邮件,向您展示了使用Exchangelib生成的所有HTML。最终,电子邮件将看起来像这个

Outage Request Number:  1-001111
Outage Request Status:  Completed
Status Updated By:  Plant
Requested Equipment:     Hose
Planned Start:  Outage: 01/01/2000 01:00
Planned End:    Outage: 01/01/2000 02:00
Actual Start:   01/01/2000 01:00
Actual Completion:  01/01/2000 02:00
Duration:   Exactly 1.00 Hour(s)
Continuous
Outage Request Priority:    Forced
Request Updated:    01/01/2000 00:01

Python输出

exchangelib在某些Exchange服务器版本上支持text_body。这是服务器试图清理HTML并显示电子邮件的文本版本。你可能会发现它很有用。

如果没有,作者只是给你发了一封HTML电子邮件,你必须处理它并提取你需要的信息。BeautifulSoup非常适合。只需解析消息正文并开始提取:

item = my_account.inbox.get(subject='My special email')
soup = BeautifulSoup(item.body)
soup.find_all('p')

相关内容

最新更新