事务失败:MIME 部分计数超过 500

Transaction failed: MIME section count exceeds 500

我正在使用 python 脚本向使用 Amazon Simple Email Service. The script reads the emails addresses from an Excel file with openpyxl.

的 400 位用户动态发送 HTML 电子邮件

但是脚本在发送时随机崩溃了大约 260 到 280 个用户。我当前的解决方法是将 Excel 文件设置在脚本先前崩溃的位置,然后再次 运行 。有我的代码:

import email.utils
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText

msg = MIMEMultipart('alternative')
msg['From'] = sender_email
msg['Subject'] = 'Your email subject'

context = ssl.create_default_context()
server = smtplib.SMTP_SSL(smtp_server, port, context=context)
server.login(smtp_login, password)

for dest_email in email_list:
    message_html = '<html><head><title></title></head><body>Dynamic content here...</body></html>'
    message_plain = 'Content here...'

    part1 = MIMEText(message_plain, 'plain')
    part2 = MIMEText(message_html, 'html')
    
    msg.attach(part1)
    msg.attach(part2)
    
    server.sendmail(sender_email, dest_email, msg.as_string())

server.close()

我尝试在执行过程中捕获异常,但我没有得到关于这里错误的详细信息:

我已经四处寻找了一段时间,但无法解决这个问题。你能帮我解决这个问题吗?我究竟做错了什么?每次成功发送电子邮件后,我是否需要重置 header?如果您需要更多详细信息,请告诉我。谢谢

从我的头顶我会说只有 server.sendmail() 部分应该在循环内。现在你似乎是 re-sending 一个单一的 e-mail (msg),它在每次迭代中都会附加新的部分,这也是错误消息所说的。

或者,如果这不起作用:re-create 循环中的整个对象,因此将以 msg = ... 开头的块移到里面。