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

Posted

技术标签:

【中文标题】如何在 laravel 中更改重置密码电子邮件主题?【英文标题】:How to change reset password email subject in laravel? 【发布时间】:2017-03-27 05:16:53 【问题描述】:

我是 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/laravel-5-password-reset-link-subject

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

【问题讨论】:

【参考方案1】:

您可以轻松修改用于向用户发送密码重置链接的通知类。要开始,请在您的 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】:

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

 $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.

【讨论】:

【参考方案3】:

您可以更改密码重置电子邮件主题,但这需要一些额外的工作。首先,您需要创建自己的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));
    

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

希望对您有所帮助!

【讨论】:

我们如何改变 Laravel 和写在顶部的 Laravel。 @Steve 转到 config/app.php 并更改应用程序名称 @kniteli 如何更改来自:示例 *****@****.com。我想改变那个例子。 @JayMomaya 您可以将其添加到您的.env 文件MAIL_FROM_NAME="Example" MAIL_FROM_ADDRESS="*****@****" 您也可以在本例中使用$this-&gt;from('example@example.com');在运行时更改发件人。【参考方案4】:

只需添加一行:

->subject('新主题')

在文件 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.');

【讨论】:

坏主意。永远不要覆盖 Laravel 代码,而是自己编写!【参考方案5】:

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.'));

您所要做的就是将您的localeconfig/app.php 更改为ro,然后在您的resources/lang 中创建一个类似于此的文件ro.json


  "Reset Password Notification": "Viața Medicală CMS :: Resetare parolă",
  "Hello!": "Salut,",
  "You are receiving this email because we received a password reset request for your account.": "Primești acest email deoarece am primit o solicitare de resetare a parolei pentru contul tău.",
  "Reset Password": "Reseteză parola",
  "This password reset link will expire in :count minutes.": "Acest link va expira în :count de minute.",
  "If you did not request a password reset, no further action is required.": "Dacă nu ai solicitat resetarea parolei, nu este necesară nicio altă acțiune.",
  "Regards": "Toate cele bune",
  "Oh no": "O, nu",
  "Whoops!": "Hopa!",
  "If you’re having trouble clicking the \":actionText\" button, copy and paste the URL below\ninto your web browser: [:actionURL](:actionURL)": "Dacă nu reușești să dai click pe butonul de \":actionText\", dă copy-paste la URL-ul de mai jos în browser:\n [:actionURL](:actionURL)"

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

更新 Laravel 6.* 这也可以用于VerifyEmail.php 通知。

【讨论】:

【参考方案6】:

致所有询问如何更新 Hello、Regards 和 subcopy 文本的人:

php artisan vendor:publish(选项 11)

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

在这个文件中会有像你好这样的文本,你可以通过改变来改变: 例如: 第9行# @lang('Hallo!, Hei!, Bonjour!, Guten Tag!, Geia!')

【讨论】:

根据使用的库,选项不一定是数字 11,选择的选项是 Tag: laravel-notifications。或者,可以使用完整的命令php artisan vendor:publish --tag=laravel-notifications【参考方案7】:

Laravel 8

在 AuthServiceProvider.php 中

添加这些代码。

ResetPassword::toMailUsing(function ($notifiable, $url) 
        return (new MailMessage)
            ->subject(Lang::get('Reset Password Notification'))
            ->line(Lang::get('You are receiving this email because we received a password reset request for your account.'))
            ->action(Lang::get('Reset Password'), $url)
            ->line(Lang::get('This password reset link will expire in :count minutes.', ['count' => config('auth.passwords.' . config('auth.defaults.passwords') . '.expire')]))
            ->line(Lang::get('If you did not request a password reset, no further action is required.'));
    );

【讨论】:

您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center。

以上是关于如何在 laravel 中更改重置密码电子邮件主题?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 laravel 5 中翻译我的密码重置电子邮件的主题

如何在 Laravel 5 中更改默认重置密码链接

Laravel 更改密码重置特定令牌的令牌持续时间

Laravel 5 重置密码通知不会发送

如何使用 laravel 5 中的队列通过电子邮件发送密码重置链接

如何在 Lumen 6x 中实现默认 Laravel 重置密码