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

时间:2020-10-06 12:17:00

标签: php laravel email

我正在尝试通过抄送和/或密送发送电子邮件,并且仅向收件人发送电子邮件。

我正在这样分配工作:

$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和生产上都进行了尝试。一项作业排队并进动,一封电子邮件排队并处理。

有人知道为什么不发送抄送和密件抄送电子邮件吗?

2 个答案:

答案 0 :(得分:1)

所以我想通了。

首先,在localhost上,php artisan队列:需要重新启动工作,否则,它仍然可以在启动时使用那里的任何代码。

在生产服务器上,保持php artisan队列的主管或其他服务:处理需要重新启动的NEEDS,否则该队列将无法工作。

在localhost上,使用密件抄送您会收到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));
}

以及实际的Mail类:

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

答案 1 :(得分:0)

Mail::to($request->user())
    ->cc($moreUsers)
    ->bcc($evenMoreUsers)
    ->send(new OrderShipped($order))
相关问题