📜  在 laravelk 中发送带有运行时配置的电子邮件 - PHP (1)

📅  最后修改于: 2023-12-03 15:23:12.458000             🧑  作者: Mango

在 Laravel 中发送带有运行时配置的电子邮件 - PHP

当我们在开发 Web 应用时,必须经常与邮件服务打交道。发送电子邮件是许多 Web 应用程序的关键功能之一,如用户注册、密码重置,通知等等。

在 Laravel 中,发送电子邮件非常简单。但是,有些时候我们需要在运行时动态地配置电子邮件服务,而不是在 config/mail.php 文件中进行配置。本文将向您介绍如何在 Laravel 中发送带有运行时配置的电子邮件。

配置电子邮件

首先,让我们假设我们的电子邮件配置存储在数据库中。我们将使用 Laravel 的 ORM,Eloquent,来访问和更新数据。

我们将创建一个名为 EmailConfig 的 Eloquent 模型,该模型将存储电子邮件服务器的主机名、端口号、用户名、密码等信息。在运行时,我们将从数据库中提取这些信息,并使用它们来配置电子邮件服务。

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class EmailConfig extends Model
{
    //
    protected $fillable = [
        'host', 'port', 'username', 'password'
    ];
}
发送电子邮件

现在,让我们编写代码来发送电子邮件,并使用来自 EmailConfig 模型的数据来配置电子邮件服务。我们将创建一个名为 Mailer 的类来发送电子邮件。我们也可以将此逻辑放到控制器或服务类中,但为了简单起见,我们将它放入单独的类中。

<?php

namespace App;

use Illuminate\Support\Facades\Mail;
use Illuminate\Support\Facades\Config;

class Mailer
{
    public static function send($to, $subject, $body)
    {
        $email_config = EmailConfig::first();
        
        Config::set('mail.driver', 'smtp');
        Config::set('mail.host', $email_config->host);
        Config::set('mail.port', $email_config->port);
        Config::set('mail.username', $email_config->username);
        Config::set('mail.password', $email_config->password);
        Config::set('mail.encryption', 'tls');
        
        Mail::raw($body, function ($message) use ($to, $subject) {
            $message->to($to)
                ->subject($subject);
        });
    }
}

如上所示,我们首先从 EmailConfig 模型中获取电子邮件配置。然后,我们使用 Config 类来动态地设置 Laravel 的 mail 配置。最后,我们使用 Laravel 的 Mail 类发送电子邮件。

如何使用

现在我们已经编写了发送电子邮件的代码,让我们看看如何在我们的应用程序中使用它。我们只需要调用 Mailer 类的 send 方法,并传递收件人、主题和正文。

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Mailer;

class EmailController extends Controller
{
    public function sendEmail(Request $request)
    {
        $to      = $request->input('to');
        $subject = $request->input('subject');
        $body    = $request->input('body');
        
        Mailer::send($to, $subject, $body);
        
        return response('Email sent successfully!');
    }
}

如上所示,我们在 EmailController 中定义了 sendEmail 方法,通过输入请求参数获取电子邮件的收件人、主题和正文。然后,我们调用 Mailer 类的 send 方法来发送电子邮件,并返回一个成功响应。

结论

在本文中,我们学习了如何在 Laravel 中发送带有运行时配置的电子邮件。我们使用了 Eloquent ORM 来访问和更新电子邮件配置,并使用了 Laravel 的 Config 和 Mail 类来配置和发送电子邮件。

这是一个非常灵活的解决方案,可以在运行时动态地更改电子邮件配置,并使电子邮件发送更加灵活。