Python -基于文件夹名称将Outlook邮件从收件箱移动到文件夹

fnvucqvd  于 2023-01-04  发布在  Python
关注(0)|答案(1)|浏览(243)

我有一张客户表、他们的电子邮件和他们被分配到的代表:
| 客户|电子邮件|重复|
| - ------|- ------|- ------|
| 1234| bob@bobsco.com|约翰|
| 小行星5678| jim@jimsco.com|简|
我从这些客户那里收到的电子邮件会进入一个收件箱,里面有每个代表姓名的子文件夹。
我收到数百封这样的电子邮件,并希望他们自动排序。
如何编写一个循环,根据发送邮件的电子邮件地址将这些邮件分配到正确的代表文件夹?或者,发送的电子邮件将始终在正文中包含客户编号,我也可以循环使用该编号。

import win32com.client as client

# create outlook instance
outlook = client.Dispatch('Outlook.Application')

# get the namespace object
namespace = outlook.GetNameSpace("MAPI")

inbox = namespace.GetDefaultFolder(6)
cetgtptt

cetgtptt1#

若要处理传入的电子邮件,您需要处理Application类的NewMailEx事件。Microsoft Outlook处理的每个接收项目都会触发一次此事件。项目可以是几种不同项目类型之一,例如MailItemMeetingItem、或SharingItemEntryIDsCollection字符串包含与该项对应的条目ID。使用EntryIDCollection字符串中返回的条目ID调用NameSpace.GetItemFromID方法并处理该项。请谨慎使用此方法,以尽量减少对Outlook性能的影响。
您还可以考虑处理Items类(在文件夹上)的ItemAdd事件,该事件在向文件夹添加项目时触发。
您可以在以下系列文章中阅读更多关于可能的解决方案及其优缺点的信息:

或者,发送出去的电子邮件将始终在正文中包含客户端编号,我也可以循环使用它。
在这种情况下,您需要处理ItemSend事件,在该事件中可以设置MailItem.SaveSentMessageFolder属性以将已发送邮件放入指定的文件夹。例如,下面的VBA宏显示如何在代码中使用该属性(Outlook对象模型对于所有编程语言都是通用的):

Sub SetSentFolder() 
 Dim myItem As Outlook.MailItem 
 Dim myResponse As Outlook.MailItem  
 Dim mpfInbox As Outlook.Folder  
 Dim mpf As Outlook.Folder 
 
 Set mpfInbox = Application.Session.GetDefaultFolder(olFolderInbox)  
 Set mpf = mpfInbox.Folders.Add("SaveToMySentItemsFolder")  
 Set myItem = Application.ActiveInspector.CurrentItem  
 Set myResponse = myItem.Reply  
 myResponse.Display  
 myResponse.To = "Eugene"  
 Set myResponse.SaveSentMessageFolder = mpf  
 myResponse.Send  
End Sub

相关问题