AttributeError:<未知> .Python中的Senton错误-Outlook

时间:2019-09-19 18:15:05

标签: python-3.x email outlook pywin32

我是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 “错误,我找不到太多有关此问题的文档。

2 个答案:

答案 0 :(得分:0)

首先,您假设文件夹中只有MailItem个对象。您还可以使用ReportItemMeetingItem等不公开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")