在 Laravel 中,电子邮件发送的最大收件人数量是多少?

3

我正在尝试使用Laravel Mailable 给所有客户发送邮件,我的邮件结构如下。

<?php

namespace App\Mail;

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

/**
 * Class BroadcastEmail
 * @package App\Mail
 */
class BroadcastEmail extends Mailable
{
    use Queueable, SerializesModels;

    /**
     * @var
     */
    private $title;

    /**
     * @var
     */
    private $body;

    /**
     * Create a new message instance.
     *
     * @param $title
     * @param $body
     * @return void
     */
    public function __construct($title, $body)
    {
        $this->title = $title;
        $this->body = $body;
    }

    /**
     * Build the message.
     *
     * @return $this
     */
    public function build()
    {
        return $this->subject($this->title)->view('emails.broadcast')->with(['body' => $this->body]);
    }
}

我已使用以下代码发送电子邮件。
Mail::to($recipients)->send(new BroadcastEmail($title, $message));

这里的$recipients变量是客户邮件的数组,未来其大小可能超过10,000。Mail Facede可以处理发送电子邮件的$recipients数组的最大大小是多少?
我已经阅读了Laravel邮件文档,但仍然无法弄清楚。欢迎任何建议和帮助。

你尝试过使用 implements ShouldQueue 吗?此外,你也可以向一组用户发送电子邮件。 - Prafulla Kumar Sahu
@Prafulla Kumar Sahu,这不是关于队列的问题。他正在询问可以在单个请求中发送的收件人数量。 - ManojKiran A
4个回答

5
拉拉维尔不会限制收件人的数量。该限制由邮件提供商设定,但没有标准规定。
大多数提供商允许最多100个收件人(To + CC + BCC),但也有一些提供商允许更多的收件人。但是,如果您向一个不允许这么多收件人的邮箱发送超过100个收件人的邮件,则可能无法成功送达。
对于这种情况,最好的解决方案是分批发送少量的邮件。这将使处理更快,并确保邮件正确到达。

3
请确保不要将客户的电子邮件地址发送给其他客户,即在任何情况下都不要使用“to”,而是使用“bcc”。 - Namoshek
@Namoshek,我需要发送单独的通知邮件,所以密送对我没用 ;) - Sagar Gautam
@Namoshek,抱歉,我的意思是向多个客户发送相同的电子邮件。我不熟悉bcc和cc的使用。 - Sagar Gautam
3
在这种情况下,你应该一定使用bcc。如果你把所有客户添加到“收件人”字段中,所有客户都会看到其他客户的电子邮件地址,并且你会有一个巨大的安全漏洞。 - Jerodev
@Jerodev 好的,我会做到。 - Sagar Gautam
显示剩余2条评论

0

邮件数量并不固定。这完全取决于您的服务器规格。除非由于某些配置而被php.ini停止,否则邮件将继续发送。因此,发送电子邮件的数量没有固定值。


这完全取决于你的服务器规格... 真的吗?再读一遍被接受的答案。 - B001ᛦ
是的,我们的工具每天会向公司所有员工发送电子邮件,大约有1000个用户。我希望这能消除你的疑虑。我自己测试过同时向400个用户发送电子邮件。 - Ankush Sood
我希望这能够消除你的疑虑...不!这与我上面的评论无关。 - B001ᛦ
抱歉,我只在专用服务器上工作,不在共享主机上工作。 - Ankush Sood

0

将邮件分为50个或更少的一组发送,因为Postmark和其他邮件系统一次不接受超过50个收件人。

例如:

// Send emails in batches of 25 users at a time.
$users->chunk(25)->each(function ($userBatch) use ($customMessage) {
  Mail::queue(new NotifyUsers($userBatch, $customMessage));
});

有些限制远低于50。我曾经不得不处理某些供应商每次只能处理10个的限制。 - Moshe Katz

0
我在我的项目中使用 mailtrap 测试电子邮件时遇到了同样的问题,这里是一个关于如何在本地主机上发送邮件的快速解决方法。
在我的 Listener 中,我向用户发送电子邮件(超过 400 用户),我使用 Laravel 的 report 助手和 try-catch 循环,在这里,如果其中一封邮件发送失败,电子邮件发送功能不会失败。
try{
   Mail::to($user)->send(new NewsEmail($user, $news));
}catch (\Exception $e){
   report ($e)
} 

报告助手函数允许您在不渲染错误页面的情况下,使用异常处理程序的报告方法快速报告异常。有关详细信息,请参阅官方文档


嗯,在我的项目中,这个逻辑比较复杂。我添加了一个函数来将所有发送失败的电子邮件存储在数据库表中,而不是使用 report() 方法。因此,当由于某些原因无法发送电子邮件时,它会带着异常信息被储存在表中,并且下一封电子邮件会排队等待发送。 - zlatan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接