使用PHPMailer通过Gmail SMTP发邮件报错排查求助
问题
我用PHP开发了一个联系表单,采用PHPMailer类通过Gmail SMTP发送邮件。该表单使用其他邮箱ID时运行正常,但切换为Gmail SMTP设置后,出现报错:
SMTP Error: Could not connect to SMTP host. and SMTP -> ERROR: Failed to connect to server: Connection refused (111)
以下是我使用的代码:
require 'PHPMailer/class.phpmailer.php'; $mail = new PHPMailer(); $mail->IsSMTP(); $mail->Host = 'smtp.gmail.com'; $mail->Port = 587; $mail->SMTPAuth = true; $mail->Username = 'venkateshm2280@gmail.com'; $mail->Password = 'mmuxhssfdrqnsowp'; // Use the App Password you generated $mail->SMTPSecure = 'tls'; $mail->From = $_POST['email']; $mail->FromName = $_POST['name']; $mail->AddAddress('venkateshm2280@gmail.com', 'HR'); $mail->WordWrap = 50; $mail->IsHTML(true); $mail->AddAttachment($path); $mail->Subject = 'Application for Programmer Registration'; $mail->Body = $message; $mail->SMTPDebug = 2;
请问Gmail SMTP设置是否存在不匹配的地方?
解决建议
- 检查服务器端口权限:多数服务器会默认限制对外的SMTP端口,先确认主机商是否放行587端口访问smtp.gmail.com。如果不行,换用465端口,同时把
$mail->SMTPSecure改成'ssl'试试。 - 验证应用密码:确保你用的应用密码是正确生成的——Gmail要求必须开启两步验证才能创建应用密码,生成的密码是16位无空格字符,要完整复制使用。
- 升级PHPMailer版本:你当前使用的是旧版PHPMailer,新版对Gmail的SMTP协议支持更完善,建议替换为最新版本的PHPMailer。
- 启用PHP openssl扩展:Gmail SMTP依赖openssl扩展,打开php.ini文件,检查
extension=openssl是否被注释,若注释则取消并重启服务器。 - 禁用自动TLS协商:在代码中添加
$mail->SMTPAutoTLS = false;,部分环境下自动TLS握手会失败,强制使用手动设置的加密方式。
内容的提问来源于stack exchange,提问作者Venkat
相关产品推荐
相关产品推荐

