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

如何在Python中通过SMTP实现多发件人发送邮件?

问题原因

你碰到的问题本质是:像Gmail这类主流SMTP服务器,不允许在同一个连接会话里用不同账号重复认证。你第二次调用s.login()时,服务器根本没切换到第二个发件人账号,所以第二封邮件还是用第一个认证的账号发出去的。

可行解决方案

1. 每个发件人单独创建SMTP连接

这是最稳妥的方案,所有SMTP服务器都支持:

import smtplib

# 发送第一封邮件
with smtplib.SMTP('smtp.gmail.com', 587) as smtp_conn:
    smtp_conn.starttls()
    smtp_conn.login('Sender 1 Email','Sender 1 Password')
    smtp_conn.sendmail('Sender 1 Email','Receiver 1 Email', email1.as_string())

# 发送第二封邮件
with smtplib.SMTP('smtp.gmail.com', 587) as smtp_conn:
    smtp_conn.starttls()
    smtp_conn.login('Sender 2 Email','Sender 2 Password')
    smtp_conn.sendmail('Sender 2 Email','Receiver 2 Email', email2.as_string())

用with语句会自动帮你处理连接的关闭,不用手动调用quit()。

2. 特殊服务器的多账号支持(仅小众场景)

极少数SMTP服务器允许先登出再重新认证,但Gmail绝对不支持这种操作。如果你的服务器支持,你需要先发送QUIT命令(对应smtplib的s.quit()),但这会直接关闭连接,之后还是得重新建立连接再登录新账号——本质和第一种方案没区别。

关于SMTP的登出方法

smtplib里没有单独的“登出”方法:

  • s.quit():发送SMTP协议的QUIT命令,然后关闭连接
  • s.close():直接关闭套接字,不发送QUIT命令

但不管用哪种,要切换发件人账号,都必须重新建立新的SMTP连接并重新认证。

内容的提问来源于stack exchange,提问作者phinnjs

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 08:42:20