如何让pywin32方法接受可变参数

How to Get pywin32 Methods to Accept Variable Parameters

我正在使用 pywin32 编写一个发送电子邮件通知的程序。基于错误异常

def main(recipient):
try:    
    mailer = Dispatch("Outlook.Application")
    msg = mailer.CreateItem(0)
    msg.To = recipient
    msg.CC = ""
    msg.Subject = "EmailTest"
    msg.Body = "This is most certainly a test"
    msg.Send()

    success(msg.Subject, recipient)
except Exception:
    failure(msg.Subject, recipient)

当 success 和 fail 方法的参数是变量(带有字符串值)时,它 returns 错误:

Traceback (most recent call last):
  File "C:\pathtoprogram\thisprogram.py", line 48, in main
    success(msg.Subject, recipient)
  File "C:\Users\myuser\AppData\Local\Programs\Python\Python36-32\lib\site-packages\win32com\client\dynamic.py", line 516, in __getattr__
    ret = self._oleobj_.Invoke(retEntry.dispid,0,invoke_type,1)
pywintypes.com_error: (-2147352567, 'Exception occurred.', (4096, 'Microsoft Outlook', 'The item has been moved or deleted.', None, 0, -2147221238), None)

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "<interactive input>", line 1, in <module>
  File "C:\pathtoprogram\thisprogram.py", line 50, in main
    failure(msg.Subject, recipient)
  File "C:\Users\myuser\AppData\Local\Programs\Python\Python36-32\lib\site-packages\win32com\client\dynamic.py", line 516, in __getattr__
    ret = self._oleobj_.Invoke(retEntry.dispid,0,invoke_type,1)
pywintypes.com_error: (-2147352567, 'Exception occurred.', (4096, 'Microsoft Outlook', 'The item has been moved or deleted.', None, 0, -2147221238), None)

我不知道是什么导致了异常,但是当我直接将参数作为字符串输入时,代码运行正常。

success("mySubject", "anEmail")
except Exception:
    failure("mySubject", "anEmail")

该代码可以正常工作 运行,但我需要参数为变量,因为它们需要能够从 main 方法传入。

我一直在查找类似问题的答案,但没有找到与此问题相关的答案。看起来 msg.Subject 和 msg.To 实际上并不存储字符串值,即使它们看起来像任何其他赋值语句。也许这是我想念的一件明显的事情? 任何帮助将不胜感激。

我用的是python3.6和对应的pywin32版本

问题不在于您使用变量的方式。您可以通过在调用 msg.Send()

之前检查 msg.Subject 的值来对此进行测试

请参阅 Microsoft 的 CDO(协作数据对象)文档,专门针对 Send 方法:

https://msdn.microsoft.com/en-us/library/ms527190(v=exchg.10).aspx

发送 将邮件移动到当前用户的发件箱文件夹。消息系统从发件箱中检索消息并将它们传输给收件人。传输后,一条 消息将从发件箱中删除并删除 除非 saveCopyTrue。*

请参阅您收到的错误消息:

4096, 'Microsoft Outlook', 'The item has been moved or deleted.'

所以系统正在执行其设计目的 - 发送后删除邮件。