我正在尝试编写一个python代码,可以帮助我根据主题和发件人的电子邮件地址过滤最新的电子邮件,然后将其正文保存在txt文件中,并在当前目录中提取其附件。
这是我已经开始写的代码片段,它根据主题提取电子邮件,只提取附件,但谁能帮助我通过发件人电子邮件id过滤它,并将正文保存在一个txt文件中?
import win32com.client
#other libraries to be used in this script
import os
get_path = os.getcwd()
from datetime import datetime, timedelta
#Open Outlook Application
outlook = win32com.client.Dispatch('outlook.application')
mapi = outlook.GetNamespace("MAPI")
inbox = mapi.GetDefaultFolder(6)
messages = inbox.Items
message2 = messages.GetLast()
subject = message2.Subject
print(subject)
body = message2.body
sender = message2.Sender
print(sender)
attachments = message2.Attachments
for m in messages:
#print(m)
if m.Subject == "Test Mail":
for x in message2.Attachments:
x.SaveASFile(os.path.join(get_path,x.FileName))
print("successfully downloaded attachments")
可以帮助我根据主题和发件人的电子邮件地址过滤最新的电子邮件
您需要使用Items类的Find
/FindNext
或Restrict
方法来根据您的搜索条件过滤项目。它们只允许处理与您的条件相对应的项目。在我为技术博客写的文章中阅读更多关于它们的内容:
- 如何:使用Find和FindNext方法从文件夹中检索Outlook邮件项目(c#, VB.NET)
- 如何:使用Restrict方法从文件夹 中检索Outlook邮件项目
要搜索具有特定主题行或关键字的项目,您可以考虑使用以下搜索条件(VBA语法):
criteria = "@SQL=" & Chr(34) & "urn:schemas:httpmail:subject" & Chr(34) & " ci_phrasematch 'question'"
或者更直接的解决方案是使用DASL语法:
criteria = "@SQL=" & Chr(34) & "urn:schemas:httpmail:subject" & Chr(34) & " ci_phrasematch 'question'"
DASL过滤器通过使用equal (=
)运算符执行字符串等价比较。字符串属性的值必须与比较字符串相等,但前缀"RE: "除外。and "FW: "
同样,您可以过滤发件人的电子邮件地址:
criteria = "@SQL=" & Chr(34) & "urn:schemas:httpmail:senderemail" & Chr(34) & " ci_phrasematch 'eugene@astafiev.com'"
注意,您可以使用本地操作符组合多个搜索条件:
criteria = "@SQL=" & Chr(34) & "urn:schemas:httpmail:subject" & Chr(34) & " ci_phrasematch 'question' AND " & Chr(34) & "urn:schemas:httpmail:senderemail" & Chr(34) & " ci_phrasematch 'eugene@astafiev.com'"
您也可以考虑使用OutlookApplication
类的AdvacedSearch
方法。在Outlook中使用AdvancedSearch
方法的主要好处是:
- 在另一个线程中执行搜索。你不需要手动运行另一个线程,因为
AdvancedSearch
方法会在后台自动运行它。 - 可以在任何位置搜索任何项目类型:邮件,约会,日历,笔记等,即超出某个文件夹的范围。
Restrict
和Find
/FindNext
方法可以应用于特定的Items
集合(参见Outlook中Folder
类的Items
属性)。 - 完全支持DASL查询(自定义属性也可以用于搜索)。为了提高搜索性能,如果商店启用了即时搜索,可以使用即时搜索关键字(参见
Store
类的IsInstantSearchEnabled
属性)。 - 可以使用
Search
类的Stop
方法随时停止搜索进程。