vorakraft10 / laravel-mails
Laravel Mails可以收集您可能希望跟踪的所有关于您的Laravel应用程序已发送邮件的信息。
Requires
- php: ^8.1
- illuminate/contracts: ^10.8.0|^11.22.0
- laravel-notification-channels/discord: ^1.6
- laravel-notification-channels/telegram: ^4.0|5.0
- laravel/helpers: ^1.7.0
- laravel/slack-notification-channel: ^2.5|^3.3.2
- mailgun/mailgun-php: ^4.3
- spatie/laravel-package-tools: ^1.14.0
- wildbit/postmark-php: ^4.0
Requires (Dev)
- larastan/larastan: ^2.9.8
- laravel/pint: ^1.17.0
- nunomaduro/collision: ^7.5.0|^8.4
- orchestra/testbench: ^8.5.0|^9.4.0
- pestphp/pest: ^2.35.1
- pestphp/pest-plugin-laravel: ^2.4.0
- phpstan/extension-installer: ^1.4.2
- phpstan/phpstan-deprecation-rules: ^1.2.0
- phpstan/phpstan-phpunit: ^1.3.11
- phpunit/phpunit: ^10.5.17
This package is auto-updated.
Last update: 2024-09-27 14:25:16 UTC
README
很高兴见到你,我们是Vormkracht10
嗨!我们是荷兰尼姆根的一家网络开发公司,我们用Laravel做所有事情:功能丰富的先进网站和大型的网络应用程序。
为什么是这个包
电子邮件作为一种协议,非常容易出错。电子邮件成功送达并不能保证,因此最好实时监控您的电子邮件发送。使用外部服务(如Postmark或Mailgun)电子邮件通过提供日志记录和投递反馈等功能而变得更好,但仍需要您的关注,并且可能会默默地失败,后果严重。因此,我们创建了Laravel Mails来填补所有这些空缺。
使用Laravel,我们创建了包来缓解许多自己的痛点,因为我们遇到了客户和项目中的某些挑战。我们在13年的网络开发经验中遇到的一个问题是,客户联系我们就说他们的邮件没有送达。
有时这是因为代码中的错误,但很多时候是因为你事先想象不到的事情出了问题。如果它能失败,它就会失败。完全运用墨菲定律!电子邮件就是那种你不喜欢的事情。
由于我们厌倦了客户需要打电话给我们,我们希望在客户注意到之前就能知道并联系他们。因此,我们创建了这个包:记录我们发送的邮件发生的所有事件,并在有问题的迹象出现时自动通过Discord(或Slack、Telegram)通知。
功能
Laravel Mails可以收集您可能希望跟踪的所有关于您的Laravel应用程序已发送邮件的信息。此包中提供了常见的用例
- 仅使用特定属性记录所有已发送的电子邮件、附件和事件
- 目前适用于流行的电子邮件服务提供商Postmark和Mailgun
- 使用webhooks从电子邮件提供商收集关于投递状态的反馈
- 您可以将Laravel中发送的电子邮件直接关联到Eloquent模型,例如与Order模型关联的订单确认电子邮件
- 当电子邮件硬/软弹回或弹回率过高时,快速自动通知
- 定期修剪所有记录的电子邮件,以保持数据库整洁
- 将记录的电子邮件重新发送到另一个收件人
- 使用互补包Filament Mails在浏览器中查看所有已发送的电子邮件
即将推出的功能
我们目前正在编写对其他流行的电子邮件服务提供商(如Resend、SendGrid、Amazon SES和Mailtrap)的邮件事件支持。
寻找一个UI?我们为你准备好了:Filament Mails
我们创建了一个名为Filament Mails的Laravel Filament插件,以便轻松查看此Laravel Mails包收集的所有数据。
它可以在美观的UI中显示有关电子邮件和事件的全部信息
安装
首先使用composer安装包
composer require vormkracht10/laravel-mails
然后您可以使用以下命令发布和运行迁移
php artisan vendor:publish --tag="mails-migrations"
php artisan migrate
将您的电子邮件服务提供商的API密钥添加到Laravel项目中的config/services.php
文件中,目前我们支持Postmark和Mailgun
[
'mailgun' => [
'token' => '...',
],
'postmark' => [
'token' => '...',
]
]
完成后,使用您的服务提供商的slug运行此命令
php artisan mail:webhooks [service] // where [service] is your provider, e.g. postmark or mailgun
要更改配置,您可以使用以下命令发布配置文件
php artisan vendor:publish --tag="mails-config"
这是发布配置文件的内容
return [ // Eloquent model to use for sent emails 'models' => [ 'mail' => Mail::class, 'event' => MailEvent::class, 'attachment' => MailAttachment::class, ], // Table names for saving sent emails and polymorphic relations to database 'database' => [ 'tables' => [ 'mails' => 'mails', 'attachments' => 'mail_attachments', 'events' => 'mail_events', 'polymorph' => 'mailables', ], 'pruning' => [ 'enabled' => true, 'after' => 30, // days ], ], 'headers' => [ 'uuid' => 'X-Mails-UUID', 'associate' => 'X-Mails-Associated-Models', ], 'webhooks' => [ 'routes' => [ 'prefix' => 'webhooks/mails', ], 'queue' => env('MAILS_QUEUE_WEBHOOKS', false), ], // Logging mails 'logging' => [ // Enable logging of all sent mails to database 'enabled' => env('MAILS_LOGGING_ENABLED', true), // Specify attributes to log in database 'attributes' => [ 'subject', 'from', 'to', 'reply_to', 'cc', 'bcc', 'html', 'text', ], // Encrypt all attributes saved to database 'encrypted' => env('MAILS_ENCRYPTED', true), // Track following events using webhooks from email provider 'tracking' => [ 'bounces' => true, 'clicks' => true, 'complaints' => true, 'deliveries' => true, 'opens' => true, ], // Enable saving mail attachments to disk 'attachments' => [ 'enabled' => env('MAILS_LOGGING_ATTACHMENTS_ENABLED', true), 'disk' => env('FILESYSTEM_DISK', 'local'), 'root' => 'mails/attachments', ], ], // Notifications for important mail events 'notifications' => [ 'mail' => [ 'to' => ['test@example.com'], ], 'discord' => [ // 'to' => ['1234567890'], ], 'slack' => [ // 'to' => ['https://hooks.slack.com/services/...'], ], 'telegram' => [ // 'to' => ['1234567890'], ], ], 'events' => [ 'soft_bounced' => [ 'notify' => ['mail'], ], 'hard_bounced' => [ 'notify' => ['mail'], ], 'bouncerate' => [ 'notify' => [], 'retain' => 30, // days 'treshold' => 1, // % ], 'deliveryrate' => [ 'treshold' => 99, ], 'complained' => [ // ], 'unsent' => [ // ], ], ];
用法
日志记录
当您使用Laravel中的Mail
Facade或Mailable
发送电子邮件时,Laravel Mails会记录电子邮件发送和来自您的电子邮件服务提供商的所有事件。
将电子邮件与Eloquent模型关联
...
重新发送已记录的电子邮件
...
在诸如退订、高退订率或垃圾邮件投诉等重要事件上接收通知
...
修剪已记录的电子邮件
...
事件
根据邮件提供商,我们从电子邮件服务提供商的webhook发送这些传入事件。
\Vormkracht10\Mails\Events\MailAccepted::class, \Vormkracht10\Mails\Events\MailClicked::class, \Vormkracht10\Mails\Events\MailComplained::class, \Vormkracht10\Mails\Events\MailDelivered::class, \Vormkracht10\Mails\Events\MailEvent::class, \Vormkracht10\Mails\Events\MailEventLogged::class, \Vormkracht10\Mails\Events\MailHardBounced::class, \Vormkracht10\Mails\Events\MailOpened::class, \Vormkracht10\Mails\Events\MailResent::class, \Vormkracht10\Mails\Events\MailSoftBounced::class, \Vormkracht10\Mails\Events\MailUnsubscribed::class,
测试
composer test
变更日志
有关最近更改的更多信息,请参阅变更日志
贡献
有关详细信息,请参阅贡献指南
安全漏洞
请查看我们的安全策略以了解如何报告安全漏洞。
致谢
许可
MIT许可(MIT)。有关更多信息,请参阅许可文件