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