如何在config.json中配置多个邮箱地址适配smtplib模块?
解决smtplib多收件人仅发送给第一个地址的问题
正确的config.json配置方式
你之前尝试的两种格式都存在问题:
- 逗号分隔的单个字符串:脚本未正确解析逗号后的地址
- 包含单个长字符串的数组:本质还是一个地址字符串,未做拆分
正确的配置是将每个邮箱地址作为独立元素放在数组中:
"smtp_to_address": ["Joe.Blow@Kokomo.ca", "hotmale@hotmail.com", "favourable@outlook.com"]
脚本对应的修改(关键)
smtplib的sendmail()方法接收的收件人参数可以是逗号分隔的字符串或字符串列表。如果脚本原本只处理单个地址的字符串,需要调整读取配置的逻辑:
兼容单个/多个地址的处理逻辑
如果想同时兼容两种配置格式,可在脚本中加入判断:
import json import smtplib from email.mime.text import MIMEText # 读取配置文件 with open('config.json', 'r') as f: config = json.load(f) # 处理收件人地址 to_addresses = config["smtp_to_address"] # 单个字符串转列表,逗号分隔的字符串自动拆分 if isinstance(to_addresses, str): to_addresses = [addr.strip() for addr in to_addresses.split(',') if addr.strip()] # 构建邮件 msg = MIMEText('邮件内容') msg['From'] = config["smtp_from_address"] msg['To'] = ', '.join(to_addresses) # 邮件头To字段需用逗号分隔字符串 # 发送邮件 with smtplib.SMTP(config["smtp_server"], config["smtp_port"]) as server: server.login(config["smtp_username"], config["smtp_password"]) server.sendmail(msg['From'], to_addresses, msg.as_string())
仅支持数组格式的简洁处理
如果确定后续只用多地址数组,直接读取数组即可:
to_addresses = config["smtp_to_address"] # 可选:校验格式是否正确 if not isinstance(to_addresses, list): raise ValueError("smtp_to_address必须为邮箱地址列表")
之前配置无效的原因
- 逗号分隔的字符串:若脚本未拆分该字符串,部分SMTP服务器会忽略逗号后的内容,导致仅发送给第一个地址
- 含单个长字符串的数组:
sendmail()会将整个长字符串视为一个收件人地址,SMTP服务器无法解析其中的多个邮箱,自然仅发送给第一个
内容的提问来源于stack exchange,提问作者kill9all
相关产品推荐
相关产品推荐

