niclas-van-eyk/laravel-mail-in-the-middle

将邮件发送到文件系统/数据库,并在浏览器中预览

v0.5.1 2020-09-02 10:35 UTC

This package is auto-updated.

Last update: 2024-09-21 22:57:42 UTC


README

像使用Mailtrap等服务一样预览应用程序发送的邮件。您还可以查看Mailable的模板源和视图数据

Build Status Total Downloads Latest Stable Version License

如果您使用Mail::send(new MyMailable())发送邮件,邮件将存储在您的数据库或文件系统中。然后您可以访问localhost:8000/mails(或您的APP_URL设置为的任何内容),以查看系统发送的最新邮件。UI显示了元数据,如主题、发件人、收件人、抄送、密送,以及Laravel特定的信息,如邮件模板的源提供给模板的数据

设置

安装

通过Composer要求库

composer require niclas-van-eyk/laravel-mail-in-the-middle --dev

将以下条目添加到您的config/mail.php中的mailers数组

如果您在config/mail.php中没有看到'mailers'部分,请展开此部分
这可能是您正在使用低于*必需* 7.2的Laravel版本,或者您是使用较旧的配置方案启动的项目,然后从那里更新了Laravel。对于后者,只需将您的'MAIL_DRIVER'环境变量设置为mail-in-the-middle即可。
// ...

'mailers' => [
    // the standard mailers, the one before this is usually 'array'...
    
    // This entry needs to be added
    'mail-in-the-middle' => [
        'transport' => 'mail-in-the-middle',
    ],
],

// rest of the configuration...

在您的.env文件中添加/替换以下部分

MAIL_MAILER=mail-in-the-middle

如果您通过默认的Mailer(例如Mail::to('recipient@company.org')->send(new MyMailable()))发送Mailable,它们现在将显示在UI中。如果APP_DEBUG设置为true,则UI可用。否则,可以通过设置MAIL_IN_THE_MIDDLE_ENABLED环境变量或手动配置config/mail-in-the-middle.php文件的'register_routes'-值来启用/禁用。

警告:使用其他Mailer发送的任何邮件,例如,如果您明确指定使用Mail::mailer('mailgun')->send(new MyMailable())通过Mailgun发送Mailable,将直接发送给收件人。官方文档提供了更多信息。

配置

目前,该软件包提供了两种存储邮件的选项

  • filesystem驱动程序(默认)将邮件存储在磁盘上
  • database驱动程序将它们保存到数据库表

选择filesystem驱动程序作为默认存储选项,因为它只需安装即可。如果没有设置disk,将在storage/app/mail-in-the-middle下的本地文件夹中创建并使用。

如果您的应用程序发送了大量的邮件,您绝对应该考虑使用database驱动程序!您可以通过设置环境变量MAIL_IN_THE_MIDDLE_STORAGE_DRIVERconfig/mail-in-the-middle.php中的选项之一来配置驱动程序。如果您使用的是database驱动程序,必要的迁移将自动加载,只需确保在发送第一封邮件之前调用php artisan migrate即可。

对于所有配置选项,例如您可以通过哪个路径访问ui,请参阅mail-in-the-middle.php配置,它可以发布并调整到您的config/目录。

日常维护

由于您更有可能对最近发送的邮件感兴趣,例如,随着系统存储的邮件越来越多,filesystem驱动程序会越来越慢,建议您定期删除旧邮件。

这可以通过使用红色删除按钮在UI中完成,或者通过安排一个定期运行的命令来清理经过一定年龄的邮件。如果您已经通过添加以下内容到您的App\Console\Kernel::schedule方法来设置调度,这可以相当容易地完成

class Kernel extends ConsoleKernel
{
    // ...
    protected function schedule(Schedule $schedule)
    {
        $schedule
            ->command("mitm:clear-mails-older-than 'last week'")
            ->daily();
    }
    // ...

或者,您可以通过在选择的shell中执行php artisan mitm:clear-mails-older-than 'one week'来手动运行该命令。

更多截图

源码

"Source" Tab

在这个标签页中,您可以查看您的.blade.php视图或markdown模板的内容。如果您有关于如何添加语法高亮的好主意,请发给我消息,因为我没有找到highlightjs或prism(我的最后一个想法是尝试使用monaco编辑器和blade语言扩展)的版本)。

查看数据

"View Data" Tab

此标签页显示用于渲染电子邮件html的数据,作为var_dump。如果对象不是整数或字符串这样的标量值,您可以通过旁边的黑色箭头折叠/打开它们来检查其属性。

范围、功能添加和贡献

这个包最初的使用案例是为了提供一个项目经理或测试人员能够轻松检查应用程序发送的邮件,而无需将邮件发送给潜在用户的风险。此外,邮件永远不会离开您的系统。

所以如果您从csv文件导入用户并发送初始密码,您可以在开发或qa系统上安全地运行导入器,而不会意外地向真实用户发送邮件。

由于这个用例已经得到满足,因此在未来不太可能添加更多高级功能,如高级搜索能力、多个收件箱或其他形式的访问控制。话虽如此,如果您想贡献这样的功能,我对任何PR都持开放态度,但建议您首先提交问题,描述您建议的功能添加以获取一些反馈。

已知问题

如果您在Windows上将"minimum-stability"设置为"lowest",则此包似乎无法正确工作。由于我目前没有访问Windows机器,我无法在本地重现此问题。