python - 如何克服电子邮件标题中的 988 字符限制?
问题描述
我正在尝试向大量个人(100 多个)发送电子邮件,但在第 988 个字符之后引入了换行符,这会中断电子邮件字符串,从而导致“无法投递”错误。
一般来说,我对编码相对较新,但已经设法从一些在线研究中拼凑出一些代码片段。我试图利用Header
改用一个对象,但我收到了相同的结果。
IE:
from email.header import Header
msg['To'] = str(Header(','.join(list_of_emails)))
从我能找到的有限信息中,我收集到必须折叠标题以符合 RC 2822 格式,但我不知道如何这样做。
import smtplib
from email.message import EmailMessage
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.base import MIMEBase
from email import encoders
msg = MIMEMultipart()
msg['From'] = me
msg['To'] = ','.join(['john@example.com', 'mary@example.com',
..., 'mike@example'])
msg['Subject'] = subject
body = 'enter text here'
msg.attach(MIMEText(body,'plain'))
filename = 'abc123.xlsx'
attachment = open('C:\Users\......', "rb")
part = MIMEBase('application', 'octet-stream')
part.set_payload((attachment).read())
attachment.close()
encoders.encode_base64(part)
part.add_header('Content-Disposition', f"attachment; filename={filename}")
msg.attach(part)
server = smtplib.SMTP('smtp.office365.com', 587)
server.starttls()
server.login(user, password)
server.send_message(msg)
server.quit()
代码块完全符合我的预期:发送包含适当标题、正文和附件的电子邮件。在我开始在msg['To']
. 例如,如果使用包含 100 多封电子邮件的列表,其中一些被换行符打断并显示为这样,'bobsmith@ex ample.com'
我相信由于 1 行中的字符限制,我遇到了这个问题但是我不知道如何克服这个问题问题。
解决方案
您认为线路msg['To'] = str(Header(','.join(list_of_emails)))
是问题的假设是正确的。换行是自动的(您无需str
手动转换或使用 a Header
)。但是,换行依赖于空格而不是逗号作为分隔符。因此,如果没有任何断字,您的行会每 988 个字符拆分一次。只要地址不超过 988 个字符,就可以使用分词符。要插入空格,请将有问题的行替换为
msg['To'] = Header(', '.join(list_of_emails))
要不就
msg['To'] = ', '.join(list_of_emails)
请记住,您一开始使用的是旧版 API。
推荐阅读
- matlab - MATLAB 使用 vpa() 时 mod() 的奇怪行为
- python - 如何优化 Python 中嵌套到平面级字典的转换?
- java - 如何在iText7中将背景颜色应用于带有圆角的表格单元格?
- javascript - 如何从地图中的承诺中设置 JS 变量?
- linux - IntelliJ IDEA 在通过 VNC 运行时显示一个彩色矩形(JetBrains 隐私政策对话框)
- c - 为什么在这个问题中有时使用信号量而不是条件变量?
- php - 如何在 laravel 中更新深层 json 数据
- android - 在 Android 活动转换上设置简单幻灯片动画的简单方法?
- apache-kafka - 如何获取kafka消费者组的配置属性详细信息
- mongodb - 如何比较 Spring MongoDB 过滤器查询中的 fromdate 和 todate