Exchangelib Python以HTML格式提取电子邮件,但我想要纯文本

时间:2017-10-13 18:42:59

标签: python email beautifulsoup exchangelib

我不熟悉Python中的电子邮件,除了使用ArcGIS的东西。但是,我被分配了一项任务,即继续查看带有特定主题的传入电子邮件的电子邮件地址,并从该电子邮件中提取一些内容。我想我可以很容易地做到这一点。但是,我正在使用Exchangelib for Python,当我拉电子邮件并生成文本时,我会得到一大堆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 DOMAIN\User.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 Output

1 个答案:

答案 0 :(得分:0)

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

如果没有,作者只是向您发送了一封HTML电子邮件,您必须处理该问题并提取所需信息。 BeautifulSoup是完美的。只需解析邮件正文并开始解压缩:

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