python win32com outlook 2013 SendUsingAccount返回异常

时间:2016-03-10 05:21:47

标签: python outlook win32com

在使用python和win32com api进行简单的邮件自动化时,我遇到了SendUsingAccount的问题。它被忽略,或者更糟糕的是,当我从Windows 7升级到Windows 10时会产生错误。

这是我的原始代码

import win32com.client

o = win32com.client.Dispatch("Outlook.Application")
oacctouse = None
for oacc in o.Session.Accounts:
    if oacc.SmtpAddress == "sender@mail.com":
        oacctouse = oacc
        break
Msg = o.CreateItem(0)
if oacctouse:
    Msg.SendUsingAccount = oacctouse
if to:
    Msg.To = ";".join(to)
if cc:
    Msg.CC = ";".join(cc)
if bcc:
    Msg.BCC = ";".join(bcc)

Msg.HTMLBody = ""

Msg.Send()

导致以下错误: Traceback(最近一次调用最后一次):   文件“C:\ Program Files(x86)\ JetBrains \ PyCharm 5.0.3 \ helpers \ pydev \ pydevd_exec.py”,第3行,在Exec中     exec exp在global_vars,local_vars中   文件“”,第1行,in   文件“C:\ Python27 \ lib \ site-packages \ win32com \ client \ dynamic.py”,第560行, setattr     self。 oleobj .Invoke(entry.dispid,0,invoke_type,0,value) com_error:( - 2147417851,'\ x83T \ x81 [\ x83o \ x81 [\ x82 \ xc9 \ x82 \ xe6 \ x82 \ xc1 \ x82 \ xc4 \ x97 \ xe1 \ x8aO \ x82 \ xaa \ x95 \ xd4 \ x82 \ xb3 \ x82 \ xea \ x82 \ xdc \ x82 \ xb5 \ x82 \ xbd \ x81B',无,无)

我的系统是日语。

我将在下面回答我的问题。

2 个答案:

答案 0 :(得分:3)

所以,我在最底层的this thread偶然找到了我的问题的解决方案(大多数是针对VBA但是最后一篇文章解决了python问题)。

这是工作代码

import win32com.client

o = win32com.client.Dispatch("Outlook.Application")
oacctouse = None
for oacc in o.Session.Accounts:
    if oacc.SmtpAddress == "sender@mail.com":
        oacctouse = oacc
        break
Msg = o.CreateItem(0)
if oacctouse:
    Msg._oleobj_.Invoke(*(64209, 0, 8, 0, oacctouse))  # Msg.SendUsingAccount = oacctouse

if to:
    Msg.To = ";".join(to)
if cc:
    Msg.CC = ";".join(cc)
if bcc:
    Msg.BCC = ";".join(bcc)

Msg.HTMLBody = ""

Msg.Send()

答案 1 :(得分:1)

对于其他没有运气的人,他们的辅助帐户名称显示在“ o.Session.Accounts中的oacc:”循环下:尝试使用Msg.SentOnBehalfOfName ='2ndaryemail@mail.com'。这对我有用!