如何在laravel中更改重置密码电子邮件主题?

时间:2016-11-13 12:48:37

标签: php laravel email laravel-5.3

我是Laravel的初学者。目前我正在学习这个框架。我的Laravel版本是5.3。

我使用php artisan make:auth搭建我的身份验证所有工作正常。我还在我的.env文件中配置了gmail smtp,在config directgor​​y中配置了mail.php。一切都很完美。但我在默认情况下看到忘记密码的电子邮件主题正在Reset Password。我想改变它。

我看到了一些博客。我找到了一些博客。我在我的网站上实现了这一点。但同样的输出即将来临。

我按照这些链接 -

https://laracasts.com/discuss/channels/general-discussion/reset-password-email-subject

https://laracasts.com/discuss/channels/laravel/how-to-override-message-in-sendresetlinkemail-in-forgotpasswordcontroller

http://codepen.io/anon/pen/rWedLV

6 个答案:

答案 0 :(得分:55)

您可以更改密码重置电子邮件主题,但需要一些额外的工作。首先,您需要创建自己的ResetPassword通知实现。

app\Notifications目录中创建一个新的通知类,我们将其命名为ResetPassword.php

<?php

namespace App\Notifications;

use Illuminate\Notifications\Notification;
use Illuminate\Notifications\Messages\MailMessage;

class ResetPassword extends Notification
{
    public $token;

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

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

    public function toMail($notifiable)
    {
        return (new MailMessage)
            ->subject('Your Reset Password Subject Here')
            ->line('You are receiving this email because we received a password reset request for your account.')
            ->action('Reset Password', url('password/reset', $this->token))
            ->line('If you did not request a password reset, no further action is required.');
    }
}

您还可以使用artisan命令生成通知模板:

php artisan make:notification ResetPassword

或者您可以简单地复制粘贴上面的代码。您可能会注意到此通知类与默认的Illuminate\Auth\Notifications\ResetPassword非常相似。实际上,您可以从默认的ResetPassword类扩展它。

唯一的区别在于,您添加了一个新的方法调用来定义电子邮件的主题:

return (new MailMessage)
        ->subject('Your Reset Password Subject Here')

您可以阅读有关Mail Notifications here的更多信息。

其次,在app\User.php文件上,您需要覆盖Illuminate\Auth\Passwords\CanResetPassword特征定义的默认sendPasswordResetNotification()方法。现在您应该使用自己的ResetPassword实现:

<?php

namespace App;

use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;
use App\Notifications\ResetPassword as ResetPasswordNotification;

class User extends Authenticatable
{
    use Notifiable;

    ...

    public function sendPasswordResetNotification($token)
    {
        // Your your own implementation.
        $this->notify(new ResetPasswordNotification($token));
    }
}

现在您的重置密码电子邮件主题应该更新!

Reset password email subject updated

希望这有帮助!

答案 1 :(得分:5)

您可以轻松修改用于向用户发送密码重置链接的通知类。要开始使用,请覆盖User模型上的sendPasswordResetNotification方法。在此方法中,您可以使用您选择的任何通知类发送通知。密码重置$token是方法收到的第一个参数,请参阅Doc for Customization

/**
 * Send the password reset notification.
 *
 * @param  string  $token
 * @return void
 */
public function sendPasswordResetNotification($token)
{
    $this->notify(new ResetPasswordNotification($token));
}

希望这有帮助!

答案 2 :(得分:3)

向每个询问如何更新Hello,问候和子副本文本的人:

php artisan vendor:publish(选项11)

然后在views / vendor / notifications / email.blade.php

在此文件中,将出现类似Hello的文本,但您可以通过以下方式进行更改: 例如: 第9行# @lang('Hallo!, Hei!, Bonjour!, Guten Tag!, Geia!')

答案 3 :(得分:1)

您可以创建一个自定义函数来创建这样的重置密码令牌。

 $user = User::where('email', 'example@name.com' )->first();
 $password_broker = app(PasswordBroker::class); //so we can have dependency injection
 $token = $password_broker->createToken($user); //create reset password token
 $password_broker->emailResetLink($user, $token, function (Message $message) {
         $message->subject('Custom Email title');
 });//send email.

答案 4 :(得分:0)

setModel中,默认实现与此类似:

Laravel 5.7

您所要做的就是将return (new MailMessage) ->subject(Lang::getFromJson('Reset Password Notification')) ->line(Lang::getFromJson('You are receiving this email because we received a password reset request for your account.')) ->action(Lang::getFromJson('Reset Password'), url(config('app.url').route('password.reset', $this->token, false))) ->line(Lang::getFromJson('This password reset link will expire in :count minutes.', ['count' => config('auth.passwords.users.expire')])) ->line(Lang::getFromJson('If you did not request a password reset, no further action is required.')); locale更改为config/app.php,然后在ro中创建类似于以下内容的文件resources/lang这个:

ro.json

它将翻译主题(第一个键)和邮件正文。

答案 5 :(得分:-2)

只需添加以下行:

- &gt; subject(&#39; New Subjetc&#39;)

在文件Illuminate \ Auth \ Notifications \ ResetPassword的方法toMail中 像这样:

public function toMail($notifiable)
{
    return (new MailMessage)
        ->subject('New Subjetc')
        ->line('You are receiving this email because we received a password reset request for your account.')
        ->action('Restaurar Contraseña', url(config('app.url').route('password.reset', $this->token, false)))
        ->line('If you did not request a password reset, no further action is required.');
}