在Laravel 5.1中发送电子邮件时的性能问题

时间:2015-12-26 01:18:27

标签: php laravel-5 laravel-5.1

我使用以下代码在Laravel 5.1中发送电子邮件

Mail::send('Project.Emails.Award', $data, function($message) 
{
    $message
            ->to('EmailAddress', 'EmailAddress')
            ->subject('hi');
});

这里的问题是上述功能需要最少5秒才能完成处理。

问题:是否提供异步方法,我不需要等待响应?

Bounty的更新

有人可以提供有关在Localhost和GoDaddy上排队设置的分步指南吗?

2 个答案:

答案 0 :(得分:8)

根据您使用的或您必须使用的邮件驱动程序,可能还有其他选项可以提高性能。但是,保持UI响应的最有效方法是queueing the mail messages

使用您的代码,这将非常简单:

/Home/Index

您虽然需要设置queueing,但您无法在某些托管服务器上正常执行此操作。

答案 1 :(得分:0)

我应Helper的要求发布此信息,并演示API方法。

由于他们可以免费使用,Mailgun可能是最佳选择,因为您每月可以免费获得10,000封电子邮件,然后在每封电子邮件之后支付少量费用。

Laravel ships with the drivers ready已经集成到Mailgun,所以开始实际上非常容易。

首先,您只需注册一个Mailgun帐户并设置您的域名:

  1. Register for Mailgun
  2. 在Mailgun上设置您的域名
  3. 验证域并更新DNS记录以证明所有权并允许SPF和DKIM身份验证
  4. 完成后,您只需配置应用程序即可使用它。 This guide很好地涵盖了Laravel上Mailgun的配置,但基本上是你:

    1. 添加Guzzle如果您还没有它(因为您通过API向Mailgun发送电子邮件以排队并发送)composer require "guzzlehttp/guzzle=~5.0"
    2. 确保您的config/services.php文件符合以下配置,以便我们可以保证我们的详细信息安全并将其存储在.env文件中
    3. 'mailgun' => [
          'domain' => env('MAILGUN_DOMAIN'),
          'secret' => env('MAILGUN_SECRET'),
        ],
      
      1. 将必要的字段添加到我们的.env文件中,并使用正确的值填充它们
      2. e.g

        MAIL_DRIVER=mailgun
        MAIL_HOST=smtp.mailgun.org
        MAIL_PORT=587
        MAIL_USERNAME=XXX
        MAIL_PASSWORD=XXX
        MAIL_ENCRYPTION=tls
        MAILGUN_DOMAIN=THE-DOMAIN-SETUP-IN-MAILGUN
        MAILGUN_SECRET=THE-API-KEY-FOR-DOMAIN
        

        一旦你完成了所有操作,那么你只需使用Mail::send()命令就可以像以前一样发送电子邮件 - 但是现在它会立即发送(取决于你的服务器 - 我的很漂亮)基本并立即发送电子邮件):

        Mail::send('Project.Emails.Award', $data, function($message) 
        {
            $message
                    ->to('EmailAddress', 'EmailAddress')
                    ->subject('hi');
        });