邮件的ReceivedTime未在python中显示

时间:2019-02-25 10:14:59

标签: python windows outlook pywin32 mapi

我正在尝试阅读邮件,并使用MAPI在Outlook 2016中查看收到的时间。 我能够看到邮件的主题,而看不到邮件的 receivedTime 。我知道“ Receivedtime”可用来获取邮件的接收时间,但是在执行程序时, 一个弹出窗口即将到来,表明python已经停止工作

我知道这不是由于任何计算机问题,而是我的代码中的某些问题。

这是我的代码。

def arrange(mailbox):
    global spam
    timeperiod() # stores required date in spam[] list
    msgs=mailbox.Items
    msgs.Sort("[ReceivedTime]", True)
    p=msgs.restrict(" [ReceivedTime] >= '"+spam[2]+"'") #and [ReceivedTime] >= '" +spam[1]+"'    
    print(len(p))

    '''
    for m in list1:
        if m.Unread:
            m.Unread=False
            '''
    return p

#Calling it
ctm1=arrange(ctm)

print(len(ctm1)) #Working fine
for message in ctm1:
    print (message.subject) #Also works good
    print (message.receivedTime) # Here is the problem, it's not showing

screenshot] 1

我也尝试过Senton属性,但是它不起作用。因此,任何猜测为什么sendon或ReceivedTime属性不起作用?

更新的代码:

def printlist(box1) :
print(len(box1))

for message in box1:
    if message.Class==43 :
      #  print('true')
        print (message)
        #.senderEmailAddress) #working
        #print(message.SentOn.strftime("%d-%m-%y")) #not working
        #print(message.body)
        #print(message.UnRead)
        #print (message.receivedTime) #not working
#print('-----------')

2 个答案:

答案 0 :(得分:1)

当我使用auto-py-to-exe将.py脚本编译为.exe时,.ReceivedTime中断了程序,我也遇到麻烦。

在此try:语句下出现错误的地方

    try:
        received_year = str(email.ReceivedTime)[0:4]
        received_month = str(email.ReceivedTime)[5:7]
        received_day = str(email.ReceivedTime)[8:10]

这在我的IDE(PyCharm)内完全可以正常工作,但是一旦将其编译为.exe,它就会在这里中断。

我已将pywin32更新为最新版本(228),还尝试使用224来查看它是否是版本问题(不是)。

但是!!通过这个过程,我发现了错误!当您使用auto-py-to-exe编译为.exe时,它不包括.ReceivedTime部分需要正确运行的软件包“ win32timezone”。因此,您需要导入此软件包才能使其正常工作。

解决此问题所需要做的就是在编译为.exe之前将其包含在.py脚本的顶部: 导入win32timezone

让我知道这是否对其他遇到此问题的人有用!

答案 1 :(得分:0)

您很可能遇到了MailItem以外的其他项目-您的收件箱中还可以包含ReportItemMeetingItem对象;它们都没有公开ReceivedTime属性。

在访问任何其他MailItem特定属性之前,检查message.Class属性== 43(olMail)。