基于电子邮件和主题过滤邮件的Python代码



我正在尝试编写一个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/FindNextRestrict方法来根据您的搜索条件过滤项目。它们只允许处理与您的条件相对应的项目。在我为技术博客写的文章中阅读更多关于它们的内容:

  • 如何:使用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方法会在后台自动运行它。
  • 可以在任何位置搜索任何项目类型:邮件,约会,日历,笔记等,即超出某个文件夹的范围。RestrictFind/FindNext方法可以应用于特定的Items集合(参见Outlook中Folder类的Items属性)。
  • 完全支持DASL查询(自定义属性也可以用于搜索)。为了提高搜索性能,如果商店启用了即时搜索,可以使用即时搜索关键字(参见Store类的IsInstantSearchEnabled属性)。
  • 可以使用Search类的Stop方法随时停止搜索进程。

最新更新