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

如何解决Laravel+XAMPP环境下Gmail SMTP服务器连接失败报错问题

修复步骤

1. 修正端口与加密协议不匹配的配置错误

Gmail SMTP的标准端口规则为:

  • SSL加密对应端口465
  • TLS加密对应端口587
    你当前所有配置中均使用25端口+SSL加密的错误组合,25为未加密SMTP端口,绝大多数运营商都会封禁该端口,Gmail也早已不支持25端口对外连接,需要统一修改所有配置:
  • .env文件:将MAIL_PORT=25修改为MAIL_PORT=465
  • php.ini文件:将smtp_port=25修改为smtp_port=465
  • sendmail.ini文件:将smtp_port=25修改为smtp_port=465,同时修正拼写错误auth_username=mygamil@gmail.com为正确的Gmail地址。

2. 修正发信逻辑,匹配Laravel邮件系统

你配置的mail.php、.env中的SMTP参数仅对Laravel自带的Mail组件生效,当前自定义函数使用PHP原生mail()发信,只会读取php.ini配置,且原生函数兼容性差,更容易出现连接失败问题,推荐直接改用Laravel自带邮件组件发送:

  1. 先在.env中补全发件人配置:
MAIL_FROM_ADDRESS=mygmail@gmail.com
MAIL_FROM_NAME=你的网站名称
  1. 修改send_email函数逻辑:
use App\General;
use Illuminate\Support\Facades\Mail;

function send_email($to, $subject, $name, $message){
    $general = General::first();
        
    if ($general->email_nfy == 1){
        $template = $general->emessage;
        $mm = str_replace("{{name}}",$name,$template);
        $mailContent = str_replace("{{message}}",$message,$mm);
        
        Mail::raw($mailContent, function ($msg) use ($to, $subject, $general) {
            $msg->to($to)
                ->subject($subject)
                ->from($general->esender, $general->web_title)
                ->replyTo($general->esender, $general->web_title)
                ->setContentType('text/html');
        });
    }
}

如果必须使用原生mail()函数,需要在调用前手动指定配置,避免php.ini配置不生效:

ini_set('SMTP', 'smtp.gmail.com');
ini_set('smtp_port', 465);
ini_set('sendmail_from', 'mygmail@gmail.com');
// 后续再调用mail()函数

3. 额外检查项

  • 执行php artisan config:clear清空Laravel配置缓存,确保修改后的参数生效
  • 测试端口连通性:在服务器/本地命令行执行telnet smtp.gmail.com 465,如果连接失败先检查防火墙、运营商端口限制,本地开发可暂时关闭防火墙测试
  • 确认使用的Gmail应用密码为开启两步验证后专门生成的应用密码,不是账号登录密码

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 02:09:01