我正在尝试向大量个人(超过100个)发送电子邮件,但是在第988个字符之后引入了换行符,这会中断电子邮件字符串,从而导致“无法传递”错误。
对于一般的编码我还是比较陌生的,但是已经设法从一些在线研究中整理了一些代码片段。我尝试改用Header
对象,但收到了相同的结果。
即:
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行中的字符限制,我会遇到此问题,但是我不知道我该如何克服这个问题。
答案 0 :(得分: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。