You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

使用SendGrid SMTP无法发送邮件,报SMTP主机连接错误求助

排查PHPMailer连接SendGrid SMTP失败(SMTP Error: Could not connect to SMTP host)的问题

我来帮你一步步排查这个SendGrid SMTP连接失败的问题,这类问题通常是由认证、端口、网络配置或者扩展缺失导致的,我们逐个排查:

  • 检查SendGrid认证信息是否正确
    SendGrid的SMTP认证规则很明确:用户名固定为apikey,密码是你在SendGrid后台生成的API密钥,而不是自定义的用户名密码。你代码里的szdfsdfsdfsdfsdfsdf明显不符合这个规则,这大概率是核心问题。先去SendGrid后台生成一个具有邮件发送权限的API密钥,然后把代码里的认证部分改成:

    $mail->Username = "apikey";
    $mail->Password = "你的SendGrid API密钥";
    
  • 修正端口的类型与加密组合
    你当前用的SSL+465是合法组合,但有两个细节要注意:

    1. Port参数应该是整数类型,不要加引号,把$mail->Port = "465";改成$mail->Port = 465;
    2. 如果465端口被服务器防火墙拦截,可以尝试切换到TLS加密+587端口的组合,这是SendGrid推荐的备选方案:
      $mail->SMTPSecure = "tls";
      $mail->Port = 587;
      
  • 检查服务器网络与安全限制

    • 确认你的服务器出站端口(465/587)没有被防火墙或安全组封禁,联系主机商或者查看服务器防火墙规则,确保允许访问smtp.sendgrid.net的对应端口。
    • 如果是Linux服务器,检查SELINUX是否开启了限制,可以临时关闭SELINUX测试:setenforce 0,如果能正常连接,再配置SELINUX允许SMTP出站。
  • 开启PHPMailer调试模式获取详细日志
    给代码添加调试开关,能看到连接过程的详细交互,帮你精准定位问题:

    $mail->SMTPDebug = 2; // 2表示显示完整的SMTP交互日志,调试完成后改回0关闭
    

    调试日志会显示DNS解析、SSL握手、认证请求等每一步的状态,比如如果是SSL握手失败,就能直接看到对应的错误信息。

  • 确认PHP的openssl扩展已启用
    SSL/TLS连接依赖PHP的openssl扩展,创建一个phpinfo.php文件,内容为<?php phpinfo(); ?>,访问后搜索openssl,确认模块状态为enabled。如果没启用,需要在php.ini里开启extension=openssl(Windows)或extension=openssl.so(Linux),然后重启PHP服务。

  • 验证SendGrid账户状态
    确认你的SendGrid账户是否正常:新注册账户需要完成邮箱/手机号验证才能发送邮件;如果账户有违规记录,可能会被临时封禁,登录SendGrid后台查看账户状态是否正常。

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

火山引擎 最新活动