jeylabs/mail-tracker

MailTracker将连接到Laravel的所有发出的邮件,并向其中注入跟踪代码。它还会将渲染的邮件存储在数据库中。还有一个界面可以查看已发送的邮件。

1.0.9 2017-09-07 05:40 UTC

This package is auto-updated.

Last update: 2024-08-29 03:52:55 UTC


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创建订阅来订阅主题。系统应立即响应订阅请求。如果您愿意,可以使用多个订阅(即一个用于投递,一个用于退订)。有关在失败消息上触发的事件,请参阅上文。