簡體   English   中英

更改發件人姓名和 email laravel

[英]Changing sender name and email laravel

對於每個用戶,我在 laravel 項目中更改 email 配置,當用戶登錄時我使用這個:

\Config::set(['mail.mailers.smtp.host'        => $user->smtp_mail_host]);
\Config::set(['mail.mailers.smtp.port'        => $user->smtp_mail_port]);
 \Config::set(['mail.mailers.smtp.username'    => $user->smtp_mail_username]);
\Config::set(['mail.mailers.smtp.password'    => $user->smtp_mail_password]);
\Config::set(['mail.from.address'             => $user->mail_address]);
 \Config::set(['mail.from.name'                => $user->mail_from_name]);

當我執行config()時,它顯示了我的更改,但是當我發送時,郵件是從 .env 配置郵件地址發送的,缺少部分我找不到它。 感謝幫助

使用Config::set應用的設置不會在不同的請求中持續存在:如果僅在用戶登錄時運行它們,則更改不適用於以下請求。

您應該修改Authenticate中間件添加:

public function handle($request, Closure $next, ...$guards)
    {
        $authReturned = parent::handle($request, $next, $guards);
        $user = Auth::user();
        \Config::set(['mail.mailers.smtp.host'        => $user->smtp_mail_host]);
        \Config::set(['mail.mailers.smtp.port'        => $user->smtp_mail_port]);
        \Config::set(['mail.mailers.smtp.username'    => $user->smtp_mail_username]);
        \Config::set(['mail.mailers.smtp.password'    => $user->smtp_mail_password]);
        \Config::set(['mail.from.address'             => $user->mail_address]);
        \Config::set(['mail.from.name'                => $user->mail_from_name]);
        return $authReturned;
    }

這不是最佳解決方案,但可以提供幫助:在調用發送方法之前將配置傳遞給您的 Mail::send,如下所示:

首先在您的 Controller 中導入這些類

use Mail;
use \Swift_Mailer;
use \Swift_SmtpTransport as SmtpTransport;

然后在您發送 function 中:

$from_email = \Config::get('mail.from.address');
$email_name = \Config::get('mail.from.name');
$to_email   = "test@test.com";
$transport  = (new SmtpTransport(\Config::get('mail.mailers.smtp.host'), \Config::get('mail.mailers.smtp.port'), null))->setUsername(\Config::get('mail.mailers.smtp.username'))->setPassword(\Config::get('mail.mailers.smtp.password'));

$mailer = new Swift_Mailer($transport);
Mail::setSwiftMailer($mailer);

Mail::send('emails.emailhtmlpage', [], function ($m) use ($from_email,$email_name,$to_email) {
    $m->from($from_email, $email_name);
    $m->to($to_email, 'TEST')->subject("Your Email Subject");
});

如果您使用隊列和作業,請確保

  • 停止php artisan queue:work (它似乎有自己的緩存來存儲配置)
  • 檢查后台進程以確保queue:work已經停止(對於 linux,您可以使用top -c -p $(pgrep -d',' -f php)並搜索php artisan queue:work in COMMAND 列)
  • 在.env 或 configs 中做你想要的改變
  • config:clear
  • 重做php artisan queue:work

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM