按标题在 Outlook 中查找特定邮件



我正在尝试创建一个代码,该代码将使用主题字段在我的邮箱中查找信件(例如,根据Outlook规则,这些信件将位于文件夹" TODO"中(。 这就是我现在所拥有的:

import win32com.client
outlook = win32com.client.Dispatch("Outlook.Application").GetNamespace("MAPI")
inbox = outlook.GetDefaultFolder(6).Folders.Item("TODO")
messages = inbox.Items
message = messages.GetLast()
body_content = message.subject
print(body_content)

此代码查找文件夹中的最后一个字母。

提前谢谢你。

下面的代码将在TODO文件夹的所有邮件中搜索,如果主题与要搜索的字符串匹配,它将打印找到的消息

import win32com.client
outlook = win32com.client.Dispatch("Outlook.Application").GetNamespace("MAPI")
inbox = outlook.GetDefaultFolder(6).Folders.Item("TODO")
messages = inbox.Items
for message in messages:
if message.subject == 'String To be Searched':
print("Found message")

您需要使用Items类的 Find/FindNext 或 Limit 方法。例如,若要获取主题行Hello world项,可以使用以下代码:

private void FindAllUnreadEmails(Outlook.MAPIFolder folder)
{
string searchCriteria = "[Subject] = `Hello world`";
StringBuilder strBuilder = null;
int counter = default(int);
Outlook._MailItem mail = null;
Outlook.Items folderItems = null;
object resultItem = null;
try
{
if (folder.UnReadItemCount > 0)
{
strBuilder = new StringBuilder();
folderItems = folder.Items;
resultItem = folderItems.Find(searchCriteria);
while (resultItem != null)
{
if (resultItem is Outlook._MailItem)
{
counter++;
mail = resultItem as Outlook._MailItem;
strBuilder.AppendLine("#" + counter.ToString() + 
"tSubject: " + mail.Subject);
}
Marshal.ReleaseComObject(resultItem);
resultItem = folderItems.FindNext();
}
if (strBuilder != null)
Debug.WriteLine(strBuilder.ToString());
}
else
Debug.WriteLine("There is no match in the " 
+ folder.Name + " folder.");
}
catch (Exception ex)
{
System.Windows.Forms.MessageBox.Show(ex.Message);
}
finally
{
if (folderItems != null) Marshal.ReleaseComObject(folderItems);
}
}

在以下文章中阅读有关这些方法的详细信息:

  • 如何:使用"查找"和"查找下一个"方法从文件夹中检索 Outlook 邮件项目(C#、VB.NET(
  • 如何:使用限制方法从文件夹中检索 Outlook 邮件项目

此外,您可能会发现应用程序类的高级搜索方法很有帮助。在 Outlook 中使用AdvancedSearch方法的主要好处是:

  • 搜索在另一个线程中执行。您无需手动运行另一个线程,因为 AdvancedSearch 方法会在后台自动运行它。
  • 可以在任何位置搜索任何项目类型:邮件,约会,日历,便笺等,即超出某个文件夹的范围。Limit 和 Find/FindNext 方法可以应用于特定的 Items 集合 (请参阅 Outlook 中 Folder 类的 Items 属性(。
  • 完全支持 DASL 查询(自定义属性也可用于搜索(。您可以在 MSDN 中的筛选文章中阅读有关此内容的详细信息。为了提高搜索性能,如果为存储启用了即时搜索,则可以使用即时搜索关键字(请参阅 Store 类的 IsInstantSearchEnabled 属性(。
  • 可以随时使用 Search 类的 Stop 方法停止搜索过程。

在 Outlook 中的高级搜索中以编程方式阅读有关此方法的详细信息:C#,VB.NET 文章。

相关内容

  • 没有找到相关文章

最新更新