ホームページ > バックエンド開発 > PHPチュートリアル > Laravel 5.3のメールロギング:メールドライバーの拡張

Laravel 5.3のメールロギング:メールドライバーの拡張

William Shakespeare
リリース: 2025-02-10 11:00:16
オリジナル
846 人が閲覧しました

LARAVEL 5.3メール送信拡張機能:カスタムデータベースメールログ

Laravel 5.3は、さまざまな人気のあるサービスを通じてメールを構成および送信する簡単な方法を提供し、開発用のログアシスタントプログラムが含まれています。ただし、利用可能なすべてのサービスをカバーするわけではなく、既存のメールドライバーシステムの拡張が必要になる場合があります。

キーポイント:

  • Laravel 5.3は、さまざまな人気のあるサービスを通じてメールを簡単に構成および送信する簡単な方法を提供し、開発用のログアシスタントプログラムが含まれています。ただし、利用可能なすべてのサービスをカバーするわけではなく、既存のメールドライバーシステムの拡張が必要になる場合があります。
  • メールドライバーシステムを拡張するには、職人のコマンドラインアシスタントを使用して新しいサービスプロバイダーを作成できます。このサービスプロバイダーはアプリケーションと対話し、スタートアップでサービスを登録します。
  • 新しいサービスプロバイダーは、既存のIlluminateMailMailServiceProviderを拡張でき、registerメソッドを実装できます。これにより、迅速なメーラーインスタンスをコンテナにバインドする新しいトランスポートマネージャーを作成できます。
  • 拡張メールドライバーシステムを使用して、デバッグ用のデータベーステーブルにメールをログインすることができます。これは、新しい移行と、データベーステーブルがテーブルと対話するための新しいモデルを作成することによって行われます。次に、プロバイダーをプロバイダーリストに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ビューを使用して、Webサイトで新しく登録されたユーザーにメールを送信します。 Laravel 5.3で郵送可能を使用すると、簡単になります(ただし、古い構文はまだ有効です)。

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などを生産段階で提供します。これはほとんどの場合良いようですが、利用可能なすべてのサービスをカバーするわけではありません!このチュートリアルでは、既存のメールドライバーシステムを拡張して独自のドライバーを追加する方法を学びます。

例をシンプルで明確にするために、メールログをデータベーステーブルにログに記録します。

サービスプロバイダーを作成

これを達成するための好みの方法は、アプリケーションと対話し、スタートアップでサービスを登録できるサービスプロバイダーを作成することです。職人のコマンドラインアシスタントを使用して、まず新しいサービスプロバイダーを生成しましょう。

Mail::send('emails.welcome', ['user' => $user], function ($m) use ($user) {
    $m->to($user->email, $user->name)->subject('Welcome to the website');
});
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
これにより、

フォルダーに新しいクラスが作成されます。 Laravelサービスプロバイダーに精通している場合は、クラスを拡張し、app/ProvidersおよびServiceProviderメソッドを定義したことがわかります。ドキュメントでプロバイダーの詳細を読むことができます。 boot メールプロバイダーを使用してregister

親サービスプロバイダークラスを使用する代わりに、ショートカットを採取して既存の

を拡張できます。これは、

メソッドが実装されていることを意味します。

IlluminateMailMailServiceProvider register

メソッドは、
# 生成一个新的可邮件类
php artisan make:mail WelcomeMail
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
構成値に従って対応する転送ドライバーを返します。ここでできることは、

親メソッドを呼び出して、自分のregisterSwiftMailer転送マネージャーmail.driverを返す前にチェックを実行することです。 registerSwiftMailer 転送マネージャーを使用して Laravelは、swift_mailerのswiftMailerインスタンスを返すIOCから

インスタンスを解析します。 Swift Mailerインスタンスをコンテナにバインドする必要があります。
// 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');
    }
}
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

転送オブジェクトを実際のドライバーとして扱うことができます。

名前空間をチェックすると、各ドライバー(swift.mailer

など)のさまざまなトランスポートクラスが見つかります。
// routes/web.php

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

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

    return "done";
});
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

IlluminateMailTransportクラスには、LogTransportクラスを拡張することで満たすことができます。このように見えるはずです。 SparkPostTransport

ここで実装する唯一の方法は、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();
    }
}
ログイン後にコピー
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で感謝していることの1つは、比類のないスケーラビリティです。ルーターやIOCからメールまで、すべてを変更または拡張できます。

質問やコメントがある場合は、以下に投稿してください。答えを最大限に活用してください。

Laravel 5.3(FAQ)

でのメールロギングに関するFAQ

Laravel 5.3でメールドライバーを拡張する方法は?

Laravel 5.3でメールドライバーを拡張するには、新しいサービスプロバイダーの作成が含まれます。このサービスプロバイダーは、既存のメールドライバーを拡張し、追加機能を追加できるようにします。

コマンドを使用して、新しいサービスプロバイダーを作成できます。プロバイダーを作成した後、

ファイルに登録できます。プロバイダーでは、

メソッドを使用して、メールドライバーにカスタム機能を追加できます。 php artisan make:provider config/app.php laravelでメールを記録する目的は何ですか? extend Laravelでのメールロギングは、アプリケーションから送信されたすべての発信メールを追跡できる機能です。これは、どのメールがいつ、誰に送信されているかを正確に確認できるため、デバッグに非常に役立ちます。また、アプリケーションから送信されたすべての電子メール通信の記録を提供するため、監査にも非常に便利です。

すべての送信メールを記録するようにLaravelを構成する方法は?

laravelを構成するには、すべての発信メールを記録するには、

ファイルを変更する必要があります。このファイルでは、

オプションを

に設定できます。これにより、Laravelにすべての発信メールを記録するように指示されます。ログは

ディレクトリに保存されます。 config/mail.php log laravelで電子メールログを表示する方法は? true Laravelのメールログは、storage/logsディレクトリに保存されます。これらのログを表示して、このディレクトリに移動してログファイルを開くことができます。ログファイルは日付に従って命名されるため、特定の日付のログを簡単に見つけることができます。

Laravelで電子メールログの形式をカスタマイズできますか?

はい、Laravelでメールログの形式をカスタマイズできます。これは、メールドライバーを拡張し、logメソッドをオーバーライドすることで実行できます。この方法では、ログメッセージの形式を指定できます。

(FAQの残りの部分は電子メール自体の送信に関連しており、この例の電子メールログ拡張機能とは何の関係もないため、省略されています)

画像パス/uploads/20250210/173915090467a9563807841.webpおよび/uploads/20250210/173915090467a9563839bfc.webpおよび/uploads/20250210/173915090667a9563a27b41.jpgは、実際のアクセス可能な画像リンクに置き換える必要があることに注意してください。

以上がLaravel 5.3のメールロギング:メールドライバーの拡張の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート