python - 使用 SMTP 发送附件时正文/文本为空
问题描述
如果使用 smtplib 有任何附件,我无法通过电子邮件发送任何文本或 html 正文。如果没有传递附件,则正文可见/不为空。
我尝试使用MIMEMultipart('alternative')
,发送文本作为msg.attach(MIMEText(kwargs.get('text'), 'plain'))
发送正文msg.attach(MIMEText(body))
和附件作为msg.attach(MIMEApplication(fil.read(),Content_Disposition='attachment; filename="%s"' % basename(f),Name=basename(f)))
守则如下 -
msg = MIMEMultipart('alternative')
author = formataddr((str(Header(header)), sender))
msg['From'] = author
msg['To'] = ','.join(receiver)
msg['Subject'] = subject
if "reply_to" in kwargs and kwargs["reply_to"]:
msg['Reply-to'] = kwargs["reply_to"]
if 'Bcc' in kwargs:
if not isinstance(kwargs['Bcc'], list):
kwargs['Bcc'] = [kwargs['Bcc']]
receiver = receiver + kwargs['Bcc']
msg['Bcc'] = ','.join(kwargs['Bcc'])
if 'Cc' in kwargs:
if not isinstance(kwargs['Cc'], list):
kwargs['Cc'] = [kwargs['Cc']]
receiver = receiver + kwargs['Cc']
msg['Cc'] = ','.join(kwargs['Cc'])
if 'text' in kwargs:
msg.attach(MIMEText(kwargs.get('text'), 'plain'))
if body != []:
if 'mime_only' in kwargs and kwargs['mime_only']:
msg.attach(MIMEText(body))
else:
msg.attach(MIMEText(body, 'html'))
if 'files' in kwargs:
files = kwargs['files']
for f in files:
with open(f, "rb") as fil:
msg.attach(MIMEApplication(
fil.read(),
Content_Disposition='attachment; filename="%s"' % basename(f),
Name=basename(f)
))
所有部分都在单独工作,即 - 我能够发送文本电子邮件、html 电子邮件和附件,但不能发送 HTML 或带有附件的文本。
我注意到的一件事是,当我在 gmail 上收到邮件时,它确实会在我点击邮件(在通知/摘要中)之前显示正文内容,但是当我点击或打开它时正文不存在。
解决方案
推荐阅读
- javascript - 只允许输入字母或数字
- android - 格式错误的 URL 异常:无协议
- python - 从python中两个数字之间的字典中获取所有键
- laravel - 如何通过标签或 laravel 地平线中的任何内容杀死工作?
- c# - 使用 C# 按相同字符串在列表中出现的频率对列表进行排序
- google-apps-script - 当我复制谷歌表格时脚本停止工作
- google-chrome-extension - Chrome 扩展程序未加载 content_scripts
- java - 模糊边缘不断恢复 100% 不透明度(处理中)
- php - 我如何在 PHP 中使用 razorpay 支付网关
- python - 使用pandas dataframe python根据其他列(column2)填充现有列中的NaN值(column1)