我收到一封带有多封邮件的电子邮件。每封邮件都有我想下载的。xls文件。
我如何在Python中做到这一点?
(我使用Outlook应用程序)
输入图片描述
我试着把这些邮件移到我的收件箱,并运行我已经使用的代码:
path = 'C:/Users/moliveira/Desktop/projeto_email'
os.chdir(path)
output_dir = Path.cwd()
output_dir.mkdir(parents=True, exist_ok=True)
outlook = win32com.client.Dispatch("Outlook.Application")
mapi=outlook.GetNamespace("MAPI")
inbox = mapi.GetDefaultFolder(6)
messages = inbox.Items
received_dt = datetime.now() - BDay(600)
date_aux = received_dt
date = received_dt.strftime('%d/%m/%Y')
Subject = 'OPÇÕES RV - '+date
received_dt = received_dt.strftime('%m/%d/%Y')
messages = messages.Restrict("[ReceivedTime] >= '" + received_dt + " 13:00 PM" + "'")
messages = messages.Restrict("[ReceivedTime] <= '" + received_dt + " 23:59 PM" + "'")
messages = messages.Restrict("[Subject] = "+Subject)
try:
for message in list(messages):
try:
s = message.sender
for attachment in message.Attachments:
attachment.SaveASFile(os.path.join(output_dir, attachment.FileName))
print(f"attachment {attachment.FileName} from {s} saved")
except Exception as e:
print("error when saving the attachment:" + str(e))
except Exception as e:
print("error when processing emails messages:" + str(e))
date = date_aux.strftime('%d_%m_%Y')
list(messages)
但是list(messages)的返回是空的,这意味着它没有定位电子邮件。我想这是因为我必须"点击"才能在Microsoft exchange上查看更多内容。就在这之后,我可以在应用程序中看到这些邮件。输入图片描述
您可以将附加的项目保存到磁盘上,然后以编程方式执行它以在Outlook中打开(这是一个单例,这意味着只有一个Outlook实例可以同时运行)。
另外,如果附加的邮件保存到磁盘上,您可以使用命名空间。方法,从指定的路径或URL打开共享项目。该方法用于打开iCalendar约会(.ics)文件、vCard (.vcf)文件和Outlook消息(.msg)文件。因此,您将获得MailItem
类的一个实例,它表示附加的Outlook项目。
要区分Outlook项目和附加到邮件的常规文件,请使用附件。当附件是Outlook邮件格式文件(.msg)并且是原始邮件的副本时,类型属性等于olEmbeddeditem
值。
如果您想打开它们而不保存在磁盘上,请参见如何直接打开Outlook文件附件而不保存它?(使用c# VSTO)。简而言之,您可以尝试从Outlook维护的缓存文件夹中读取附加文件。有关详细信息,请参见查找电子邮件附件的Outlook临时文件夹。此外,您可以使用低级API(扩展MAPI),在其中您可以访问PR_ATTACH_DATA_BIN属性,在打开附件文章中阅读更多关于该算法的信息。