【问题标题】:Unable to send mail through outlook using Python无法使用 Python 通过 Outlook 发送邮件
【发布时间】:2020-05-01 23:05:22
【问题描述】:

我正在使用以下代码使用 python 发送带有附件的电子邮件。我使用 Outlook 应用程序 itelt(不是通过后端)

from time import sleep

import win32com.client as win32

outlook = win32.Dispatch('outlook.application')
mail = outlook.CreateItem(0)
mail.To = "EMAIL ADDRESS"
mail.Subject = "Subject"
mail.HtmlBody = "HTML Body"
mail.Attachments.Add("folderName\\output.zip")
mail.Display(True)
sleep(1)
mail.Send()

在 mail.Display(True) 行之前它工作正常。我可以看到打开的 Outlook 新邮件窗口,其中输入了所有内容并附加了文件。但是下一条语句 mail.send() 给出错误:

Traceback (most recent call last):   File "C:/Users/username/PycharmProjects/001.PySelenium/win32email.py", line 16, in <module>
    mail.send()   File "C:\Users\username\PycharmProjects\001.PySelenium\venv\lib\site-packages\win32com\client\dynamic.py", line 516, in __getattr__
    ret = self._oleobj_.Invoke(retEntry.dispid,0,invoke_type,1) pywintypes.com_error: (-2147467260, 'Operation aborted', None, None)

调试截图:

【问题讨论】:

  • 从显示中移除true,为什么显示?你可以删除所有,只使用 mail.send()
  • 根据 'Strive' 给出的答案进行了尝试,但没有奏效。
  • pywin32更新了吗?
  • 我有最新版本 227
  • 我在问题上添加了截图

标签: python winapi outlook


【解决方案1】:

请使用mail.Send()

顺便说一句,如果你想使用 Python 自动通过 Outlook 发送邮件。

请评论mail.Display(True)sleep(1),否则您必须手动保存对邮件的更改才能发送邮件。

请尝试:

import win32com.client

outlook = win32com.client.Dispatch('outlook.application')
mail = outlook.CreateItem(0)
mail.To = "my@mail.com"
mail.Subject = "Test"
mail.Body = "Mail"
mail.Attachments.Add("folderName\\output.zip")

mail.Send()

【讨论】:

  • 试过了。但是没有用。注释掉 mail.Display 和 sleep 并更改为 mail.Send()。它仍然没有发送邮件。得到同样的错误
  • @automaticSoldier 很奇怪,我已经编辑了我的答案,请尝试其他方式。
  • 试过了,但它在 mail_item._oleobj_.Invoke(*(64209, 0, 8, 0, send_account)) 行中给出类型不匹配错误
  • @automaticSoldier 你的运行环境是什么,WIN10?Python 3?
  • Windows 10,Python 解释器 3.6
猜你喜欢
  • 2011-09-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多