0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Laravel9対応】LaravelのSMTPサーバを動的に設定する

Posted at

何がやりたいのか

  • ユーザーが設定したメールアドレスから自動送信を行うシステムを作っている。
  • .envで設定したメール設定ではなくて、データベースに登録された各ユーザーのメールサーバー情報を使い動的に設定を変えて送信する。

Laravel9ではSwiftMailerが使えなくなったため、こちらの方法で実装できなりました。
そのため別のやり方を解説します。

代替案Symfony Mailerを使う。

DynamicMailService.php

<?php

namespace App\Mail;

use Symfony\Component\Mailer\Transport;
use Symfony\Component\Mailer\Mailer;
use Symfony\Component\Mime\Email;
use Illuminate\Support\Facades\Log;
use Exception;

class DynamicMail
{
    public function send()
    {   
        $username = 'hoge';
        $password = 'password';
        $port = 587;
        $host = 'sample.ne.jp';
        $host = trim($host);
        $transport = Transport::fromDsn("smtp://{$username}:{$password}@{$host}:{$port}");
        $mailer = new Mailer($transport);

        try {
            $email = (new Email())
            ->from($from)
            ->to($to)
            ->subject($subject)
            ->text('Sending emails is fun again!')
            ->html('<p>テスト送信</p>');
            $mailer->send($email);
        }
        //送信失敗時
        catch (Exception $e) {
            Log::error($e);
        }
    }
}


bladeのテンプレートを使う場合

Bladeテンプレートをレンダリングする。
例:resources/views/emails/test.blade.phpを使う場合

sample.php
<?php

    public function send()
    {   
      // Bladeテンプレートをレンダリング
        $htmlContent = View::make('emails.test', ['variable' => '山田太郎'])->render();

        $username = 'hoge';
        $password = 'password';
        $port = 587;
        $host = 'sample.ne.jp';
        $host = trim($host);
        $transport = Transport::fromDsn("smtp://{$username}:{$password}@{$host}:{$port}");
        $mailer = new Mailer($transport);

        try {
            $email = (new Email())
            ->from($from)
            ->to($to)
            ->subject($subject)
            ->html($htmlContent);
            $mailer->send($email);
        }
        //送信失敗時
        catch (Exception $e) {
            Log::error($e);
        }
    }
test.blade.php
<p>こんにちは: {{ $variable }}</p>
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?