使用Go54虚拟主机时PHPMailer连接AWS SES SMTP报错求助
排查PHPMailer对接AWS SES SMTP连接失败问题
我尝试使用PHPMailer通过SMTP协议对接AWS SES服务发送邮件,代码如下:
$mail->isSMTP(); $mail->Host = 'email-smtp.eu-west-1.amazonaws.com'; $mail->SMTPAuth = true; $mail->Username = '---'; $mail->Password = '---'; $mail->SMTPSecure = 'tls'; $mail->Port = 587;
调试时出现如下错误信息:
2024-08-18 05:14:11 SERVER -> CLIENT: 220-wghp7.wghservers.com ESMTP Exim 4.97.1 #2 Sun, 18 Aug 2024 06:14:11 +0100 220-We do not authorize the use of this system to transport unsolicited, 220 and/or bulk e-mail. 2024-08-18 05:14:11 CLIENT -> SERVER: EHLO agrop.co 2024-08-18 05:14:11 SERVER -> CLIENT: 250-wghp7.wghservers.com Hello agrop.co [131.153.147.178]250-SIZE 52428800250-8BITMIME250-PIPELINING250-PIPECONNECT250-AUTH PLAIN LOGIN250-STARTTLS250 HELP 2024-08-18 05:14:11 CLIENT -> SERVER: STARTTLS 2024-08-18 05:14:11 SERVER -> CLIENT: 220 TLS go ahead SMTP Error: Could not connect to SMTP host. 2024-08-18 05:14:11 CLIENT -> SERVER: QUIT 2024-08-18 05:14:11 2024-08-18 05:14:11 SMTP Error: Could not connect to SMTP host.
排查步骤
- 检查服务器出站端口限制:错误日志返回的是
wghp7.wghservers.com的响应,说明请求未发送到AWS SES,而是被当前主机的本地SMTP拦截。先测试服务器能否访问AWS SES的587端口,执行命令:telnet email-smtp.eu-west-1.amazonaws.com 587,若连接失败,联系主机商开放该出站端口。 - 验证AWS SES权限与凭证:确认使用的SMTP用户名/密码是从AWS SES控制台生成的专用凭证(非IAM密钥),且对应的IAM用户拥有SES发送权限,同时区域
eu-west-1与你的SES配置区域一致。 - 排查TLS证书问题:执行STARTTLS后连接中断,可能是服务器缺少AWS SES的根证书。可在PHPMailer中添加证书配置:
$mail->SMTPOptions = array( 'ssl' => array( 'verify_peer' => true, 'verify_peer_name' => true, 'allow_self_signed' => false, 'cafile' => '/usr/local/share/ca-certificates/ca-bundle.crt' // 替换为服务器实际证书路径 ) );
测试阶段可临时关闭证书验证(verify_peer设为false),但生产环境禁用此操作。
- 检查AWS SES账号状态:登录AWS SES控制台,查看发送配额、退信率、投诉率是否超标,若账号被限制会导致连接失败。
- 排除本地SMTP服务干扰:若主机运行Exim等本地SMTP服务,可能会抢占端口或路由请求到本地服务,可临时停止该服务后重新测试。
内容的提问来源于stack exchange,提问作者ttalib
相关产品推荐
相关产品推荐

