4
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?

More than 1 year has passed since last update.

Laravelでユーザー登録のVerificationNotificationメールをHTMLメールじゃなくてtextメールにして日本語化する

Last updated at Posted at 2022-02-23

HTMLメールは到達率が低い

HTMLメールよりテキストメールの方が一般ユーザーには到達率が高い。
しかし、Laravelの通知メールはHTMLが基本になっている。
ユーザー登録時に送信するverification noticeのメールをテキスト形式にして、日本語化する。

備考:HTMLメールがすごく嫌いな人がたまにいる。(私じゃないです)

VerificationNotificationをカスタマイズ

User.phpのimplementsにMustVerifyEmailを指定

class User extends Authenticatable implements MustVerifyEmail

User.phpにsendEmailVerificationNotification()関数を追加

    /**
     * メール確認通知の送信
     *
     * @return void
     */
    public function sendEmailVerificationNotification()
    {
        $customVerifyEmail = new CustomVerifyEmail();
        $this->notify($customVerifyEmail);
        $customVerifyEmail->toMail($this);
    }

確認メールを送りたいタイミングで
$user->sendEmailVerificationNotification()を呼ぶ。

CustomVerifyEmail.phpを変更

    public function via($notifiable)
    {
        return ['mail'];
    }

    /**
     * Get the mail representation of the notification.
     *
     * @param mixed $notifiable
     * @return MailMessage
     */
    public function toMail($notifiable)
    {
        $myActionText = __('Verify Email Address'); // $myActionText = "Verify Email Address"
        $myActionUrl = $this->verificationUrl($notifiable);
        $mailMessage = (new MailMessage)
            ->subject(__('【初回】ご登録ありがとうございます'))
//            ->view('emails.verify', ['myActionUrl' => $myActionUrl]) // HTMLメール化したい場合はこのコメントを外す  resources/views/emails.verify.blade.phpの内容がHTMLメールで送られる
            ->action($myActionText, $myActionUrl);
        return $mailMessage;
    }

案内するテキストを変更する

toMail関数でview('emails.verify'...)の箇所を無効化したので、
デフォルトの文面のメールが届く。

[DummyDep](http://dummydep.jp)

Verify Email Address: http://dummydep.jp/email/verify/880000002/4bfd564145610aacdfd3274ebbd150ba1fbef2cf?expires=1643955584&signature=3dffc5bb10e11d1a2b5e2e3b156ee3041a272b45914a7f3e2e27c925dc9349b4

Regards,
DummyDep

If you’re having trouble clicking the "Verify Email Address" button, copy and paste the URL below
into your web browser: [http://dummydep.jp/email/verify/880000002/4bfd564145610aacdfd3274ebbd150ba1fbef2cf?expires=1643955584&signature=3dffc5bb10e11d1a2b5e2e3b156ee3041a272b45914a7f3e2e27c925dc9349b4](http://dummydep.jp/email/verify/880000002/4bfd564145610aacdfd3274ebbd150ba1fbef2cf?expires=1643955584&signature=3dffc5bb10e11d1a2b5e2e3b156ee3041a272b45914a7f3e2e27c925dc9349b4)

© 2022 DummyDep. All rights reserved. 

メール文をカスタマイズ

メール文はこんなところにあった。vendor以下にあった。でもvendor直下を直接書き換えちゃだめ。
vendor/laravel/framework/src/Illuminate/Notifications/resources/views/email.blade.php

php artisan vendor:publish --tag=laravel-mail

vendor:publishでvendor以下にあるテンプレートを /resources/views/vendor/mail に持ってきてこっちを編集する。

@component('mail::message')
{{-- Greeting --}}
@if (! empty($greeting))
# {{ $greeting }}
@else
@if ($level === 'error')
# @lang('Whoops!')
@else
# @lang('Hello!')
@endif
@endif

{{-- Intro Lines --}}
@foreach ($introLines as $line)
{{ $line }}

@endforeach

{{-- Action Button --}}
@isset($actionText)
<?php
    switch ($level) {
        case 'success':
        case 'error':
            $color = $level;
            break;
        default:
            $color = 'primary';
    }
?>
@component('mail::button', ['url' => $actionUrl, 'color' => $color])
{{ $actionText }}
@endcomponent
@endisset

{{-- Outro Lines --}}
@foreach ($outroLines as $line)
{{ $line }}

@endforeach

{{-- Salutation --}}
@if (! empty($salutation))
{{ $salutation }}
@else
@lang('Regards'),<br>
{{ config('app.name') }}
@endif

{{-- Subcopy --}}
@isset($actionText)
@slot('subcopy')
@lang(
    "If you’re having trouble clicking the \":actionText\" button, copy and paste the URL below\n".
    'into your web browser:',
    [
        'actionText' => $actionText,
    ]
) <span class="break-all">[{{ $displayableActionUrl }}]({{ $actionUrl }})</span>
@endslot
@endisset
@endcomponent

4
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
4
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?