berndengels/laravel-email-exceptions

从您的laravel v5,v6,v7,v8,v9,v10应用中捕获邮件异常

1.0.9 2023-04-03 10:00 UTC

This package is auto-updated.

Last update: 2024-09-03 14:06:29 UTC


README

Coverage Status License

"Laravel Email Exceptions"包基于Aaron Brigham的Laravel 5.x包(https://github.com/abrigham1/laravel-email-exceptions),旨在为开发者提供一种简单的方法,在应用中抛出异常时将调试信息通过邮件发送给自己。默认提供的信息包括

  • 环境
  • 异常/错误远程URL
  • 异常/错误远程IP
  • 异常/错误请求数据转储
  • 如果用户已认证,则包括用户名和电子邮件
  • 浏览器UserAgent
  • 异常/错误类
  • 异常/错误信息
  • 异常/错误代码
  • 文件名和行号
  • 堆栈跟踪

目录

安装

您可以使用composer将此插件安装到您的laravel 8.x/9.x应用中。

运行以下命令

composer require berndengels/laravel-email-exceptions

然后在app/Exceptions/Handler.php中替换

use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler;

use Bengels\LaravelEmailExceptions\Exceptions\EmailHandler as ExceptionHandler;

配置

要发布配置文件、视图和测试,请运行以下命令

php artisan vendor:publish --provider="Bengels\LaravelEmailExceptions\EmailExceptionsServiceProvider"

这将为您在config/laravelEmailExceptions.php中创建一个配置文件,并在resources/views/vendor/laravelEmailExceptions/emailExceptions.blade.php中创建一个视图

默认配置

'ErrorEmail' => [
    'email' => true,
    'dontEmail' => [],
    'throttle' => false,
    'throttleCacheDriver' => env('CACHE_DRIVER', 'file'),
    'throttleDurationMinutes' => 5,
    'dontThrottle' => [],
    'globalThrottle' => true,
    'globalThrottleLimit' => 20,
    'globalThrottleDurationMinutes' => 30,
    'toEmailAddress'    => explode(',', env('EXCEPTION_TO_EMAIL_ADDRESS', null)) ?? null,
    'fromEmailAddress'  => env('EXCEPTION_FROM_EMAIL_ADDRESS', null),
    'emailSubject'      => env('EXCEPTION_EMAIL_SUBJECT', null)
]

请在您的.env文件中设置以下值

  • EXCEPTION_TO_EMAIL_ADDRESS (一个电子邮件地址或用逗号分隔的电子邮件地址列表)
  • EXCEPTION_FROM_EMAIL_ADDRESS (字符串)
  • EXCEPTION_EMAIL_SUBJECT (字符串)
  • email (布尔值) - 启用或禁用错误/异常的邮件发送
  • dontEmail (数组) - 它与laravel的$dontReport变量功能相同,如在此处记录:https://laravel.net.cn/docs/8.x/errors#the-exception-handler下的“通过类型忽略异常”。请记住,laravel的$dontReport下的任何异常也不会通过邮件发送
  • throttle (布尔值) - 启用或禁用异常邮件的限制速率。只有当通过检查缓存确定相同的异常/错误已经被通过邮件发送过时,才会进行限制速率。错误/异常通过异常类 + 异常信息 + 异常代码来确定是否唯一
  • throttleCacheDriver (字符串) - 用于限制速率的缓存驱动程序,默认使用.env文件中的CACHE_DRIVER
  • throttleDurationMinutes (整数) - 限制速率的持续时间(分钟),例如,如果您设置为5,并且BadMethodCallException触发了邮件,如果相同的异常再次抛出,它将不会发送邮件,直到5分钟过去
  • dontThrottle (数组) - 这与dontEmail相同,但提供您不希望限制速率的异常列表,即使已启用限制速率
  • globalThrottle (布尔值) - 启用或禁用全局限制此应用中所有异常类型的邮件数量
  • globalThrottleLimit (整数) - 在给定时间段内您想要接收的最大邮件数量
  • throttleDurationMinutes (整数) - 全局限制速率的持续时间(分钟),例如,如果您设置为30,并且globalThrottleLimit为10,当第一封邮件发送出去后,一个30分钟的计时器将开始,一旦达到10封邮件的阈值,在接下来的30分钟内将不再发送任何邮件。
  • toEmailAddress (字符串或数组) - 发送异常电子邮件的电子邮件地址,例如开发团队 dev@yoursite.com
  • fromEmailAddress (字符串) - 应该发送这些电子邮件的电子邮件地址,例如 noreply@yoursite.com
  • emailSubject (字符串) - 电子邮件的主题,留空则使用默认主题:在 APP_URL APP_ENV 上抛出了异常

注意:来自 app/Exceptions/Handler.php 文件中的 dontReport 变量也不会通过电子邮件发送,因为假设如果它们不足以记录,那么它们也不足以通过电子邮件发送。

重要:您必须填写 toEmailAddress 和 fromEmailAddress,否则您将不会收到电子邮件。

基本用法

基本配置

config/laravelEmailExceptions.php 中更新您的配置值

'ErrorEmail' => [
    'email' => true,
    'dontEmail' => [],
    'throttle' => true,
    'throttleCacheDriver' => env('CACHE_DRIVER', 'file'),
    'throttleDurationMinutes' => 5,
    'dontThrottle' => [],
    'globalThrottle' => true,
    'globalThrottleLimit' => 20,
    'globalThrottleDurationMinutes' => 30,
    'toEmailAddress' => explode(',', env('EXCEPTION_TO_EMAIL_ADDRESS', 'dev@yoursite.com')),
    'fromEmailAddress' => env('EXCEPTION_FROM_EMAIL_ADDRESS', 'noreply@yoursite.com'),
    'emailSubject' => env('EXCEPTION_EMAIL_SUBJECT', null),
]

限制速率

为了防止向开发团队发送垃圾邮件,已实施节流和全局节流。节流通过创建由异常类 + 异常消息 + 异常代码组成的唯一缓存键来工作。它的目的是防止重复异常通过电子邮件报告,从而给团队时间在它们再次报告之前修复它们。

全局限制速率

全局节流是一个类似的想法,但它被实施为防止在一定时间期限内发送超出一定数量的电子邮件。这通常仅适用于应用程序级别的故障,例如,网站的大部分区域都关闭了,因此来自各个方向的许多不同类型的异常都会传入。

高级用法

更改视图

如果您使用上述命令发布了视图,您将能够通过修改 resources/views/vendor/laravelEmailExceptions/emailException.blade.php 中的视图来更改异常电子邮件的外观

添加任意不发送邮件逻辑

如果您需要更复杂的逻辑,而不仅仅是检查 thrown exception 的 instanceof,那么有一个方便的钩子可以添加任意逻辑来决定是否应该通过电子邮件发送异常。

app/Exceptions/Handler.php 中实现 appSpecificDontEmail(Exception $exception) 函数,例如。

<?php
class Handler extends ExceptionHandler
{
    protected function appSpecificDontEmail(Exception $exception)
    {
        // add logic here to determine if exception should be emailed return true
        // if it should and return false if it should not
    }
}

注意事项

如果您在尝试使用此功能时遇到困难,首先请确保已正确配置应用程序以发送邮件。让邮件运行的最简单方法之一是注册一个免费的账户在 mailtrap.io。一旦完成,您将需要更新您的 .env 文件,使用以下值,用您的演示收件箱中列出的用户名和密码替换它们

MAIL_DRIVER=smtp
MAIL_HOST=smtp.mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=your-user-string
MAIL_PASSWORD=your-password-string
MAIL_ENCRYPTION=null

错误和反馈

http://github.com/berndengels/laravel8-email-exceptions/issues

许可证

版权所有 (c) 2017 Aaron Brigham, 2020 Bernd Engels

特此授予任何获得本软件及其相关文档文件(以下简称“软件”)副本的人免费使用软件的权利,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或出售软件副本,并允许提供软件的人这样做,前提是遵守以下条件

上述版权声明和本许可声明应包含在软件的所有副本或主要部分中。

软件按“现状”提供,不提供任何明示或暗示的保证,包括但不限于适销性、特定目的的适用性和非侵权性保证。在任何情况下,作者或版权所有者不对任何索赔、损害或其他责任负责,无论这些索赔、损害或其他责任是根据合同、侵权或其他方式产生的,是否与软件或其使用或其他交易有关。