jackmartin / laravel-email-exceptions
来自您的 Laravel 应用程序的 Email 异常
Requires
- php: ^5.6 || ^7.2 || ^8.0
- illuminate/support: ^5.5 || ^6.0 || ^7.0 || ^8.0
Requires (Dev)
- mockery/mockery: ^0.9.7
- orchestra/testbench: ~3.0
- phpunit/phpunit: ^8.0
- squizlabs/php_codesniffer: 2.*
README
基于此优秀的 cakephp 包(https://github.com/ebrigham1/cakephp-error-email),Laravel 5 邮件异常包旨在为开发者提供一个简单的方法,当应用程序抛出异常时,可以将调试信息通过电子邮件发送给自己。默认提供的信息包括
- 环境
- 异常/错误 URL
- 异常/错误类
- 异常/错误消息
- 异常/错误代码
- 文件和行号
- 堆栈跟踪
目录
安装
您可以使用 composer 将此插件安装到您的 Laravel 5.x 应用程序中。
运行以下命令
composer require jackmartin/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, 'useSystemEmail' => true, 'dontEmail' => [], 'throttle' => false, 'throttleCacheDriver' => env('CACHE_DRIVER', 'file'), 'throttleDurationMinutes' => 5, 'dontThrottle' => [], 'globalThrottle' => true, 'globalThrottleLimit' => 20, 'globalThrottleDurationMinutes' => 30, 'toEmailAddress' => null, 'fromEmailAddress' => null, 'fromName' => null, 'emailSubject' => null ]
- email (bool) - 启用或禁用错误/异常的电子邮件发送
- useSystemEmail (bool) - 启用或禁用系统电子邮件的使用。如果禁用,则配置 EmailReports 块
- 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,当发送第一封电子邮件时,一旦达到10封电子邮件的阈值,就会开始一个30分钟的计时器,在此30分钟内不再发送任何电子邮件。
- toEmailAddress (string|array) - 发送异常电子邮件的电子邮件地址(例如开发团队)dev@yoursite.com
- fromEmailAddress (string) - 应从该电子邮件地址发送电子邮件,例如 noreply@yoursite.com。
- fromName (string) - 发送者姓名
- emailSubject (string) - 电子邮件的主题,留空则使用默认主题:APP_URL APP_ENV 上抛出了异常
注意:来自 app/Exceptions/Handler.php 文件的 dontReport 变量也不会通过电子邮件发送,因为这假定如果它们不够重要以记录日志,那么它们也不够重要以通过电子邮件发送。
重要:您必须填写 toEmailAddress 和 fromEmailAddress,否则您将不会收到电子邮件。
基本用法
基本配置
在 config/laravelEmailExceptions.php 中更新您的配置值
'ErrorEmail' => [ 'email' => true, 'useSystemEmail' => 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', 'fromName' => 'Reports', 'emailSubject' => null, ]
EmailReports
'EmailReports' => [ 'host' => 'smtp.mailtrap.io', 'port' => 2525, 'username' => '', 'password' => '', 'encryption' => 'tls', ]
限制
节流和全局节流都是为了防止向开发团队发送垃圾邮件而设置的。节流通过创建一个唯一的缓存键来实现,该键由异常类 + 异常消息 + 异常代码组成。其目的是防止通过电子邮件报告重复的异常,从而给团队时间修复它们,然后再报告。
全局限制
全局节流是一个类似的想法,但它被设置以防止在一定时间内发送超过一定数量的电子邮件。这通常仅在应用程序全局失败时才需要,例如,网站的大部分内容都下线了,所以从各个方向来了很多不同类型的异常。
高级用法
更改视图
如果您使用上述命令发布了视图,您将能够通过修改 resources/views/vendor/laravelEmailExceptions/emailException.blade.php 中的视图来更改异常电子邮件的外观。
添加任意不发送电子邮件逻辑
如果您需要更复杂的逻辑,而不仅仅是检查 thrown 异常的 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-2018 Aaron Brigham, Evgen Kytonin
特此授予任何人免费获得此软件及其相关文档文件(“软件”)副本的权利,无限制地处理软件,包括但不限于使用、复制、修改、合并、发布、分发、许可和/或出售软件副本,并允许获得软件的人这样做,但须遵守以下条件
上述版权声明和本许可声明应包含在软件的所有副本或主要部分中。
软件按“原样”提供,不提供任何明示或暗示的保证,包括但不限于适销性、特定目的适用性和非侵权性保证。在任何情况下,作者或版权所有者均不对任何索赔、损害或其他责任负责,无论这些责任是根据合同、侵权或其他方式产生的,与软件或其使用或其他交易有关。