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

使用PHPMailer发送邮件时出现getaddrinfo失败错误,求解决

解决PHPMailer SMTP连接失败(错误#2: getaddrinfo失败)的问题

嘿,这个错误我太熟了!php_network_getaddresses: getaddrinfo失败说白了就是PHP找不到你指定的SMTP服务器地址,咱们一步步来搞定:

核心问题:SMTP主机地址写错了

你代码里的$mail->Host = 'smtp.google.com';是错的!Gmail的官方SMTP服务器地址是**smtp.gmail.com**,这是导致连接失败的直接原因。

其他需要修复的问题

1. 补上语法错误

你代码里的$to = "x@gmail.com"后面少了分号,这会直接触发PHP语法错误,必须补上:

$to = "x@gmail.com";

2. 处理Gmail的SMTP认证限制

现在Gmail默认不允许用普通密码登录SMTP服务,你得二选一:

  • 推荐方案:给你的Gmail账号开启两步验证,然后创建一个应用专用密码,把代码里的密码替换成这个专用密码(这个密码只用于你的邮件发送程序,安全性更高)
  • 临时方案:如果不想开两步验证,可以在Gmail设置里开启不太安全的应用访问(但Google已经在逐步淘汰这个选项,不建议长期使用)

3. 端口与加密方式的备选方案

如果你的服务器封禁了465端口(有些主机商会这么做),可以改用587端口+TLS加密:

$mail->SMTPSecure = 'tls';
$mail->Port = 587;

修正后的完整代码示例

require_once("PHPMailer/PHPMailerAutoload.php");
require_once("PHPMailer/class.phpmailer.php");
require_once("PHPMailer/class.smtp.php");
header('HTTP/1.1 420 Enhance Your Calm');

$mail = new PHPMailer;
$to = "x@gmail.com"; // 补上了分号
$uname="rex";
$body="Some valid Text \r\n some valid text"; // 修正了换行符写法

$mail->SMTPDebug = 3;
$mail->isSMTP();
$mail->Host = 'smtp.gmail.com'; // 修正了SMTP地址
$mail->SMTPAuth = true;
$mail->Username = 'me@gmail.com';
$mail->Password = '你的应用专用密码'; // 替换成正确的密码
$mail->SMTPSecure = 'ssl';
$mail->Port = 465;

$mail->setFrom('me@gmail.com', 'username');
$mail->addAddress($to, $uname);
$mail->isHTML(true);
$mail->Subject = 'Forgot Password';
$mail->Body = $body;

if(!$mail->send()) {
    echo 'Message could not be sent.';
    echo 'Mailer Error: ' . $mail->ErrorInfo;
} else {
    echo 'Message has been sent';
}

另外提个小细节:你代码里的换行符写的是/r/n,这是错误的写法,应该是\r\n,虽然这个不影响连接,但会导致邮件内容换行异常,我已经在示例里一起修正了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:43:07