搜索
首页后端开发php教程Laravel 5.3中的邮件记录:扩展邮件驱动程序

Laravel 5.3邮件发送扩展:自定义数据库邮件日志

Laravel 5.3 提供了一种简单的方法来配置和通过多种流行服务发送电子邮件,并包含一个用于开发的日志辅助程序。然而,它并不涵盖所有可用的服务,因此可能需要扩展现有的邮件驱动程序系统。

关键要点:

  • Laravel 5.3 提供了通过多种流行服务轻松配置和发送电子邮件的简便方法,并包含用于开发的日志辅助程序。但是,它并不涵盖所有可用的服务,因此可能需要扩展现有的邮件驱动程序系统。
  • 要扩展邮件驱动程序系统,可以使用 artisan 命令行助手创建一个新的服务提供程序。此服务提供程序在启动时与应用程序交互并注册服务。
  • 新的服务提供程序可以扩展现有的 IlluminateMailMailServiceProvider,允许 register 方法已被实现。这允许创建新的传输管理器,该管理器可以将 Swift mailer 实例绑定到容器。
  • 扩展的邮件驱动程序系统可用于将电子邮件记录到数据库表中以进行调试。这是通过为数据库表创建一个新的迁移和一个新的模型来与表交互来实现的。然后将提供程序添加到 config/app.php 文件中的提供程序列表中,并将邮件驱动程序注册到 config/mail.php 文件中的 db 中。

Mail Logging in Laravel 5.3: Extending the Mail Driver

Laravel 提供了许多实用功能,其中包括邮件发送功能。您可以轻松配置并通过多种流行服务发送电子邮件,它甚至包含用于开发的日志辅助程序。

Mail::send('emails.welcome', ['user' => $user], function ($m) use ($user) {
    $m->to($user->email, $user->name)->subject('Welcome to the website');
});

这将使用 emails.welcome 视图向网站上的新注册用户发送电子邮件。使用 Laravel 5.3 中的 Mailable,它变得更加简单(但旧语法仍然有效)。

Mail Logging in Laravel 5.3: Extending the Mail Driver

以下是一个示例:

# 生成一个新的可邮件类
php artisan make:mail WelcomeMail
// app/Mail/WelcomeMail.php

class WelcomeUser extends Mailable
{
    use Queueable, SerializesModels;

    public $user;

    public function __construct(User $user)
    {
        $this->user = $user;
    }

    public function build()
    {
        return $this->view('emails.welcome');
    }
}
// routes/web.php

Route::get('/', function () {
    $user = User::find(2);

    \Mail::to($user->email)->send(new WelcomeUser($user));

    return "done";
});

Laravel 还提供了一个良好的起点,用于在开发阶段使用日志驱动程序发送邮件,在生产阶段使用 smtp、sparkpost、mailgun 等。在大多数情况下,这似乎很好,但它无法涵盖所有可用的服务!在本教程中,我们将学习如何扩展现有的邮件驱动程序系统以添加我们自己的驱动程序。

为了使我们的示例简单明了,我们将邮件日志记录到数据库表中。

创建服务提供程序

实现此目的的首选方法是创建一个服务提供程序,以便在启动时与我们的应用程序交互并注册我们的服务。让我们首先使用 artisan 命令行助手生成一个新的服务提供程序。

Mail::send('emails.welcome', ['user' => $user], function ($m) use ($user) {
    $m->to($user->email, $user->name)->subject('Welcome to the website');
});

这将在我们的 app/Providers 文件夹中创建一个新的类。如果您熟悉 Laravel 服务提供程序,您将知道我们扩展了 ServiceProvider 类并定义了 bootregister 方法。您可以在文档中阅读更多关于提供程序的信息。

使用邮件提供程序

与其使用父服务提供程序类,我们可以采取捷径并扩展现有的 IlluminateMailMailServiceProvider。这意味着 register 方法已实现。

# 生成一个新的可邮件类
php artisan make:mail WelcomeMail

registerSwiftMailer 方法将根据 mail.driver 配置值返回相应的传输驱动程序。我们在这里可以做的是在调用 registerSwiftMailer 父方法之前执行检查并返回我们自己的 传输管理器

// app/Mail/WelcomeMail.php

class WelcomeUser extends Mailable
{
    use Queueable, SerializesModels;

    public $user;

    public function __construct(User $user)
    {
        $this->user = $user;
    }

    public function build()
    {
        return $this->view('emails.welcome');
    }
}

使用传输管理器

Laravel 从 IOC 解析 swift.mailer 实例,它应该返回 Swift_Mailer 的 SwiftMailer 实例。我们需要将我们的 Swift mailer 实例绑定到容器。

// routes/web.php

Route::get('/', function () {
    $user = User::find(2);

    \Mail::to($user->email)->send(new WelcomeUser($user));

    return "done";
});

