我正在尝试自动将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
答案 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)