メール送信機能を作成する

Last-modified: Fri, 07 Sep 2018 06:50:55 JST (96d)

Laravel5.6では、メール送信機能はドライバを差し替えることで、AmazonSESなど外部サービスを利用できるようになっています。参考

ここでは、簡単にテキストメールを送信する機能を作成してみます。
(個人的にHTMLメールは好かないのもあるw)

  1. いつものように、ひな形を作成します。
    php artisan make:mail SendRssMail
    すると、App\Mail配下にひな形のファイルが作成されます。
  2. 中を編集していきます。ここでは単純に外部から必要なパラメタを渡してあげます。
        public $mailto, $subject, $content, $mailfrom;
        /**
         * Create a new message instance.
         *
         * @return void
         */
        public function __construct( $subject, $content, $mailfrom)
        {
            $this->subject = $subject;
            $this->content = $content;
            $this->mailfrom = $mailfrom;
        }
  3. メール送信部分はこんな感じになります。
        /**
         * Build the message.
         *
         * @return $this
         */
        public function build()
        {
            return $this->from($this->mailfrom)
                        ->subject($this->subject)
                        ->text('emails.sendrss')
                        ->with([
                            'content' => $this->content,
                        ]);
        }
    • text('emails.sendrss')の部分がメールテンプレート部分になります。
      前半部分のemailsがディレクトリ名になります。
  4. ではテンプレートファイルを作成します。
    resources\views\emails\sendrss.blade.php
    で以下のように作成します。
    拡張子は.blade.phpにしないと駄目のようです。
    {{$content}}
  5. はい。今回は$contentだけです。このようにwithで渡した変数が展開されます。
    最後に、コントローラから渡します。
                    try {
                        Mail::to($mailto)->send(new SendRssMail($subject, $content, $mailfrom));
                    } catch (Swift_RfcComplianceException $e) {
                        dump("RFC違反のメールです。:" . $mailto);
                    }

Counter: 31, today: 1, yesterday: 0

このページの参照回数は、31です。