使用 pywin32 通过 Outlook 发送邮件

Sending Mail via outlook with pywin32

提问人:alexbie19 提问时间:11/16/2023 最后编辑:user692942alexbie19 更新时间:11/16/2023 访问量:16

问:

我有一个非常“简单”的问题。我想通过打开本地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 脚本调用它们。

感谢您的帮助!

蟒蛇 python-3.x Outlook pywin32

评论


答:

0赞 Dmitry Streblechenko 11/16/2023 #1

错误是 。如果其中一个应用(Outlook 或你的应用)使用提升的权限(以管理员身份运行)运行,则很可能是由不同的安全上下文引起的。确保两者都不做。或者确保 Outlook 未在你的之前运行 - Outlook 是一个单一实例,因此创建新实例将始终附加到正在运行的(在不同的安全上下文中)第一个实例。如果它未运行,它将在与应用匹配的上下文中启动。CO_E_SERVER_EXEC_FAILUREOutlook.Application