jeylabs / mail-tracker
MailTracker将连接到Laravel的所有发出的邮件,并向其中注入跟踪代码。它还会将渲染的邮件存储在数据库中。还有一个界面可以查看已发送的邮件。
Requires
- php: ~5.5|~7.0
- aws/aws-php-sns-message-validator: ^1.1
- aws/aws-sdk-php-laravel: ~3.0
- guzzlehttp/guzzle: ^5.3.1|^6.2.1
- illuminate/support: ~5.1
- laravel/framework: >=5.3.23
README
MailTracker将连接到Laravel的所有发出的邮件,并向其中注入跟踪代码。它还会将渲染的邮件存储在数据库中。还有一个界面可以查看已发送的邮件。
注意:对于Laravel < 5.3.23
安装(Laravel)
通过Composer
$ composer require jeylabs/mail-tracker
将以下内容添加到config/app.php中的providers数组
Jeylabs\MailTracker\MailTrackerServiceProvider::class,
发布配置文件和迁移
$ php artisan vendor:publish
运行迁移
$ php artisan migrate
使用方法
安装后,所有发出的邮件将被记录到数据库中。以下是在config/mail-tracker.php中可用的配置选项:
- track-open:设置为true,将向所有发出的HTML邮件注入跟踪像素。
- track-click:设置为true,将重写所有锚点href链接,包括跟踪链接。链接将带用户返回您的网站,然后记录点击后将其重定向到最终目的地。
- expire-days:电子邮件在数据库中保留的天数。如果您发送大量邮件,可能希望最终将其过期。设置为零以永不从数据库中清除旧邮件。
- route:跟踪URL的路由信息。根据需要设置前缀和中介。
- date-format:您可以在管理面板中定义显示日期的格式。
事件
当发送电子邮件、查看电子邮件或点击链接时,其跟踪信息将使用Jeylabs\MailTracker\Model\SentEmail模型在数据库中计数。您可能想要对这些事件进行额外处理,因此在这些情况下会触发事件
- Jeylabs\MailTracker\Events\EmailSentEvent
- Jeylabs\MailTracker\Events\ViewEmailEvent
- Jeylabs\MailTracker\Events\LinkClickedEvent
如果您使用Amazon SNS通知系统,当收到永久退订时将触发事件。您可能想要标记电子邮件为无效或从数据库中删除。
- Jeylabs\MailTracker\Events\PermanentBouncedMessageEvent
要安装事件监听器,您需要创建一个类似以下文件
<?php namespace App\Listeners; use Jeylabs\MailTracker\Events\ViewEmailEvent; class EmailViewed { /** * Create the event listener. * * @return void */ public function __construct() { // } /** * Handle the event. * * @param ViewEmailEvent $event * @return void */ public function handle(ViewEmailEvent $event) { // Access the model using $event->sent_email... } }
<?php namespace App\Listeners; use Jeylabs\MailTracker\Events\PermanentBouncedMessageEvent; class BouncedEmail { /** * Create the event listener. * * @return void */ public function __construct() { // } /** * Handle the event. * * @param PermanentBouncedMessageEvent $event * @return void */ public function handle(PermanentBouncedMessageEvent $event) { // Access the email address using $event->email_address... } }
然后必须在您的\App\Providers\EventServiceProvider $listen数组中注册事件
/** * The event listener mappings for the application. * * @var array */ protected $listen = [ 'Jeylabs\MailTracker\Events\ViewEmailEvent' => [ 'App\Listeners\EmailViewed', ], 'Jeylabs\MailTracker\Events\PermanentBouncedMessageEvent' => [ 'App\Listeners\BouncedEmail', ], ];
向事件监听器传递数据
通常情况下,您可能需要将发送的电子邮件链接到其他模型。处理此问题的最佳方法是向发出的电子邮件添加一个标题,您可以在事件监听器中检索它。以下是一个示例
/** * Send an email and do processing on a model with the email */ \Mail::send('email.test', [], function ($message) use($email, $subject, $name, $model) { $message->from('info@jeylabs.com', 'From Name'); $message->sender('info@jeylabs.com', 'Sender Name'); $message->to($email, $name); $message->subject($subject); // Create a custom header that we can later retrieve $message->getHeaders()->addTextHeader('X-Model-ID',$model->id); });
然后在您的事件监听器中
public function handle(EmailSentEvent $event)
{
$tracker = $event->sent_email;
$model_id = $event->getHeader('X-Model-ID');
$model = Model::find($model_id);
// Perform your tracking/linking tasks on $model knowing the SentEmail object
}
请注意,您附加到电子邮件的标题实际上会随消息发出,因此不要存储任何您不希望向电子邮件收件人公开的数据。
Amazon SES功能
如果您使用Amazon SES,可以向跟踪添加一些附加信息。要设置SES回调,首先在SES控制面板中设置您域下的SES通知。然后通过转到通知主题的管理面板并为您从管理页面复制的URL创建订阅来订阅主题。系统应立即响应订阅请求。如果您愿意,可以使用多个订阅(即一个用于投递,一个用于退订)。有关在失败消息上触发的事件,请参阅上文。