首页 > 解决方案 > python win32.client 从其自己的发件箱文件夹中的辅助 Outlook 帐户发送电子邮件

问题描述

我的第二个 Outlook 帐户没有出现在通过遍历 outlook.application CDispatch Session.Accounts 给出的列表中。

所以,我改用“SentOnBehalfOfName”,正如https://stackoverflow.com/a/57324426/6057650所建议的那样发送电子邮件。它可以工作,但完全不像我预期的那样,因为发送的电子邮件存储在主帐户发件箱中,而不是存储在辅助帐户发件箱中。

import win32com.client as win32

outlook = win32.Dispatch('outlook.application')

# see available mail accounts (no condition, just as info)
for accounts in outlook.Session.Accounts:
    print('Available email accounts: %s'%(accounts))

# Create the email to be sent
mail = outlook.CreateItem(0)
mail.SendUsingAccount='secondary_account@email.com'
mail._oleobj_.Invoke(*(64209, 0, 8, 0, 'secondary_account@email.com'))
mail.SentOnBehalfOfName = 'secondary_account@email.com'
mail.To = 'some_address@email.com'
mail.Subject = 'Report'
mail.Body ='Some stuff'

# getting default folder of used Account
myNamespace = outlook.GetNamespace("MAPI")
myFolder = myNamespace.GetDefaultFolder(6)
myFolder.Display()

# see your prepared email
mail.Display()

# Finally
mail.Send()

我想要(并且需要)将发送的电子邮件存储在辅助帐户发件箱中(与其他同行共享并且可以由他们访问)而不是主要或主要帐户发件箱(只有我可以访问)。

标签: pythonoutlookwin32com

解决方案


尝试以下

import win32com.client

Outlook = win32com.client.Dispatch("Outlook.Application")

for account in Outlook.Session.Accounts:
    if account.DisplayName == "secondary_account@email.com":
        print(account)
        email = Outlook.CreateItem(0)
        email._oleobj_.Invoke(*(64209, 0, 8, 0, account))
        email.Display()

推荐阅读