自定义 Laravel 默认验证电子邮件(更改 Header)

Customize Laravel Default Verification Email (Change The Header)

我正在尝试更改和修改 Laravel 中的默认验证电子邮件,当您可以更改默认电子邮件的内容时我找到了该文件,但在该文件中只有主题和我找不到电子邮件的 header 行来更改它,那么我在哪里可以找到 header 行并更改它?

The header I meant:

“你好”这个词

中文件的代码
Vendor/Laravel/Framework/src/illuminate/Auth/Notifications/VerifyEmail.php
protected function buildMailMessage($url)
    {
        return (new MailMessage)
            ->subject(Lang::get('Verify Email Address'))
            ->line(Lang::get('Please click the button below to verify your email address.'))
            ->action(Lang::get('Verify Email Address'), $url)
            ->line(Lang::get('If you did not create an account, no further action is required.'));
    }

如官方Laravel Docs中所述,您可以通过在App\Providers\AuthServiceProvider.

boot方法中添加代码来实现。
use Illuminate\Auth\Notifications\VerifyEmail;
use Illuminate\Notifications\Messages\MailMessage;

public function boot()
{
    // ...

    VerifyEmail::toMailUsing(function ($notifiable, $url) {
        return (new MailMessage)
            ->subject('Verify Email Address')
            ->line('Click the button below to verify your email address.')
            ->action('Verify Email Address', $url);
    });
}

自定义 Laravel 通知电子邮件模板(Header 和页脚) 最初 Laravel 将使用隐藏在框架核心中的组件,您可以通过

导出它们
    php artisan vendor:publish --tag=laravel-mail

它将在您的 resources/view/vendor 文件夹中创建邮件和 markdown 文件夹。在里面你会发现布局或 header 等组件

正在创建通知 您想要做的是创建通知、事件或邮件 class,以便在发生某些事情时发送电子邮件。 我决定发出通知。创建任何通知时(您可以阅读有关如何通过 artisan 创建通知的更多信息),您将获得如下 class:

<?php

namespace App\Notifications;

use Illuminate\Bus\Queueable;
use Illuminate\Notifications\Notification;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Notifications\Messages\MailMessage;

class UserRegistered extends Notification {
    use Queueable;

    public $user;

    public function __construct($user) {
        $this->user = $user;
    }


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

    /**
     * Get the mail representation of the notification.
     *
     * @param mixed $notifiable
     * @return \Illuminate\Notifications\Messages\MailMessage
     */
    public function toMail($notifiable) {
        return (new MailMessage)
            ->from('info@sometimes-it-wont-work.com', 'Admin')
            ->subject('Welcome to the the Portal')
            ->markdown('mail.welcome.index', ['user' => $this->user]);
    }

    /**
     * Get the array representation of the notification.
     *
     * @param mixed $notifiable
     * @return array
     */
    public function toArray($notifiable) {
        return [
            //
        ];
    }
}

这里要注意 toMail 方法以及 class 的构造函数,因为我们将向它传递一个 object。另外,请注意我们正在使用 ->markdown(‘some.blade.php’); 下一步是推动这个通知工作。在你的 RegisterController 的某个地方,你可能想要调用它(不讨论你将如何执行它,同步或排队......)。不要忘记在顶部包含通知的命名空间。

  $user = User::create([
        'name' => $data['name'],
        'email' => $data['email'],
        'lastname' => $data['lastname'],
        'password' => bcrypt($data['password']),
    ]);

  $user->notify(new UserRegistered($user));

为什么我要这么深入?好吧,因为我还想向您展示如何将数据传递到电子邮件模板中。

接下来您可以转到 resources/views/mail/welcome/index.blade.php(可以是您想要的任何文件夹和文件名)并粘贴:

@component('mail::layout')
{{-- Header --}}
@slot('header')
    @component('mail::header', ['url' => config('app.url')])
        Header Title
    @endcomponent
@endslot

{{-- Body--}} 这是我们的主要信息 {{ $user }}

{{-- Subcopy --}}
@isset($subcopy)
    @slot('subcopy')
        @component('mail::subcopy')
            {{ $subcopy }}
        @endcomponent
    @endslot
@endisset

  {{-- Footer --}}
    @slot('footer')
    @component('mail::footer')
        © {{ date('Y') }} {{ config('app.name') }}. Super FOOTER!
    @endcomponent
    @endslot
    @endcomponent

您现在可以轻松地将任何图像添加到 header 或更改页脚内的 link 等。 希望这有帮助。

问题的两个答案都给出了发布电子邮件模板的方式的绝对正确的解决方案,因为您永远不应该在“vendor”文件夹中修改它。但是,我相信您的问题主要是关于修改“Hello!”的方式。字符串,上面没有回答。 根据 https://laravel.com/api/8.x/Illuminate/Notifications/Messages/MailMessage.html 你应该使用“问候语”方法。换句话说,您的代码应如下所示:

return (new MailMessage)
        ->greeting(Lang::get('Hi there!'))
        ->subject(Lang::get('Verify Email Address'))
        ->line(Lang::get('Please click the button below to verify your email address.'))
        ->action(Lang::get('Verify Email Address'), $url)
        ->line(Lang::get('If you did not create an account, no further action is required.'));