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

Laravel 10向Mailtrap.io发邮件通知时执行超时求助

Laravel 10 发送Mailtrap邮件超时问题解决方法

1. 验证配置正确性

  • 确认.env中的MAIL_USERNAME和MAIL_PASSWORD是Mailtrap收件箱页面提供的SMTP凭证,而非你的Mailtrap账号密码
  • 端口与加密方式需严格对应:
    • 2525 → tls
    • 465 → ssl
    • 587 → tls
  • 执行命令清除配置缓存,确保新配置生效:
    php artisan config:clear
    

2. 排查网络连接

  • 测试服务器/本地能否连接Mailtrap的SMTP服务器,执行:
    telnet sandbox.smtp.mailtrap.io 2525
    
    如果连接失败,检查防火墙是否拦截了对应端口的出站请求,本地开发可临时关闭防火墙测试

3. 检查通知类实现

  • 确保WelcomeNotification类的via()方法正确返回邮件驱动:
    public function via($notifiable)
    {
        return ['mail'];
    }
    
  • 确认toMail()方法生成的邮件对象格式正确,示例:
    public function toMail($notifiable)
    {
        return (new \Illuminate\Notifications\Messages\MailMessage)
            ->subject('欢迎加入')
            ->line('感谢注册我们的平台')
            ->action('访问平台', url('/'));
    }
    

4. 临时调整执行时间(仅测试用)

  • 在控制器方法开头添加临时超时设置,排查是否是连接过慢导致:
    public function index(){
        set_time_limit(120);
        $user = User::find(1);
        Notification::send($user, new WelcomeNotification);
        return view('welcome');
    }
    
    注意:这只是临时测试手段,核心还是要解决连接问题

5. 备选:使用Mailtrap API发送

如果SMTP方式始终无法连接,可改用Mailtrap API:

  • 安装官方包:
    composer require mailtrap/mailtrap-php
    
  • 在通知类中自定义发送逻辑,示例:
    use Mailtrap\MailtrapClient;
    use Mailtrap\Message\Message;
    use Mailtrap\Message\Sender;
    use Mailtrap\Message\Recipient;
    
    public function toMail($notifiable)
    {
        $client = new MailtrapClient('YOUR_MAILTRAP_API_TOKEN');
        $message = Message::create()
            ->setFrom(new Sender('hello@example.com', env('APP_NAME')))
            ->addTo(new Recipient($notifiable->email))
            ->setSubject('欢迎通知')
            ->setText('欢迎加入我们的平台');
    
        $client->send($message);
    }
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 11:52:12