【问题标题】:Sending bulk emails using different credentials使用不同的凭据发送批量电子邮件
【发布时间】:2016-11-22 17:57:03
【问题描述】:

我需要使用来自 laravel 的不同凭据发送数百封电子邮件。 我的每个客户都有他/她的邮件列表,需要提供自己的 SMTP 服务器。我代表客户处理该列表并发送电子邮件。

这是我目前所拥有的。它正在工作,但速度很慢,到目前为止我没有很多电子邮件。当我收到更多电子邮件时,我发现了一个问题。 有什么改进的建议吗?

PS- 我使用 cron 控制台命令并使用 Kernel 来安排作业。

public function sendMailings($allMailings) {

    foreach ($allMailings as $email) {
        Config::set('mail.host', $email['smtpServer']);
        Config::set('mail.port', $email['smtpPort']); 
        Config::set('mail.username', $email['smtpUser']);
        Config::set('mail.password', $email['smtpPassword']); 
        Config::set('mail.encryption', $email['smtpProtocol']);            
        Config::set('mail.frommmail', trim($email['fromEmail'])); 
        Config::set('mail.fromuser', trim($email['fromUser'])); 
        Config::set('mail.subject', trim($email['subject'])); 
        Config::set('mail.toEmail', trim($email['toEmail'])); 
        Config::set('mail.toName', trim($email['toName'])); 
        Config::set('mail.pretend', false); 

        $email_body = $email['emailBody'];

        Mail::send('emails.availability, compact('email_body')
                , function($message) {
            $message->from(config('mail.username'), config('mail.fromUser'));
            $message->replyTo(config('mail.frommmail'), config('mail.fromUser'));
            $message->to(config('mail.toEmail'), config('mail.toName'))->subject(config('mail.subject'));
        }); 
        Log::info('Mail was sent');
    }
}

【问题讨论】:

    标签: php laravel email laravel-5 bulk-email


    【解决方案1】:

    您不能即时更改电子邮件提供商配置,因此您必须在服务容器中创建 mailer 的新实例。我以前做过,我在自己的类中编写了一个方法来获取新的邮件程序实例:

     /**
     * @return Mailer
     */
    protected function getMailer()
    {
        // Changing mailer configuration
        config(['mail.driver' => static::getName()]);
    
        // Register new instance of mailer on-the-fly
        (new MailServiceProvider($this->container))->register();
    
        // Get mailer instance from service container
        return $this->container->make('mailer');
    }
    

    【讨论】:

      【解决方案2】:

      直接在 Web 应用程序中发送电子邮件消息会大大降低应用程序的响应速度。您应该始终将消息排队。

      你可以使用Mail::queue代替Mail::send

      然后从cron或者手动调用

      php artisan queue:work

      这将处理队列中的下一个项目。如果队列为空,此命令将不执行任何操作。但是如果队列中有一个项目,它将获取该项目并尝试执行它。

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-04-04
      • 2010-12-11
      • 2023-03-28
      • 2018-01-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多