python - ValueError:消息中最多可能有 1 个 To 标头
问题描述
我正在尝试编写一个非常基本的电子邮件发送脚本。这是我的代码..
import smtplib
from email.message import EmailMessage
msg = EmailMessage()
msg.set_content("Test message.")
msg['Subject'] = "Test Subject!!!"
msg['From'] = "myemail@gmail.com"
email_list = ["xyz@gmail.com", "abc@gmail.com"]
for email in email_list:
msg['To'] = email
server = smtplib.SMTP(host='smtp.gmail.com', port=587)
server.starttls()
server.login("myemail@gmail.com", "mypassword")
server.send_message(msg)
server.quit()
该脚本应该将邮件发送给多个收件人,因此,我需要msg['To']
在循环遍历时更改该字段但是我在下面的回溯中收到以下错误。
Traceback (most recent call last):
File "exp.py", line 66, in <module>
msg['To'] = email
File "/usr/lib/python3.8/email/message.py", line 407, in __setitem__
raise ValueError("There may be at most {} {} headers "
ValueError: There may be at most 1 To headers in a message
我该如何解决?请帮忙。谢谢..
解决方案
清理邮件的“收件人”属性。
for email in email_list:
msg['To'] = email
server = smtplib.SMTP(host='smtp.gmail.com', port=587)
server.starttls()
server.login("myemail@gmail.com", "mypassword")
server.send_message(msg)
server.quit()
del msg['To]
下面是引发异常的代码: (\Python385\Lib\email\message.py)
def __setitem__(self, name, val):
"""Set the value of a header.
Note: this does not overwrite an existing header with the same field
name. Use __delitem__() first to delete any existing headers.
"""
max_count = self.policy.header_max_count(name)
if max_count:
lname = name.lower()
found = 0
for k, v in self._headers:
if k.lower() == lname:
found += 1
if found >= max_count:
raise ValueError("There may be at most {} {} headers "
"in a message".format(max_count, name))
self._headers.append(self.policy.header_store_parse(name, val))
推荐阅读
- flutter - 如何使用 amplify-Flutter 创建正确的存储库
- java - JList 的行为不像我预期的那样
- c# - 多线程是否会导致从 SQL Lite 读取数据不准确?
- java - 停止 try 块自动迭代到下一个循环(for loop java)
- microsoft-teams - 如何在 Teams 应用从本地运行时停止创建新的 AAD
- flutter - Flutter如何监听web hook
- c - 如何在两台网络机器上同步两个posix进程?
- javascript - 如何在出现通知时使文本闪烁并在单击时停止它?
- python - 熊猫:if_sheet_exists“替换”不起作用
- android - 过渡动画加载有延迟的活动