Skip to main content
 首页 » 编程设计

python之定义保存电子邮件的邮箱之win32client python

2024年11月01日3yjmyzz

我想使用适用于 Outlook 的 win32 API 将电子邮件保存到共享邮箱的草稿文件夹中。我可以使用以下方法将电子邮件保存到我的(默认?)邮箱草稿文件夹:

def TestEmailer(text, subject, recipient): 
    outlook = win32.Dispatch('outlook.application') 
    mail = outlook.CreateItem(0) 
    mail.To = recipient 
    mail.Subject = subject 
    mail.HtmlBody = text 
    mail.Save() 
 
TestEmailer('hello world', 'test', 'recipient@gmail.com') 

感谢this previous question我可以看到 SendUsingAccount() 方法可用于从定义的邮箱发送。是否有等效的方法保存到已定义邮箱的草稿文件夹?

请您参考如下方法:

切换账号发送邮件时可以选择保存(),邮件将保存在新账号的草稿箱中。

代码:

import win32com.client as win32 
 
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@outlook.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.Save() 
 
 
if __name__ == '__main__': 
    send_mail() 

这里有一点黑魔法。直接设置 mail_item.SendUsingAccount 是行不通的。返回值为无。始终从第一个电子邮件帐户发送邮件。您需要调用 oleobj_.Invoke() 的方法。

更新:

Oleobj 文档:https://github.com/decalage2/oletools/wiki/oleobj

类似案例:python win32com outlook 2013 SendUsingAccount return exception