python - Python从函数向电子邮件添加附件
问题描述
我正在尝试从 Python 自动发送附件和电子邮件:
def Emailer(text, subject, recipient):
import win32com.client as win32
outlook = win32.Dispatch('outlook.application')
mail = outlook.CreateItem(0)
mail.To = recipient
mail.Subject = subject
mail.HtmlBody = text
mail.Display(True)
attachment = 'C:/Users/.../file.pdf'
mail.Attachments.Add(attachment)
Emailer('text', 'test', 'name@mail.com')
但是,这不会添加附件。路径应该是正确的,因为当我在下面尝试时,它可以工作:
import win32com.client as win32
mail = win32.Dispatch('outlook.application').CreateItem(0)
mail.To = 'name@mail.com'
mail.Subject = 'test'
mail.HTMLBody = 'text'
attachment = 'C:/Users/.../file.pdf'
mail.Attachments.Add(attachment)
mail.Display(True)
任何人都知道我做错了什么Emailer()
解决方案
在 Emailer 中,您MailItem.Display(True)
在添加附件之前调用,而在“工作”片段中,您在添加附件之后调用。根据官方文档 Display(True)
创建一个模态窗口,它也可能是一个阻塞调用,意思是Emailer
会停止运行,直到你关闭窗口。
我建议Display
您在添加附件后将呼叫移至 ,或者尝试打开非模态窗口。
顺便说一句,根据上面链接的文档,不推荐使用 Display 。
推荐阅读
- go - go mod tidy work 如何为本地目录生成伪版本?
- c# - 如何通过 C# 将证书对话框称为 Chrome
- google-cloud-functions - 无服务器 VPC 连接器是否需要共享 VPC?
- python - 两个列表到熊猫数据框的一对一映射
- nginx - 如何在 kubernetes pod 中调试 nginx 302
- amazon-web-services - AWS Lightsail 分发自定义域 www/non-www 处理中的不一致和某些域不起作用
- ios - Firebase 身份验证 - 当我安装更新时用户为空,但如果我删除更新并重新安装旧应用程序,则会找到用户
- php - PHP -SQL 选择大于分钟和小时的地方
- ios - 使用 url 从我的 iOS 应用程序创建订阅日历 cal.ical
- reactjs - React - Axios 发布请求返回:状态码 406