在使用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',无,无)
我的系统是日语。
我将在下面回答我的问题。
答案 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'。这对我有用!