php - 使 PHP 的 mail() 异步

标签 php email amazon-web-services asynchronous amazon-ses

我有 PHP 的 mail() 使用 ssmtp它没有队列/假脱机,并且与 AWS SES 同步。

我听说我可以使用 SwiftMail提供一个线轴,但我无法像目前使用 mail() 那样想出一个简单的方法来使用它。

我希望用最少的代码来提供异步邮件。我不在乎邮件是否发送失败,但如果有日志就好了。

有什么简单的提示或技巧吗?缺少运行完整的邮件服务器?我在想 sendmail 包装器可能是答案,但我无法解决 nohup

最佳答案

你有很多方法可以做到这一点,但处理线程不一定是正确的选择。

  • register_shutdown_function :响应发送后调用关闭函数。它不是真正的异步,但至少不会减慢您的请求。关于实现,请参见示例。
  • Swift pool :使用symfony,你可以很方便的使用spool。
  • Queue:在队列系统中注册要发送的邮件(可以使用 RabbitMQ、MySQL、redis 或任何东西来完成),然后运行使用队列的 cron。可以用像 MySQL 表这样简单的东西来完成,其中包含 fromtomessagesent(发送电子邮件后, bool 值设置为 true)。

register_shutdown_function 示例

<?php
class MailSpool
{
  public static $mails = [];

  public static function addMail($subject, $to, $message)
  {
    self::$mails[] = [ 'subject' => $subject, 'to' => $to, 'message' => $message ];
  }

  public static function send() 
  {
    foreach(self::$mails as $mail) {
      mail($mail['to'], $mail['subject'], $mail['message']);
    }
  }
}

//In your script you can call anywhere
MailSpool::addMail('Hello', 'contact@example.com', 'Hello from the spool');


register_shutdown_function('MailSpool::send');

exit(); // You need to call this to send the response immediately

关于php - 使 PHP 的 mail() 异步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36540651/

相关文章:

c# - 使用 itext7 从 pdf 中的数字签名中提取电子邮件地址

php - 如何循环$_GET获取所有数据

python - .htaccess 在弹性 beantalk python 上的位置

php - 水蛭怎么能做到这一点?

php - 在从 IIS 托管站点连接的 NodeJS 上对用户进行身份验证

php - 我收到来自 php 和 js 的空白邮件

amazon-web-services - 如何在aws中获取云形成中的访问 key 和 secret key

php - 类别基础不起作用(永久链接)

c# - 如何使用 OpenPop 保存电子邮件附件

mysql - AWS SSH 和 RDS 权限被拒绝 - 公钥