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

Laravel 5.5通过Mailgun发送邮件时如何捕获错误?

好问题!在Laravel 5.5里,要捕获Mailgun的发送错误,你得借助异常处理机制——因为当Mailgun API返回错误时,Laravel底层依赖的SwiftMailer会抛出对应的异常。下面是具体的实现方案,直接把你的代码改造一下就行:

try {
    Mail::send('emails.sendmessage', $data, function($message) use ($data) { 
        $message->to($data['email']); 
        $message->from('me@example.com', 'User'); // 注意你原代码里邮箱多写了一个.com,这里帮你修正了
        $message->subject('Sample Email'); 
    }); 

    return response()->json([ 
        'error' => false, 
        'status_code' => 200, 
        'response' => 'success', 
    ]);
} catch (\Swift_TransportException $e) {
    // 专门捕获Mailgun相关的传输错误(比如API密钥无效、收件人地址非法、配额不足等)
    $errorDetails = $e->getMessage();
    
    // 可选:把错误日志记录到Laravel日志文件里,方便后续排查
    \Log::error('Mailgun邮件发送失败:' . $errorDetails);

    return response()->json([
        'error' => true,
        'status_code' => 500,
        'response' => '邮件发送失败',
        'details' => $errorDetails // 开发环境可以返回细节,生产环境建议隐藏该字段,只给用户友好提示
    ], 500);
} catch (\Exception $e) {
    // 兜底捕获其他非Mailgun相关的错误(比如视图文件不存在、$data字段缺失等)
    \Log::error('邮件发送流程出现未知错误:' . $e->getMessage());
    
    return response()->json([
        'error' => true,
        'status_code' => 500,
        'response' => '发送失败,请稍后重试'
    ], 500);
}

关键说明:

  • Swift_TransportException是Mailgun发送失败时最常抛出的异常,它会包含Mailgun API返回的具体错误描述(比如550 Invalid recipient)。
  • 用Log::error()记录错误是好习惯,后续可以在storage/logs/laravel.log里查看详细报错信息,方便定位问题。
  • 生产环境中,建议不要把details字段返回给前端,避免暴露敏感的服务器或API信息,只保留友好的提示文案即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:09:36