繁体   English   中英

在Outlook(MAPI)中将邮件标记为已读的Python命令

[英]Python Command to Mark Mails as Read in Outlook (MAPI)

我正在编写一个python代码,以从Outlook中未读的电子邮件中下载特定的附件,并将这些电子邮件标记为已读。 我已经成功完成了90%的工作,即我可以进行迭代以打开未读的电子邮件并下载具有特定电子邮件的附件。 但是,我有两个问题。

  1. 我正在下载具有相同名称的附件,如果有两个具有相同名称的附件,它将仅保存从上次迭代中提取的附件。 我尝试在文件名的末尾添加时间戳,但效果相同。 任何帮助,将不胜感激。 这不是强制性要求,因为邮件是按规定的时间间隔发送的,我可以编写一个单独的python代码来重命名它,但我想将所有内容打包在这封电子邮件中。

  2. 下载附件后,我想将电子邮件标记为已读。 我不知道此命令。 我已附上代码供您参考。

PS这是我的第一个真正的python代码。 这也是我在这里的第一篇文章。 抱歉,是否已经在其他地方提出了此要求。

import win32com.client
import os
import time
date_time_stamp = time.strftime("%Y%m%d-%H%M%S")
#set custom working directory
os.chdir('C:\\Users\user_name\Desktop\')
print(os.getcwd())
outlook = win32com.client.Dispatch("Outlook.Application").GetNamespace("MAPI")
main_inbox = outlook.GetDefaultFolder(6)
subfolder = main_inbox.Folders.Item("my_child_folder_under_inbox")
subfolderitems = subfolder.Items
message = subfolderitems.GetFirst()
attachment_name = 'my_attachment_name'

#Loop to pick messages that are unread
for message in subfolderitems:
        if message.Unread == True:
                print("New Mail Found... Downloading Attachment...")
                #Loop to check if the attachment name is the same
                for attachments in message.Attachments:
                    if attachments.Filename == attachment_name:
                        #Saves to the attachment to the working directory 
                        attachments.SaveASFile(os.getcwd() + '\\' + 'my_attachment_name' + date_time_stamp + '.csv')
                        print (attachments)
                        time.sleep(2)
                        break
                    #Go to next unread messages if any
                message = subfolderitems.GetNext()
        else:
                print ("Checking...")

-致谢,Sakthi Ganesh K.

我认为这可能与您的“ date_time_stamp”有关,因为它尝试在同一秒内下载文件,并且系统仅保留最后一个文件。 您可以尝试使用UUID来确保它是唯一的字符串:

import uuid
file_uuid = str(uuid.uuid4())
...
attachments.SaveASFile(os.getcwd() + '\\' + 'my_attachment_name' + file_uuid + '.csv')

要将消息标记为已读,您可以简单地执行以下操作:

message.Unread = False

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM