我是python的完整入门者。我想用python编写代码,从Outlook的特定电子邮件(包含3或4个excel文件)中下载特定文件,并将其存储在我的目录(特定路径)中。我得到了一个代码,并试图根据需要对其进行修改,但出现了“ AttributeError:.Senton”错误。非常感谢您的帮助或任何帮助。
我尝试使用win32com.client模块,因为它来自Outlook应用程序,并保存了今天的所有文件。这是我的代码
# -*- coding: latin-1 -*-
import win32com.client
import os
import datetime
today = datetime.date.today()
path = os.path("D:\my_path")
outlook = win32com.client.Dispatch("Outlook.Application").GetNamespace("MAPI") #Opens Microsoft Outlook
inbox = outlook.GetDefaultFolder(6) #N4 Invocie folder
messages = inbox.Items #Get first email
def saveattachemnts(subject = "Title Maíl - *"):
for message in messages:
if message.Subject == subject and message.Unread or message.Senton.date() == today:
attachments = message.Attachments
attachment = attachments.Item(1)
for attachment in message.Attachments:
attachment.SaveAsFile(os.path.join(path, str(attachment)))
if message.Subject == subject and message.Unread:
message.Unread = False
break
saveattachemnts()
os.system("this_python.py")
我希望此代码每天运行,并且必须从称为“ Title Mail-20190819”的特定邮件中下载文件,并且最后日期每天都会更改,因此我使用了诸如“ TitleMaíl-*”(带有重音)的通配符查找严格的电子邮件,然后在该电子邮件中必须按名称下载特定的excel文件(例如,名称必须为“ AB-Consolidado 20190819”)并将其存储在计算机的目录中,完成后我好奇是否有可能最后例如运行另一个名为“ this_python.py”的python,该程序会拆分excel并将其文件保存在csv中。 (这已经完成了)但是现在我得到了这个“ AttributeError:.Senton “错误,我找不到太多有关此问题的文档。
答案 0 :(得分:0)
首先,您假设文件夹中只有MailItem
个对象。您还可以使用ReportItem
,MeetingItem
等不公开SentOn
属性的对象。您需要首先检查Class
属性(由所有OOM对象公开)== 43(这是olMail)-使用OutlookSpy(单击“项目”按钮)查看OOM对象。
第二,在检查`SentOn属性时,您正在使用==
运算符。该比较永远不会得出true-COM中的所有日期/时间属性都是双精度的:int部分存储自1899年12月31日以来的天数,小数部分是一天中的时间。您将始终存在舍入错误。您需要使用范围(>和<)或先将两个部分截断为int,然后再进行比较。
答案 1 :(得分:0)
我只是编辑它,现在我可以将它与时间变量一起每天使用:),因此我现在摆脱了“ Setondate”:
import win32com.client
import os.path
import datetime
a = str((datetime.date.today()).strftime('%Y%m%d'))
def saveattachemnts(subject,name,path):
outlook = win32com.client.Dispatch("Outlook.Application").GetNamespace("MAPI") #Opens Microsoft Outlook
inbox = outlook.GetDefaultFolder("6") #N4 Invocie folder
messages = inbox.Items #Get emails
today = datetime.date.today()
pathToSave = os.path.expanduser(path)
for msg in messages:
if msg.Subject == subject and msg.Unread:
break
for att in msg.Attachments:
if att.FileName == name:
if msg.Subject == subject and msg.Unread:
msg.Unread = False
break
att.SaveASFile(pathToSave + "\\" + att.FileName)
print("Mail Successfully Extracted")
saveattachemnts("The subject" + a +"-1",
"The file name - " + a + "-1.xlsx", "D:\my_path")