【问题标题】:How can I send an email to all of my users in Laravel?如何向 Laravel 中的所有用户发送电子邮件?
【发布时间】:2021-07-04 16:06:48
【问题描述】:

我想向我的应用程序中的所有用户发送电子邮件。我创建了一个单独的示例项目,其中唯一的功能是添加/创建新用户及其电子邮件和姓名。每当有新用户注册时,我想给我的每个现有用户发送电子邮件。就像“你好,我们有一个新成员!”消息。

控制器

public function store()
{
    $customer = Customer::create($this->validatedData());

    foreach ($customer as $customers) {
        Mail::to($customers->email)->send(new WelcomeMail());
    }

    return redirect('/customers');
}

【问题讨论】:

  • 我建议你创建一个工作,这个工作负责向所需用户发送电子邮件。为什么要用这个?如果你有 10k 或更多用户,你必须在这里调用 mail 函数,如果发生任何事情,它会阻止你不知道在哪里,但是有一个工作,你可以重试工作
  • 请使用一些服务批量发送邮件。强烈建议不要使用 PHP 脚本发送大量电子邮件,尤其是因为它的时间限制和other factors mentioned here。 Mailchimp 看起来不错mailchimp.com

标签: php laravel laravel-mail


【解决方案1】:

这里你的代码是正确的,但不完全

所以我修改了它

现在你需要创建一个 Job 文件使用

php artisan make:job WelcomeMessage 然后运行

 php artisan migrate

发送邮件

use App\Job\WelcomeMessage;

public function store()
{

$customer = Customer::create($this->validatedData());

if ($customer) {
    $allUser = Customer::where('id', '!=', $customer->id)->get();

    $html = "Your html file with mail content";
    $sub  = "Welcome Mail";

    foreach($allUser as $allUsers){

     Mail::to($allUsers->email)->send(new WelcomeMessage($html,$sub));

    }
}


return redirect('/customers');

}

如果您运行此命令php artisan make:job WelcomeMessage,那么它将在 app\Job 文件夹中创建页面。然后将以下代码粘贴到该页面上。

<?php

namespace App\Emails;

use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Contracts\Queue\ShouldQueue;

class UserVerificationMail extends Mailable
{

    use Queueable, SerializesModels;
    public $subject;
    public $file;
    /**
     * Create a new message instance.
     *
     * @return void
     */
    public function __construct($file,$subject)
    {
        $this->subject  = $subject;
        $this->file     = $file;
    }

    /**
     * Build the message.
     *
     * @return $this
     */
    public function build()
    {
      return $this->from(env('MAIL_FROM_ADDRESS'), env('APP_NAME'))
        ->subject($this->subject)
        ->markdown($this->file);
    }
}

然后运行php artisan queue:listen

这会起作用

谢谢

【讨论】:

    猜你喜欢
    • 2014-11-23
    • 1970-01-01
    • 2016-12-14
    • 2013-12-03
    • 2010-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多