【问题标题】:Python Command to Mark Mails as Read in Outlook (MAPI)在 Outlook (MAPI) 中将邮件标记为已读的 Python 命令
【发布时间】:2018-01-08 14:35:54
【问题描述】:

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

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

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

附:这是我的第一个真正的 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.

【问题讨论】:

  • 与您的请求无关,但您似乎在 os.chdir 路径字符串的末尾缺少了一个 \

标签: python outlook mapi


【解决方案1】:

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

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

要将消息标记为已读,您只需执行以下操作:

message.Unread = False

【讨论】:

    猜你喜欢
    • 2013-02-02
    • 2014-10-19
    • 2013-05-07
    • 2019-07-19
    • 1970-01-01
    • 2016-11-03
    • 2014-09-09
    • 2015-10-08
    • 1970-01-01
    相关资源
    最近更新 更多