nikolaymurha / laravel-email-exceptions
从您的laravel应用程序发送的邮件异常
Requires
- php: >=7.4
- illuminate/support: ^6.0|^7.0|^8.0|^9.0|^10.0
- tijsverkoyen/css-to-inline-styles: ^2.2.6
Requires (Dev)
- composer/composer: ^1.9
- mockery/mockery: ^1.5.0
- orchestra/testbench: ^v5.20.0
- phpunit/phpunit: 9.*
- squizlabs/php_codesniffer: 2.*
Suggests
- laravel/framework: ^7.0
- laravel/lumen-framework: ^5.0
README
基于这个优秀的cakephp包(https://github.com/ebrigham1/cakephp-error-email)的Laravel 5邮件异常包,旨在为开发者提供一种简单的方法,在应用程序中抛出异常时将调试信息通过邮件发送给自己。默认提供的信息包括:
- 环境
- 异常/错误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](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,并且全局ThrottleLimit为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' => '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
特此授予任何人获取本软件及其相关文档文件(“软件”)副本的权利,免费处理该软件,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或出售软件副本,并允许向提供软件的个人提供这样做,前提是遵守以下条件
上述版权声明和本许可声明应包含在软件的所有副本或实质性部分中。
软件按“原样”提供,不提供任何明示或暗示的保证,包括但不限于适销性、适用于特定目的和无侵权性保证。在任何情况下,作者或版权所有者均不对任何索赔、损害或其他责任负责,无论此类索赔、损害或其他责任是基于合同、侵权或其他方式,无论是否与软件或其使用或其他方式有关。