【问题标题】:python win32com outlook 2013 SendUsingAccount return exceptionpython win32com outlook 2013 SendUsingAccount 返回异常
【发布时间】:2016-03-10 05:21:46
【问题描述】:

在使用 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()

导致以下错误: 回溯(最近一次通话最后): 文件“C:\Program Files (x86)\JetBrains\PyCharm 5.0.3\helpers\pydev\pydevd_exec.py”,第 3 行,在 Exec global_vars、local_vars 中的 exec exp 文件“”,第 1 行,在 setattr 中的文件“C:\Python27\lib\site-packages\win32com\client\dynamic.py”,第 560 行 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',无,无)

我的系统是日文的。

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

【问题讨论】:

    标签: python outlook win32com


    【解决方案1】:

    所以,我偶然在最底部的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()
    

    【讨论】:

    • 非常感谢你的 win32 黑魔法。这似乎是设置 SendUsingAccount 值的唯一方法。 (供您参考,我使用的是 Outlook 2013、Windows 7,我的系统是法语,但不是日语)。
    • 发件人账号很明显,但是Invoke()方法的参数是什么意思呢?它有效,但我无法在任何地方的文档中找到它
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-01-27
      • 1970-01-01
      • 1970-01-01
      • 2016-02-27
      • 2021-05-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多