提问人:alexbie19 提问时间:11/16/2023 最后编辑:user692942alexbie19 更新时间:11/16/2023 访问量:16
使用 pywin32 通过 Outlook 发送邮件
Sending Mail via outlook with pywin32
问:
我有一个非常“简单”的问题。我想通过打开本地Outlook并发送Python发送电子邮件。这确实工作了一段时间,突然停止工作了。从那以后,我总是收到相同的错误。我对此有点陌生,我不知道 pywin 到底在做什么,但我正在慢慢到达那里。
_GetGoodDispatch IDispatch = pythoncom。CoCreateInstance( pywintypes.com_error: (-2146959355, 'Starten des Servers fehlgeschlagen', None, None)
这是我当前有效的代码!
def send_mail(adresses: List[str], subject: str="Automatic mail", body: str="I am an automatic mail",
attachment_paths: List[str]=[]):
"""
Send automatic mail
Args:
adresses (List[str]): List of email addresses
subject (str, optional): Email subject. Defaults to "Automatic mail".
body (str, optional): Email body. Defaults to "I am an automatic mail".
attachment_paths (List[str], optional): List of attachment file paths. Defaults to [].
"""
if attachment_paths is None:
attachment_paths = []
outlook = win32.Dispatch("outlook.application")
olMailItem = 0
by_value = 1
if isinstance(adresses, str):
adresses = [adresses]
for mailto in adresses:
mail = outlook.CreateItem(olMailItem)
mail.SentOnBehalfOfName = 'EMAIL'
mail.To = mailto
mail.Subject = subject
mail.Body = body
for attachment_path in attachment_paths:
mail.Attachments.Add(attachment_path, by_value, 1)
mail.Send()
我现在有点不知道该尝试什么,当我搜索错误代码时,我找不到有用的东西。
我没尝试过什么特别的。我要么用其他代码尝试过。我用 smtpltlib 尝试过,但也没有用。我不喜欢共享密码数据,特别是因为这应该在我现在工作的大公司中工作,工程师只想按下“发送邮件”按钮并完成,如果它是本地的,那么这将是理想的。我在 StackOverflow 中找到了一些解决方案,但遗憾的是它们没有帮助。
我尝试了 VBS 脚本,因为工程师告诉我它与 VBS 配合得很好,但这也不起作用,但我认为这是我的错,因为我从未真正用它编程过,并且可能犯了一些错误,所以如果有人为我提供了一个通过 VBS 工作的代码,我也会尝试。
我愿意使用其他编码语言,我可以通过 python 脚本调用它们。
感谢您的帮助!
答:
错误是 。如果其中一个应用(Outlook 或你的应用)使用提升的权限(以管理员身份运行)运行,则很可能是由不同的安全上下文引起的。确保两者都不做。或者确保 Outlook 未在你的之前运行 - Outlook 是一个单一实例,因此创建新实例将始终附加到正在运行的(在不同的安全上下文中)第一个实例。如果它未运行,它将在与应用匹配的上下文中启动。CO_E_SERVER_EXEC_FAILURE
Outlook.Application
评论