使用465端口发送邮件
约 618 字大约 2 分钟
2026-08-29
服务器直接对外发信(连对方 25 端口)容易被拦截或进垃圾箱,很多网络环境也对 25 端口出站做了限制。标准做法是让程序走第三方 SMTP 服务的加密端口:465(SMTPS)或 587(STARTTLS),本文给出程序直连与服务器中继两种方案。各邮件端口的完整说明(收发方向、客户端配置)见邮件端口说明。
方案A:应用程序直连 SMTP(推荐)
注册任意邮件服务商(如邮箱服务商的 SMTP、邮件推送服务),拿到 SMTP 地址、账号与授权码后,程序直接连 465 端口发送。
Python 示例:
import smtplib
from email.mime.text import MIMEText
msg = MIMEText('邮件正文', 'plain', 'utf-8')
msg['Subject'] = '测试邮件'
msg['From'] = 'noreply@example.com'
msg['To'] = 'user@example.com'
# 465 使用 SSL 直连
with smtplib.SMTP_SSL('smtp.example.com', 465) as s:
s.login('noreply@example.com', '授权码')
s.send_message(msg)PHP(PHPMailer)在配置中对应选择 SMTPSecure = 'ssl'、Port = 465;若用 587 则选 tls。
方案B:Postfix 配置为 SMTP 中继
服务器上已有程序(如监控、CMS)只会"本机发信"时,让 Postfix 把信转交给第三方 SMTP:
sudo yum install -y postfix # 或 apt install postfix编辑 /etc/postfix/main.cf:
relayhost = [smtp.example.com]:465
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = static:noreply@example.com:授权码
smtp_sasl_security_options = noanonymous
smtp_tls_wrappermode = yes # 465 是 SSL 包裹模式
smtp_tls_security_level = encryptsudo systemctl restart postfix发送测试:
echo "body" | mail -s "test" user@example.com
# 或
sendmail user@example.com < test.txt发送前的端口验证
# 确认能连上 SMTP 服务的 465 端口
openssl s_client -connect smtp.example.com:465 -quiet能看到证书信息并保持连接即为通;超时则检查本地防火墙与安全组出方向(一般出方向默认放行),端口连通性测试方法见Linux测试TCP-UDP端口连通性。
465 与 587 怎么选
465 是 SSL 直连(老但兼容性好),587 是 STARTTLS 明文升级加密。两者都安全,以服务商支持为准;程序配置里二选一,注意加密方式要与服务商要求一致。
常见问题
| 现象 | 处理 |
|---|---|
| Connection refused / timeout | 端口不通或服务商地址写错,按上文验证 465 |
| 535 认证失败 | 密码要用授权码而不是邮箱登录密码 |
| 发出去了但进垃圾箱 | 配置 SPF/DKIM 等域名校验,或更换正规邮件推送服务 |
| 服务器本地测试正常,客户收不到 | 确认没有把发件域用于垃圾内容;查看 maillog:tail /var/log/maillog |
