使用Python将Outlook中的电子邮件保存到文件夹中

时间:2018-07-31 20:25:15

标签: python email outlook

我正在尝试自动将Outlook中的电子邮件保存到我们的文件夹中。我看不到用于将电子邮件另存为.msg或任何其他类型的代码。

import win32com.client
import os
os.chdir("filepathhere")
outlook = win32com.client.Dispatch("Outlook.Application").GetNamespace("MAPI")
accounts= win32com.client.Dispatch("Outlook.Application").Session.Accounts;

Tokyo = "email from Tokyo"

inbox = outlook.GetDefaultFolder(6) 
subject = Tokyo
messages = inbox.Items
message = messages.GetFirst()

for msg in messages:
    if msg.subject == Tokyo:
        msgname = msg.subject
        msgname=str(msgname)
        print msgname
        message.saveasfile(msgname+".msg")

我收到错误消息: AttributeError:.saveasfile

3 个答案:

答案 0 :(得分:1)

SaveAsFile是仅用于附件的方法。

对于消息本身,只需使用message.SaveAs()

来源:https://msdn.microsoft.com/en-us/VBA/Outlook-VBA/articles/mailitem-saveas-method-outlook

答案 1 :(得分:0)

我设法使您的代码生效。 在第20行中,我认为您遇到了问题:

message.saveasfile(msgname+".msg")

此“消息”应将第一封电子邮件保存在收件箱中,而不是保存在for循环中的当前消息。我相信这只是一个错字。无论如何,我认为您打算使用:

msg.saveas(msgname+".msg")

直接将文件保存到“文档”文件夹中。我没有设法让您的os.chdir将文件保存到指定的目的地。

答案 2 :(得分:0)

以下代码有效:

from win32com.client import Dispatch
import os
import re

outlook = Dispatch("Outlook.Application").GetNamespace("MAPI")
inbox = outlook.GetDefaultFolder(6)
print(inbox)
messages = inbox.items
message = messages.GetLast()
name = str(message.subject)
#to eliminate any special charecters in the name
name = re.sub('[^A-Za-z0-9]+', '', name)+'.msg'
#to save in the current working directory
message.SaveAs(os.getcwd()+'//'+name)