benlehr/mail-campaign-tracker

记录和追踪所有来自Laravel发出的邮件

1.12 2022-07-05 11:57 UTC

This package is auto-updated.

Last update: 2024-09-05 16:27:17 UTC


README

Latest Version on Packagist Software License Total Downloads

本包是J David Baker的MailTracker Package的扩展。

使用Mail Campaign Tracker,您可以创建可追踪的邮件和活动。

MailTracker会连接到所有来自Laravel的可追踪邮件,并向其中注入一个追踪代码。

它还会将渲染后的邮件存储在数据库中。还有一个界面可以查看已发送的邮件。

安装

通过Composer

$ composer require benlehr/mail-campaign-tracker

发布配置文件和迁移

$ php artisan vendor:publish --provider="benlehr\MailTracker\MailTrackerServiceProvider"

运行迁移

$ php artisan migrate

注意:如果您想使用不同的连接来存储您的模型,您应该在运行迁移之前更新mail-tracker.php配置中的connection

如果您想使用自己的迁移,您可以通过调用MailTracker::ignoreMigrations()来跳过此库的迁移。例如

// In AppServiceProvider

public function boot()
{
    MailTracker::ignoreMigrations();
}

使用方法

安装后,您可以使用命令创建可追踪的邮件,这些邮件将被记录到数据库中。

在config/mail-tracker.php中提供了以下配置选项

  • name:设置您的应用程序名称。
  • inject-pixel:设置为true以向所有发出的HTML邮件注入追踪像素。
  • track-links:设置为true以将所有锚点href链接重写为包含追踪链接。该链接将带用户返回您的网站,然后在记录点击后将他们重定向到最后目的地。
  • expire-days:电子邮件应在数据库中保留的天数。如果您发送大量邮件,您可能希望它们最终过期。将其设置为零以从不从数据库中清除旧邮件。
  • route:追踪URL的路由信息。根据需要设置前缀和中间件。
  • admin-route:管理员的路由信息。设置前缀和中间件。
  • admin-template:管理员面板和视图的参数。您可以将现有的管理员面板与MailTracker管理员面板集成。
  • date-format:您可以在管理员面板中定义显示日期的格式。
  • content-max-size:您可以用默认最大长度限制覆盖数据库字段content。如果您需要将其变长,别忘了将其类型从text更新。

如果您想在活动中追踪电子邮件,那么您必须使用命令创建新的可追踪邮件

php artisan make:trackable-mail 'MailName'

在发送邮件时,您必须使用活动助手创建活动,该助手返回活动ID。该ID必须作为参数注入到电子邮件中。

use benlehr\mail-tracker\MailCampaignHelper;

// get the helper 
$helper = new MailCampaignHelper();
// create a campaign and get ID
$campaignId = $helper->createCampaign('name of campaign');

// fetch your users
$users = User::all();

foreach ($users as $user) {
    // send mail and inject campaign id
  Mail::to($user->email)->send(new TestMail($campaignId));
}

关于开发测试的说明

有几个人报告说在测试时追踪像素不起作用。追踪像素发生的事情是,电子邮件客户端正在连接到您的网站以记录查看。为了使此操作发生,图像必须在客户端可见,并且客户端必须能够连接到您的服务器。

当您处于开发环境(即使用 Valet 的 .test 域或仅您的电脑所知的其他域)时,您必须在您的电脑上安装电子邮件客户端。更复杂的是,Gmail 和一些其他基于网络的电子邮件客户端不会直接连接到图片,而是通过代理连接。该代理不会与您的 .test 域连接,因此无法正确跟踪电子邮件。我始终建议在发送电子邮件时使用 mailtrap.io,它不仅可以解决这个问题(mailtrap.io 不使用代理服务转发电子邮件中的图片),还可以防止您不小心从测试环境中发送真实电子邮件。

事件

当发送电子邮件、查看电子邮件或点击链接时,其跟踪信息会通过 benlehr\MailTracker\Model\SentEmail 模型在数据库中进行计数。这种处理是通过向队列中派遣作业来完成的,以防止在电子邮件大量发送的情况下数据库被压垮。您可以通过 mail-tracker.tracker-queue 配置设置来选择这些事件通过哪个队列派遣,或者将其留为 null 以使用默认队列。通过使用非默认队列,您可以将这些跟踪任务优先级低于应用程序关键任务。

您可能需要对这些事件进行额外的处理,因此在这些情况下会触发一个事件

  • benlehr\MailTracker\Events\EmailSentEvent
    • 公共属性 sent_email 包含 SentEmail 模型
  • benlehr\MailTracker\Events\ViewEmailEvent
    • 公共属性 sent_email 包含 SentEmail 模型
    • 公共属性 ip_address 包含触发事件的 IP 地址
  • benlehr\MailTracker\Events\LinkClickedEvent
    • 公共属性 sent_email 包含 SentEmail 模型
    • 公共属性 ip_address 包含触发事件的 IP 地址

要安装事件监听器,您需要创建一个如下所示的文件

<?php

namespace App\Listeners;

use benlehr\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
        // Access the IP address that triggered the event using $event->ip_address
    }
}
<?php

namespace App\Listeners;

use benlehr\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 = [
    'benlehr\MailTracker\Events\EmailSentEvent' => [
        'App\Listeners\EmailSent',
    ],
    'benlehr\MailTracker\Events\ViewEmailEvent' => [
        'App\Listeners\EmailViewed',
    ],
    'benlehr\MailTracker\Events\LinkClickedEvent' => [
        'App\Listeners\EmailLinkClicked',
    ],
    'benlehr\MailTracker\Events\EmailDeliveredEvent' => [
        'App\Listeners\EmailDelivered',
    ],
    'benlehr\MailTracker\Events\ComplaintMessageEvent' => [
        'App\Listeners\EmailComplaint',
    ],
    'benlehr\MailTracker\Events\PermanentBouncedMessageEvent' => [
        'App\Listeners\BouncedEmail',
    ],
];

异常

以下异常可能会抛出。您可以将它们添加到异常处理程序的忽略列表中,或按您的方式处理它们。

  • benlehr\MailTracker\Exceptions\BadUrlLink - URL 链接出现了问题。基本上,系统无法正确解析 URL 链接以发送重定向。

视图

当您运行 php artisan vendor:publish 命令时,简单的视图将添加到您的 resources/views/vendor/emailTrakingViews 中,您可以根据需要进行自定义。当然,您也可以从这些视图作为指南从头开始构建整个管理页面。

管理面板

MailTracker 随带内置的管理区域。包发布时默认配置将其放在 can:see-sent-emails 中间件后面;您可以为该规则创建一个网关或将其更改为使用您自己的中间件。您还可以更改默认前缀,甚至完全禁用管理路由。

路由名称是 'mailTracker_Index'。标准管理面板路由位于 /email-manager。您可以使用路由名称将其包含到现有的管理菜单中。您可以在配置文件中自定义路由。您可以看到所有已发送的电子邮件、总打开次数、总 URL 点击次数、显示单个电子邮件和显示点击的 URL 详情。

所有视图(电子邮件模板、面板)都可以在 resources/views/vendor/emailTrakingViews 中进行自定义。

贡献

有关详细信息,请参阅 CONTRIBUTINGCONDUCT

安全

如果您发现任何安全相关的问题,请通过电子邮件发送到 benlehr@trio-group.de,而不是使用问题跟踪器。

鸣谢

许可

MIT 许可证(MIT)。有关更多信息,请参阅 许可文件