所以我试图用Python编写的脚本会搜索某些主题,例如;城市状态更新";以及";城市问题";在我的收件箱中,搜索城市名称等变量。如果电子邮件中有城市名称,那么它会将整行文本拉到句点(.(,并将其加载到.txt文件中。例如";底特律:蛋糕15个,馅饼12个,饮料19个;不要拉其他东西。下面是两个电子邮件格式的例子,以及我目前所掌握的内容。
主题:城市状态更新
底特律:蛋糕15个,馅饼12个,饮料19个。纽约:蛋糕9个,馅饼14个,饮料2个。
主题:城市发行
底特律:2件遗失物品,2件无人认领,6件已送达。芝加哥:5件遗失物品,1件无人认领,9件已送达
纽约:7件遗失物品,3件无人认领,16件已送达。
import win32com.client
import os, re, html
outlook = win32com.client.Dispatch("OutlookApplication").GetNamespace("MAPI")
inbox = outlook.GetDefaultFolder(6)
messages.Sort("[ReceivedTime]", True)
messages = inbox.items
message = messages.GetFirst()
subject = message.Subject
city = input("What city/cities are you looking for?")
for message in messages:
if message.Subject ["City status update, City issues"]
name =str(message.subject)
regex = re.search(r"city", msg.HTMLbody)
body = regex.group()
OlSaveAsType = {
"olTXT": 0,
"olRTF": 1,
"olTemplate": 2,
"olMSG": 3,
"olDoc": 4,
"olHTML": 5,
"olVCard": 6,
"olVCal": 7,
"olICal": 8
}
message.SaveAs(os.getcwd()+'//'+name, OlSaveAsType(['olTXT])
results = body
r = re.compile('.*/.*/.*:.*')
if results, True
print(results - ["."])
else()
这就是我到目前为止所遇到的,还有一堆错误。
首先,不需要迭代文件夹中的所有项目。
for message in messages:
if message.Subject ["City status update, City issues"]
name =str(message.subject)
regex = re.search(r"city", msg.HTMLbody)
body = regex.group()
相反,Outlook对象模型提供了Items
类的Find
/FindNext
或Restrict方法。在以下文章中阅读更多关于它们的信息:
- 如何:使用Find和FindNext方法从文件夹中检索Outlook邮件项目(C#、VB.NET(
- 如何:使用Restrict方法从文件夹中检索Outlook邮件项目
要处理消息正文,我建议使用Word对象模型。Inspector
类的WordEditor
属性返回正在显示的消息的Microsoft Word文档对象模型。
Outlook对象模型支持自定义邮件正文的三种主要方式:
- Body属性返回或设置一个字符串,表示Outlook项目的明文正文
- MailItem类的HTMLBody属性返回或设置表示指定项的HTML正文的字符串。设置
HTMLBody
属性将始终立即更新Body属性 - Word对象模型可用于处理消息体。有关详细信息,请参阅第17章:使用项目机构