您可以将传输对象视为实际的驱动程序。如果您检查 IlluminateMailTransport 命名空间,您会发现每个驱动程序的不同传输类(例如:LogTransportSparkPostTransport 等)。

Swift_Mailer 类需要一个 Swift_Transport 实例,我们可以通过扩展 IlluminateMailTransportTransport 类来满足它。它应该看起来像这样。

php artisan make:provider DBMailProvider

我们应该在这里实现的唯一方法是 send 方法。它负责邮件发送逻辑,在这种情况下,它应该将我们的电子邮件记录到数据库中。至于我们的构造函数,我们目前可以将其留空,因为我们不需要任何外部依赖项。

$message->getTo() 方法始终返回收件人电子邮件和名称的关联数组。我们使用 array_keys 函数获取电子邮件列表,然后将它们合并以获取字符串。

将电子邮件记录到数据库

下一步是为我们的数据库表创建必要的迁移。

// vendor/Illuminate/Mail/MailServiceProvider.php

public function register()
{
    $this->registerSwiftMailer();

    // ...
}
// app/Providers/DBMailProvider.php

function registerSwiftMailer()
{
    if ($this->app['config']['mail.driver'] == 'db') {
        $this->registerDBSwiftMailer();
    } else {
        parent::registerSwiftMailer();
    }
}

我们的迁移只包含电子邮件正文、主题和收件人电子邮件,但您可以根据需要添加更多详细信息。检查 Swift_Mime_Message 类定义以查看可用字段的列表。

现在,我们需要创建一个新的模型来与我们的表交互,并将必要的字段添加到 fillable 数组中。

Mail::send('emails.welcome', ['user' => $user], function ($m) use ($user) {
    $m->to($user->email, $user->name)->subject('Welcome to the website');
});
# 生成一个新的可邮件类
php artisan make:mail WelcomeMail

发送电子邮件

好的,现在是时候测试我们到目前为止所取得的成果了。我们首先将我们的提供程序添加到 config/app.php 文件中的提供程序列表中。

// app/Mail/WelcomeMail.php

class WelcomeUser extends Mailable
{
    use Queueable, SerializesModels;

    public $user;

    public function __construct(User $user)
    {
        $this->user = $user;
    }

    public function build()
    {
        return $this->view('emails.welcome');
    }
}

然后我们将邮件驱动程序注册到 config/mail.php 文件中的 db 中。

// routes/web.php

Route::get('/', function () {
    $user = User::find(2);

    \Mail::to($user->email)->send(new WelcomeUser($user));

    return "done";
});

唯一剩下的部分是发送测试电子邮件并检查它是否被记录到数据库中。我将在访问主页 URL 时发送电子邮件。以下是代码。

php artisan make:provider DBMailProvider

访问主页路由后,我们可以运行 php artisan tinker 命令来检查 emails 表记录。

Mail Logging in Laravel 5.3: Extending the Mail Driver

结论

在本文中,我们看到了如何扩展邮件驱动程序系统以拦截电子邮件以进行调试。我在 Laravel 中欣赏的一件事是其无与伦比的可扩展性:您可以更改或扩展从路由器和 IOC 到邮件及其他几乎所有功能。

如果您有任何问题或意见,请务必在下面发表,我会尽力回答!

关于 Laravel 5.3 中邮件日志记录的常见问题解答 (FAQ)

如何扩展 Laravel 5.3 中的邮件驱动程序?

扩展 Laravel 5.3 中的邮件驱动程序涉及创建新的服务提供程序。此服务提供程序将扩展现有的邮件驱动程序,并允许您添加其他功能。您可以使用 php artisan make:provider 命令创建新的服务提供程序。创建提供程序后,您可以将其注册到 config/app.php 文件中。在提供程序中,您可以使用 extend 方法将自定义功能添加到邮件驱动程序。

Laravel 中邮件日志记录的目的是什么?

Laravel 中的邮件日志记录是一个允许您跟踪应用程序发送的所有传出电子邮件的功能。这对于调试非常有用,因为它允许您准确查看正在发送哪些电子邮件、何时发送以及发送给谁。它也对审计非常有用,因为它提供了应用程序发送的所有电子邮件通信的记录。

如何配置 Laravel 以记录所有传出电子邮件?

要配置 Laravel 以记录所有传出电子邮件,您需要修改 config/mail.php 文件。在此文件中,您可以将 log 选项设置为 true。这将指示 Laravel 记录所有传出电子邮件。日志将存储在 storage/logs 目录中。

如何查看 Laravel 中的邮件日志?

Laravel 中的邮件日志存储在 storage/logs 目录中。您可以通过导航到此目录并打开日志文件来查看这些日志。日志文件根据日期命名,因此您可以轻松找到特定日期的日志。

我可以自定义 Laravel 中邮件日志的格式吗?

