首页 > 解决方案 > 如何克服电子邮件标题中的 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 行中的字符限制,我遇到了这个问题但是我不知道如何克服这个问题问题。

标签: pythonpython-3.xsmtplibemail-headers

解决方案


您认为线路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。


推荐阅读