在 Windows 11 中使用“Outlook(新)”使用 Python 发送电子邮件

Send email with Python in Windows 11 with "Outlook (New)"

提问人:codeKiller 提问时间:10/30/2023 最后编辑:Eugene AstafievcodeKiller 更新时间:10/30/2023 访问量:72

问:

我正在尝试在 Windows 11 机器中发送电子邮件,其中包含以前在安装了 Outlook 的另一台 Windows 10 机器上运行的 Python 代码。

似乎出于某种原因,在 Windows 11 中,没有安装“真正的”Outlook 桌面应用程序......相反,它会安装某种(也许是 webview??)版本的 Outlook,它称之为“Outlook New”。

无论如何,问题在于,下面以前工作的原始代码不再起作用。

import win32com.client as win32

outlook = win32.Dispatch("Outlook.Application")
mail = outlook.CreateItem(0)

mail.Subject = "Email Subject"
mail.Body = "Email body,Python win32com and Outlook."
mail.To = "[email protected]"
mail.Send()

此操作失败,并显示回溯

Traceback (most recent call last):
  File "C:\Users\admin\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.7_qbz5n2kfra8p0\LocalCache\local-packages\Python37\site-packages\win32com\client\dynamic.py", line 84, in _GetGoodDispatch
    IDispatch = pythoncom.connect(IDispatch)
pywintypes.com_error: (-2147221005, 'Invalid class string', None, None)

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File ".\test_mail.py", line 4, in <module>
    outlook = win32.Dispatch("Outlook.Application")
  File "C:\Users\admin\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.7_qbz5n2kfra8p0\LocalCache\local-packages\Python37\site-packages\win32com\client\__init__.py", line 118, in Dispatch
    dispatch, userName = dynamic._GetGoodDispatchAndUserName(dispatch, userName, clsctx)
  File "C:\Users\admin\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.7_qbz5n2kfra8p0\LocalCache\local-packages\Python37\site-packages\win32com\client\dynamic.py", line 104, in _GetGoodDispatchAndUserName
    return (_GetGoodDispatch(IDispatch, clsctx), userName)
  File "C:\Users\admin\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.7_qbz5n2kfra8p0\LocalCache\local-packages\Python37\site-packages\win32com\client\dynamic.py", line 87, in _GetGoodDispatch
    IDispatch, None, clsctx, pythoncom.IID_IDispatch
pywintypes.com_error: (-2147221005, 'Invalid class string', None, None)

这表明我找到“真正的”Outlook 应用程序似乎是一个问题。

任何人都可以建议在 Windows 11 中解决这个问题吗?

python 电子邮件 outlook win32com 办公自动化

评论


答:

3赞 Eugene Astafiev 10/30/2023 #1

相反,它会安装某种(也许是 webview??)版本的 Outlook,它称之为“Outlook New”。

你走在正确的道路上。新的 Outlook 是一个渐进式 Web 应用,它不公开任何 COM 组件。无法在本机 shell 中自动执行此类 Web 应用程序。相反,可以考虑将图形 API 用于任务。有关详细信息,请参阅使用 Microsoft 图形 API

评论

0赞 codeKiller 10/30/2023
好的,感谢您的回答,因此在使用图形 API 时应该没问题......您的意思是无法在 Windows 11 中安装“常规”Outlook 桌面应用程序?...对不起,我不是 Windows 人,非常讨厌它。
1赞 Eugene Astafiev 10/30/2023
当然,您可以自由安装真正的本机客户端应用程序。但是,对于新的 Outlook(旧 Outlook 不可用),可以考虑使用图形 API。