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

