单账号:
import win32com.client as win32 def send_mail(): outlook = win32.Dispatch('Outlook.Application') mail_item = outlook.CreateItem(0) # 0: olMailItem mail_item.Recipients.Add('test@test.com') mail_item.Subject = 'Mail Test' mail_item.BodyFormat = 2 # 2: Html format mail_item.HTMLBody = ''' <H2>Hello, This is a test mail.</H2> Hello Guys. ''' mail_item.Attachments.Add('<附件文件路径>') mail_item.Send() if __name__ == '__main__': send_mail()
多账号:
def send_mail(): outlook_app = win32.Dispatch('Outlook.Application') # choose sender account send_account = None for account in outlook_app.Session.Accounts: if account.DisplayName == 'sender@hotmail.com': send_account = account break mail_item = outlook_app.CreateItem(0) # 0: olMailItem # mail_item.SendUsingAccount = send_account not working # the following statement performs the function instead mail_item._oleobj_.Invoke(*(64209, 0, 8, 0, send_account)) mail_item.Recipients.Add('receipient@qq.com') mail_item.Subject = 'Test sending using particular account' mail_item.BodyFormat = 2 # 2: Html format mail_item.HTMLBody = ''' <H2>Hello, This is a test mail.</H2> Hello Guys. ''' mail_item.Send() if __name__ == '__main__': send_mail()
详细参见原文https://www.jianshu.com/p/4f0ed762f521
给多个地址发邮件:
import win32com.client as win32 import pythoncom pythoncom.CoInitialize() def send_mail(**kwargs): outlook = win32.Dispatch('Outlook.Application') reciList = ['user1@test.com','user2@test.com'] for i in range(len(reciList)): mail_item = outlook.CreateItem(0) # 0: olMailItem mail_item.Recipients.Add(reciList[i]) mail_item.Subject = 'Mail Test' mail_item.BodyFormat = 2 # 2: Html format mail_item.HTMLBody = ''' <H2>Hello, This is a test mail~~.</H2> Hello Guys. ''' # mail_item.Attachments.Add('d:\doc\IT Info.xlsx') mail_item.Send() if __name__ == '__main__': send_mail()