abrigham / laravel-email-exceptions
您的 Laravel 应用程序中的 Email 异常
Requires
- php: ^7.2|^8.0
- illuminate/support: ^6.0|^7.0|^8.0
Requires (Dev)
- mockery/mockery: ~1.0
- orchestra/testbench: ~3.0
- phpunit/phpunit: 5.*
- squizlabs/php_codesniffer: 2.*
README
Laravel 5 邮件异常包,基于这个优秀的 cakephp 包(https://github.com/ebrigham1/cakephp-error-email),旨在为开发者提供一个简单的方式来在应用程序抛出异常时将调试信息发送给自己。默认提供的信息包括
- 环境
- 异常/错误 URL
- 异常/错误类
- 异常/错误信息
- 异常/错误代码
- 文件和行号
- 堆栈跟踪
目录
安装
您可以使用 composer 将此插件安装到您的 laravel 5.x 应用程序中。
运行以下命令
composer require abrigham/laravel-email-exceptions
更新 composer 后,将服务提供者添加到 config/app.php 中的 providers 数组中
如果您使用的是 laravel >= 5.5,则可以跳过将提供者添加到 config/app.php,因为它将被自动发现
Abrigham\LaravelEmailExceptions\EmailExceptionsServiceProvider::class,
然后在 app/Exceptions/Handler.php 中替换
use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler;
与
use Abrigham\LaravelEmailExceptions\Exceptions\EmailHandler as ExceptionHandler;
配置
要发布配置文件和视图,请运行以下命令
php artisan vendor:publish --provider="Abrigham\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' => null, 'fromEmailAddress' => null, 'emailSubject' => null ]
- email (bool) - 启用或禁用错误/异常的电子邮件发送
- dontEmail (array) - 这与 Laravel 的 $dontReport 变量完全相同,如在此处文档所述:https://laravel.net.cn/docs/5.4/errors#the-exception-handler 下的“通过类型忽略异常”。请注意,Laravel 的 $dontReport 下的任何异常也将不会通过电子邮件发送
- throttle (bool) - 启用或禁用异常电子邮件的节流。只有在检查缓存后确定确切的相同异常/错误已被通过电子邮件发送时,才会执行节流。错误/异常通过异常类 + 异常消息 + 异常代码来确定是否唯一
- throttleCacheDriver (string) - 用于节流的缓存驱动程序,默认使用您的 env 文件中的 CACHE_DRIVER
- throttleDurationMinutes (int) - 节流的持续时间(分钟),例如,如果您设置为 5,并且 BadMethodCallException 触发电子邮件,如果相同的异常再次抛出,则它将在 5 分钟后才会再次通过电子邮件发送
- dontThrottle (array) - 这与 dontEmail 相同,但提供一个您不希望节流(即使启用了节流)的异常列表
- globalThrottle (bool) - 启用或禁用全局限制此应用程序接收所有异常类型电子邮件的数量
- globalThrottleLimit (int) - 指定时间段内希望接收的最大电子邮件数量。
- throttleDurationMinutes (int) - 全局限制的持续时间(分钟),例如,如果您设置为30,并且全局限制为10,则在发送第一封电子邮件后,将启动一个30分钟的定时器。当达到10封电子邮件的限制时,该时间段内将不再发送更多电子邮件。
- toEmailAddress (string|array) - 接收异常电子邮件的电子邮件地址,例如开发团队 dev@yoursite.com
- fromEmailAddress (string) - 发送电子邮件时应使用的电子邮件地址,例如 noreply@yoursite.com。
- emailSubject (string) - 电子邮件的主题,留空则使用默认主题:在 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' => 'dev@yoursite.com', 'fromEmailAddress' => 'noreply@yoursite.com', 'emailSubject' => 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/abrigham1/laravel-email-exceptions/issues
许可
版权所有(c)2017 Aaron Brigham
以下条件下,任何人获得此软件及其相关文档文件的副本(“软件”),均可免费处理软件,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或出售软件副本,并允许软件的受供人这样做,但须遵守以下条件
上述版权声明和本许可声明应包含在软件的所有副本或实质性部分中。
软件按“原样”提供,不提供任何形式的保证,无论是明示的还是暗示的,包括但不限于适销性、针对特定目的的适用性和非侵权性。在任何情况下,作者或版权所有者均不对任何索赔、损害或其他责任负责,无论是由合同行为、侵权行为或其他行为引起的,与软件或软件的使用或其他处置有关。