gpt4 book ai didi

php - 使 PHP 的 mail() 异步

转载 作者:IT王子 更新时间:2023-10-29 00:00:34 24 4
gpt4 key购买 nike

我有 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com