簡體   English   中英

如何在 Laravel 7 中發送抄送和密送收件人?

[英]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.

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