是的,您可以自定义 Laravel 中邮件日志的格式。这可以通过扩展邮件驱动程序并覆盖 log 方法来完成。在此方法中,您可以指定日志消息的格式。

(其余FAQ与邮件发送本身相关,与本例的邮件日志扩展无关,故省略)

请注意,图片路径 /uploads/20250210/173915090467a9563807841.webp/uploads/20250210/173915090467a9563839bfc.webp 以及 /uploads/20250210/173915090667a9563a27b41.jpg 需要替换为实际可访问的图片链接。

以上是Laravel 5.3中的邮件记录:扩展邮件驱动程序的详细内容。更多信息请关注PHP中文网其他相关文章!

声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
优化PHP代码:减少内存使用和执行时间优化PHP代码:减少内存使用和执行时间May 10, 2025 am 12:04 AM

TOOPTIMIZEPHPCODEFORDUSEMEMORYUSAGEAGEAGEAGEAGEAGEANDEXECUTITIEM,关注台词:1)USEREEREFERESCENCENCINCOPYINSTEADOFCOPYINGINATATASTRUCTURESTROUCTURESTOREDUCEMORYCONSUMPTION.2)杠杆phphppphpphp'sbuilt intimpunctionslikearray_mapforfunctionslikearray_mapforfforfforfforfasterapasterexecution.3)

PHP电子邮件:分步发送指南PHP电子邮件:分步发送指南May 09, 2025 am 12:14 AM

phpisusedforsendendemailsduetoitsignegrationwithservermailservicesand andexternalsmtpproviders,自动化notifications andMarketingCampaigns.1)设置设置yourphpenvironcormentswironmentswithaweberswithawebserverserverserverandphp,确保themailfunctionisenabled.2)useabasicscruct

如何通过PHP发送电子邮件:示例和代码如何通过PHP发送电子邮件:示例和代码May 09, 2025 am 12:13 AM

发送电子邮件的最佳方法是使用PHPMailer库。1)使用mail()函数简单但不可靠,可能导致邮件进入垃圾邮件或无法送达。2)PHPMailer提供更好的控制和可靠性,支持HTML邮件、附件和SMTP认证。3)确保正确配置SMTP设置并使用加密(如STARTTLS或SSL/TLS)以增强安全性。4)对于大量邮件,考虑使用邮件队列系统来优化性能。

高级PHP电子邮件:自定义标题和功能高级PHP电子邮件:自定义标题和功能May 09, 2025 am 12:13 AM

CustomHeadersheadersandAdvancedFeaturesInphpeMailenHanceFunctionalityAndreliability.1)CustomHeadersheadersheadersaddmetadatatatatataatafortrackingandCategorization.2)htmlemailsallowformattingandttinganditive.3)attachmentscanmentscanmentscanbesmentscanbestmentscanbesentscanbesentingslibrarieslibrarieslibrariesliblarikelikephpmailer.4)smtppapapairatienticationaltication enterticationallimpr

使用PHP和SMTP发送电子邮件的指南使用PHP和SMTP发送电子邮件的指南May 09, 2025 am 12:06 AM

使用PHP和SMTP发送邮件可以通过PHPMailer库实现。1)安装并配置PHPMailer,2)设置SMTP服务器细节,3)定义邮件内容,4)发送邮件并处理错误。使用此方法可以确保邮件的可靠性和安全性。

使用PHP发送电子邮件的最佳方法是什么?使用PHP发送电子邮件的最佳方法是什么?May 08, 2025 am 12:21 AM

ThebestapproachforsendingemailsinPHPisusingthePHPMailerlibraryduetoitsreliability,featurerichness,andeaseofuse.PHPMailersupportsSMTP,providesdetailederrorhandling,allowssendingHTMLandplaintextemails,supportsattachments,andenhancessecurity.Foroptimalu

PHP中依赖注入的最佳实践PHP中依赖注入的最佳实践May 08, 2025 am 12:21 AM

使用依赖注入(DI)的原因是它促进了代码的松耦合、可测试性和可维护性。1)使用构造函数注入依赖,2)避免使用服务定位器,3)利用依赖注入容器管理依赖,4)通过注入依赖提高测试性,5)避免过度注入依赖,6)考虑DI对性能的影响。

PHP性能调整技巧和技巧PHP性能调整技巧和技巧May 08, 2025 am 12:20 AM

phperformancetuningiscialbecapeitenhancesspeedandeffice,whatevitalforwebapplications.1)cachingwithapcureduccureducesdatabaseloadprovesrovesponsemetimes.2)优化

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中

VSCode Windows 64位 下载

VSCode Windows 64位 下载

微软推出的免费、功能强大的一款IDE编辑器

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

Atom编辑器mac版下载

Atom编辑器mac版下载

最流行的的开源编辑器

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

将Eclipse与SAP NetWeaver应用服务器集成。