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

12

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

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

问题在于上述函数需要至少5秒才能完成处理。

问题:是否有提供异步方法的交付,以便我无需等待响应?


奖励更新

是否有人能够为在本地主机和Godaddy上设置队列的步骤提供逐步指南?


你使用的是哪个邮件驱动程序? - Marcel Gwerder
1
你有没有考虑使用基于API的邮件提供商?例如Mandrill或Mailgun。这意味着您不必等待消息发送,也不必担心在您的端口排队,而且它们分别是便宜或免费的。 - James
@James:你能否添加在Laravel 5.2中使用它的示例代码?我会接受它。 - Pankaj
@Helper,您是想要一个使用电子邮件排队或使用基于API的电子邮件提供商并以此方式发送电子邮件的示例吗?我很乐意提供API发送设置,但实际上我从未使用过电子邮件排队。我曾经研究过它,但最终选择了使用基于API的提供商,因为这样可以节省排队时间,并让提供商为我管理这个过程。 - James
不必使用 Mail::queue。我正在寻找任何免费可用的东西。 - Pankaj
2个回答

8

根据您使用或必须使用的邮件驱动程序,可能有其他选项可提高性能。但是,保持UI响应最有效的方法是将邮件消息加入队列

在您的代码中,这只需要简单地进行以下操作:

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

你需要设置队列,但在一些托管服务器上可能无法正确地完成此操作。请参考Laravel 5.1 官方文档进行设置。

1
我是在Helper的请求下发布这篇文章,以演示一种API方法。
由于他们需要免费使用的东西,Mailgun 可能是最好的选择,因为您每个月可以免费发送10,000封电子邮件,然后支付每封电子邮件的少量费用。 Laravel已经内置了准备好的驱动程序,可以轻松集成到Mailgun中,因此开始使用实际上非常容易。
首先,您只需要注册一个Mailgun帐户并设置您的域:
  1. 注册Mailgun
  2. 在Mailgun上设置您的域
  3. 验证域并更新您的DNS记录以证明所有权并允许SPF和DKIM身份验证
完成后,您只需要配置应用程序以使用它。 本指南 很好地涵盖了Laravel上Mailgun的配置,但基本上您需要:
  1. 如果你通过Mailgun API发送邮件进行排队和发送,请添加Guzzle(如果你还没有它)composer require "guzzlehttp/guzzle=~5.0"
  2. 确保你的config/services.php文件与以下配置匹配,这样我们就可以将详细信息保存在.env文件中以保证安全性。

i.e

'mailgun' => [
    'domain' => env('MAILGUN_DOMAIN'),
    'secret' => env('MAILGUN_SECRET'),
  ],
  1. 将必要的字段添加到我们的.env文件中,并填入正确的值。

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

有没有其他选项是100%免费使用的? - Pankaj

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