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

如何通过SOCKS5代理使用SMTP库发送邮件?连接错误求助

通过SOCKS5代理发送SMTP邮件的问题解决

你的代码存在两个关键错误,导致了代理连接失败:

  1. SOCKS代理地址格式错误
    socks.setdefaultproxy的addr参数仅需传入代理的IP或域名,不能附带socks5://前缀及账号密码。账号密码需要通过username和password专属参数单独传递。

  2. SMTP端口使用不当
    465是SMTP SSL直连端口,应直接使用smtplib.SMTP_SSL创建连接,无需先初始化SMTP对象再调用starttls()。

修正后的完整代码:

import smtplib
import socks

# 正确配置SOCKS5代理:地址、端口单独传入,账号密码用专属参数
socks.setdefaultproxy(
    socks.SOCKS5,
    addr='127.0.0.1',
    port=8000,
    username='login',
    password='password'
)
socks.wrapmodule(smtplib)

smtpserver = 'smtp.example.com'
smtpuser = 'example@mail.com'
smtppass = 'password'

RECIPIENTS = 'recipient@mail.com'
SENDER = 'example@mail.com'
# 邮件需符合SMTP格式,添加必要头信息避免被拒收
mssg = """From: {sender}
To: {recipient}
Subject: Test Proxy Email

This is a test message sent via SOCKS5 proxy.
""".format(sender=SENDER, recipient=RECIPIENTS)

# 465端口使用SMTP_SSL直连
server = smtplib.SMTP_SSL(smtpserver, 465)
server.ehlo()
server.login(smtpuser, smtppass)
server.set_debuglevel(1)
server.sendmail(SENDER, [RECIPIENTS], mssg)
server.quit()

额外注意事项:

  • 确认代理服务器的IP、端口、账号密码真实有效,且服务器支持SOCKS5协议
  • 若SMTP服务器使用587端口(STARTTLS端口),需换回smtplib.SMTP并保留starttls()步骤,代码调整为:
    server = smtplib.SMTP(smtpserver, 587)
    server.ehlo()
    server.starttls()
    server.ehlo()
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 06:35:32