You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 20:48:45