如何克服电子邮件 header 中的 988 个字符限制?

How to overcome 988 char limitation in email header?

我正在尝试向大量个人(100 多个)发送电子邮件,但在第 988 个字符后引入了换行符,这会中断电子邮件字符串,导致 "undeliverable" 错误。

总的来说,我对编码还比较陌生,但已经设法从一些在线研究中拼凑了一些代码片段。我尝试使用 Header object,但我收到了相同的结果。

即:

from email.header import Header
msg['To'] = str(Header(','.join(list_of_emails)))

根据我能找到的有限信息,我了解到 header 必须折叠以符合 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()

该代码块完全符合我的预期:发送一封电子邮件,其中包含适当的 header、body 和附件。在我开始包括 msg['To'] 下的大量收件人之前,我不会出现任何问题。例如,如果使用包含 100 多封电子邮件的列表,其中一些会被换行符打断并显示为 'bobsmith@ex ample.com' 我相信由于 1 行中的字符限制,我遇到了这个问题,但我不知道我该如何克服这个问题。

您认为第 msg['To'] = str(Header(','.join(list_of_emails))) 行是问题所在的假设是正确的。换行是自动的(您不需要手动转换为 str,或使用 Header)。但是,换行依赖于空格而不是逗号作为分隔符。因此,如果没有任何断字,您的行将每 988 个字符拆分一次。使用分词符,只要地址不超过 988 个字符就没问题。要插入空格,请将有问题的行替换为

msg['To'] = Header(', '.join(list_of_emails))

或者只是

msg['To'] = ', '.join(list_of_emails)

请记住,您首先使用的是旧版 API。