我正在尝试阅读邮件,并使用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
] 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('-----------')
答案 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
以外的其他项目-您的收件箱中还可以包含ReportItem
和MeetingItem
对象;它们都没有公开ReceivedTime
属性。
在访问任何其他MailItem特定属性之前,检查message.Class
属性== 43(olMail
)。