使用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
相关产品推荐
相关产品推荐

