1

laravel とは異なる資格情報を使用して、何百ものメールを送信する必要があります。私の顧客はそれぞれ自分のメールリストを持っており、独自の SMTP サーバーを提供する必要があります。私はそのリストを処理し、顧客に代わって電子メールを送信します。

これは私がこれまでに持っているものです。動作していますが、非常に遅く、今のところメールはあまりありません。より多くの電子メールを受信すると、問題が発生します。改善方法に関する提案はありますか?

PS- cron コンソール コマンドを使用し、カーネルを使用してジョブをスケジュールします。

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

2 に答える 2

0

電子メール プロバイダーの構成をオンザフライで変更することはできないため、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');
}
于 2016-07-20T10:12:26.723 に答える
0

Web アプリで電子メール メッセージを直接送信すると、アプリケーションの応答性が大幅に低下する可能性があります。メッセージは常にキューに入れる必要があります。

の代わりにMail::send使用できますMail::queue

次に、cronから、または手動で呼び出します

php artisan queue:work

これにより、キューの次のアイテムが処理されます。キューが空の場合、このコマンドは何も実行しません。ただし、キューに項目がある場合は、項目を取得して実行しようとします。

于 2016-07-19T17:56:40.873 に答える