[英]How to send cc and bcc recipients in Laravel 7?
我試圖用抄送和/或密送發送電子郵件,只有收件人收到了電子郵件。
我正在派遣這樣的工作:
$user = User::where('email', 'test1@test.com')->first();
$sender = 'test@test.com';
$cc = User::where('email', 'test2@test.com')->first();
$bcc = User::where('email', 'test3@test.com')->first();
$subject = "Test subject";
$text = "Text mail body";
dispatch(new SendEmailJob($user,$sender,$cc,$bcc,$subject, $text))->delay(now()->addSeconds(10));
然后在 SendEmailJob 的構造函數中,我接受這些參數並發送電子郵件:
public function handle()
{
Mail::to($this->user)->cc($this->cc)->bcc($this->bcc)->send(new TestMail($this->sender, $this->subject, $this->text));
}
和實際的 TestMail:
public function build()
{
return $this
->from($this->sender)
->subject($this->subject)
->markdown('emails.test');
}
降價:
@component('mail::message')
{!! nl2br($text) !!}
@endcomponent
SendEmailJob 和 TestMail 都在實現 ShouldQueue 並運行 php artisan queue:work。 $user 可以收到電子郵件,但 $cc 和 $bcc 不會。 在 Mailtrap 和生產上都嘗試過。 一項作業排隊並處理,一封電子郵件排隊和處理。
有人知道為什么不發送抄送和密送電子郵件嗎?
所以我想通了。
首先,在 localhost 上,php artisan queue:work 需要重新啟動,否則它仍然可以使用啟動時的任何代碼。
在生產服務器上,保持 php artisan queue:work up 的主管或其他服務需要重新啟動,否則隊列將無法工作。
在本地主機上,使用密件抄送,您會收到 2 封相同的電子郵件,一封用於收件人,另一封用於密件抄送收件人 - 這是一個郵件陷阱功能,意味着它正在工作。
在生產中,我用錯誤的代碼嘗試了很多次,office365 反垃圾郵件阻止了服務器的 ip,所以在嘗試個人 gmail 后,它起作用了。
這是我正在使用的代碼:
我分派工作的控制器(電子郵件可以是字符串或用戶模型):
$user = User::where('email', 'test1@test.com')->first();
$sender = 'test@test.com';
$cc = User::where('email', 'test2@test.com')->first();
$bcc = User::where('email', 'test3@test.com')->first();
$subject = "Test subject";
$text = "Text mail body";
dispatch(new SendEmailJob($user,$sender,$cc,$bcc,$subject, $text))->delay(now()->addSeconds(10));
在 Job 類中:
public function handle()
{
Mail::send(new TestMail($this->user, $this->cc, $this->bcc, $this->sender, $this->subject, $this->text));
}
和實際的郵件類:
public function build()
{
return $this
->to($this->user->email, 'Main recipient') //can be $this->user
->bcc($this->cc->email, 'Hidden recipient') //can be $this->cc
->from($this->sender)
->subject($this->subject)
->markdown('emails.test');
}
經過更多挖掘后編輯:
因此,在處理一些電子郵件后,我仍然收到此錯誤“swift_transportexception 預期響應代碼 354,但收到代碼 554”。
此錯誤基本上表示您未在服務器上進行身份驗證,或者“發件人”地址與 config('mail.username') 地址不匹配。 因為我有多租戶應用程序,我的目標是讓租戶動態更改“發件人”地址,所以我正在通過每封電子郵件更改 config(mail.username') 和 config('mail.password') 。 但是當執行作業后實際發送電子郵件時,配置已經更改了多次,並且永遠不會發送 100% 的電子郵件。
所以我的解決方案是,我收到 100% 的電子郵件,根本不更改配置,從“info@myapp.com”發送所有電子郵件,並由每個租戶指定“replyTo”。 希望這可以幫助某人。
Mail::to($request->user())
->cc($moreUsers)
->bcc($evenMoreUsers)
->send(new OrderShipped($order))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.