我有一张客户表、他们的电子邮件和他们被分配到的代表:
| 客户|电子邮件|重复|
| - ------|- ------|- ------|
| 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)
1条答案
按热度按时间cetgtptt1#
若要处理传入的电子邮件,您需要处理
Application
类的NewMailEx
事件。Microsoft Outlook处理的每个接收项目都会触发一次此事件。项目可以是几种不同项目类型之一,例如MailItem
、MeetingItem
、或SharingItem
。EntryIDsCollection
字符串包含与该项对应的条目ID。使用EntryIDCollection
字符串中返回的条目ID调用NameSpace.GetItemFromID方法并处理该项。请谨慎使用此方法,以尽量减少对Outlook性能的影响。您还可以考虑处理
Items
类(在文件夹上)的ItemAdd
事件,该事件在向文件夹添加项目时触发。您可以在以下系列文章中阅读更多关于可能的解决方案及其优缺点的信息:
或者,发送出去的电子邮件将始终在正文中包含客户端编号,我也可以循环使用它。
在这种情况下,您需要处理
ItemSend
事件,在该事件中可以设置MailItem.SaveSentMessageFolder属性以将已发送邮件放入指定的文件夹。例如,下面的VBA宏显示如何在代码中使用该属性(Outlook对象模型对于所有编程语言都是通用的):