📜  laravel 在数据库中存储邮件驱动程序信息 - PHP (1)

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

Laravel 在数据库中存储邮件驱动程序信息

在 Laravel 中,我们可以使用多种邮件驱动程序(例如 SMTP、Sendmail、Mailgun 等)来发送电子邮件。但是,默认情况下配置信息存储在项目的 .env 文件中,稍不注意就会泄漏私人信息,而且每次更改都要重新启动应用程序。

因此,将邮件驱动程序信息保存到数据库中,无疑是更加安全和方便的方式。在这篇文章中,我们将介绍如何利用 Laravel 的数据库迁移和模型等功能,将邮件驱动程序信息存储到数据库中。

步骤1:创建迁移

首先,我们需要创建一个名为 add_email_settings_to_settings_table 的迁移文件。这个迁移文件将在 settings 表中添加四个字段(mail_driver、mail_host、mail_port 和 mail_username)。

php artisan make:migration add_email_settings_to_settings_table

打开刚刚创建的迁移文件,编辑 up 方法如下所示:

public function up()
{
    Schema::table('settings', function (Blueprint $table) {
        $table->string('mail_driver')->nullable();
        $table->string('mail_host')->nullable();
        $table->string('mail_port')->nullable();
        $table->string('mail_username')->nullable();
    });
}

编辑 down 方法如下所示:

public function down()
{
    Schema::table('settings', function (Blueprint $table) {
        $table->dropColumn(['mail_driver', 'mail_host', 'mail_port', 'mail_username']);
    });
}
步骤2:运行迁移

运行 php artisan migrate 命令,将迁移文件应用于数据库:

php artisan migrate
步骤3:创建模型

接下来,我们需要创建一个名为 Settings 的模型文件,用于从数据库中读取和写入邮件驱动程序信息。

php artisan make:model Settings

打开刚刚创建的模型文件,编辑 fillable 属性如下所示:

protected $fillable = [
    'mail_driver',
    'mail_host',
    'mail_port',
    'mail_username',
];
步骤4:更新邮件配置

现在,我们已经成功地将邮件驱动程序信息存储在数据库中了。接下来,我们需要更新 .env 文件和 config/mail.php 文件来使用数据库中的数据。

首先,打开 .env 文件,并删除关于邮件配置的所有内容。因为我们已经将这些数据保存到数据库中了,不需要再次配置。

其次,打开 config/mail.php 文件,并将 driver、host、port 和 username 配置项的值改为从数据库中读取。这里我们可以通过 Settings 模型来获取相关数据。

return [
    'driver' => App\Settings::where('id', 1)->value('mail_driver'),
    'host' => App\Settings::where('id', 1)->value('mail_host'),
    'port' => App\Settings::where('id', 1)->value('mail_port'),
    'username' => App\Settings::where('id', 1)->value('mail_username'),
    // ...
];
步骤5:测试

最后,我们需要测试一下是否成功地将邮件驱动程序信息存储到了数据库中。可以通过在 HomeController 中使用以下代码来测试:

use Illuminate\Support\Facades\Mail;
use App\Mail\TestMail;

class HomeController extends Controller
{
    public function index()
    {
        Mail::to('example@gmail.com')->send(new TestMail);

        return view('welcome');
    }
}

TestMail 类里只是一个简单的邮件模板:

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

如果一切正常,你应该能够收到一封测试邮件。

至此,我们已经成功地将邮件驱动程序信息存储在了数据库中。这不仅使我们的代码更加健壮和安全,还提高了代码的可维护性和可扩展性。