Reputation: 51
I'm trying to automate saving emails in our folders from outlook. I don't see a code for saving an email as .msg or any other type.
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")
I get the error message: AttributeError: .saveasfile
Upvotes: 4
Views: 24335
Reputation: 159
The below code works:
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)
Upvotes: 4
Reputation: 128
I have managed to get your code to work. In line 20 I believe that you have an issue:
message.saveasfile(msgname+".msg")
This "message" should save the first email in the inbox, not the current msg you have in your for loop. I believe that it is just a typo. Anyway I think you meant to use:
msg.saveas(msgname+".msg")
Which saves a file directly to my Documents folder. I haven't managed to get your os.chdir to save the file to a specified destination.
Upvotes: 0
Reputation: 564
SaveAsFile
is a method only to be used on attachments.
For the message itself, use simply message.SaveAs()
.
Source: https://msdn.microsoft.com/en-us/VBA/Outlook-VBA/articles/mailitem-saveas-method-outlook
Upvotes: 2