【问题标题】:Delay due to email send PHP CodeIgniter由于电子邮件发送 PHP CodeIgniter 导致延迟
【发布时间】:2018-02-26 15:17:48
【问题描述】:

首先,我要感谢 StackOVerflow 及其用户帮助我解决了许多技术问题。我今天创建了这个帐户,因为我没有看到类似的问题得到解决。

问题 - 我遇到了在 PHP CodeIgniter 中发送电子邮件的问题。函数 $this->email->send() 每次执行大约需要 3-4 秒。

我们有一个社交平台,用户可以在这里发布内容。每次用户上传新的更新时,我们都想向他/她发送一封电子邮件。 问题是发送电子邮件功能大约需要 3-4 秒,我们希望将其降低到 1 秒以下。

有什么方法可以让我们并行执行发送电子邮件的过程?假设一个 python 代码持续运行以获取新的更新并向这些用户发送电子邮件。还有比这更好的方法吗?

技术栈 - PHP CI、MySQL、Apache、Windows

这是每次更新时都会调用的电子邮件代码 -

$config = Array(
        'protocol'  => 'smtp',
        'smtp_host' => 'smtp.gmail.com',
        'smtp_port' => 587,
        'smtp_user' => 'mailid@gmail.com',
        'smtp_pass' => 'password',
        'mailtype'  => 'html',
        'charset'   => 'utf-8',
        'smtp_crypto' => "tls"
        );

$this->load->library('email', $config);
$this->email->set_newline("\r\n");
$this->email->set_mailtype("html");
$this->email->from('mailid@gmail.com', 'Support');
$this->email->to($this->session->userdata['email']);
$this->email->subject('You have posted a new update');
$this->email->message('Please login to check your new update. Do not reply to this email. For any issues reach out to email@emailid.com');

if (!$this->email->send())
{
    show_error($this->email->print_debugger());
}
else
{
    echo true;
}

【问题讨论】:

  • 您好,那太好了,如果您找到答案,请告诉我们。但我认为这可能是一个很好的等待时间,即使你从 hotmail 或 gmail 发送电子邮件我认为我需要超过 1 分钟。
  • 我建议您使用异步函数来发送电子邮件。这将帮助您更快地完成逻辑并提供快速响应。更多信息可以查看stackoverflow.com/questions/13846192/…
  • 感谢您的回复。将尝试异步方法。
  • 发送功能是如何工作的?当用户在同一功能中更新状态时,它会通过电子邮件发送给他们?像这种方式还是你稍后检查是否有任何新状态?
  • 是的。当用户点击帖子时,将调用一个函数。此功能将插入数据库,然后发送电子邮件。此操作成功后,调用 ajax 函数刷新帖子,以便用户看到最新帖子。

标签: php codeigniter email


【解决方案1】:

如果您的功能运行速度较快,但电子邮件发送速度较慢,则可能是您的 smtp 连接有问题。您的服务器无法快速连接 SMTP,或者您使用的 SMTP 响应速度较慢。 在这种情况下,请尝试使用 gmail SMTP 并查看结果。

【讨论】:

  • 感谢您的回复。我在我的配置变量中使用 gmail smtp 服务器。 'smtp_host' => 'smtp.gmail.com', 'smtp_port' => 587,
  • 试试你的服务器 smtp 看看结果。
  • 另外:你的服务器使用了多少内存?
  • 它的 EC2 微型实例具有 1 GB 内存
【解决方案2】:

我建议将电子邮件存储在数据库中并使用 cron 作业发送电子邮件。
上传用户不应等待一次发送一封电子邮件。

如果您需要 cron 工作或 smtp mailer 的代码,请在此答案中添加评论。

【讨论】:

  • 感谢您的回答。这种方法的唯一问题是我需要不断地 ping 数据库以检查是否有任何更新。这可能会使我的数据库变慢。此外,如果多个用户同时进行更新,则可能会出现死锁。
  • 检索未发送的电子邮件并设置限制 10 ,并将 cron 作业时间设置为 30 秒。
  • @user8625111 它在我的项目中工作正常。并删除发送的电子邮件
  • 您能否详细说明您的解决方案。假设用户 A 已将他的状态更新为“测试更新”。然后我应该将它存储在一个表 email_params 中,列“to”作为 userA_email,列“body”作为“测试更新”。现在您是否建议我运行一个 cron 或 python 代码,从该表中获取并发送电子邮件,然后删除该条目?
  • @user8625111 是这样的,如果你附加一些文件然后保存在某个地方,最好运行单独的 cron 来删除电子邮件,一天中的某个时间点一个
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-12-12
  • 1970-01-01
  • 2012-06-26
  • 2018-01-17
  • 2010-10-08
  • 2011-07-01
  • 2016-09-28
相关资源
最近更新 更多