从这样的另一个线程发送电子邮件是没关系的吗?

在一个网站,有时发送电子邮件需要几秒钟,所以我需要从另一个线程发送电子邮件,不要等到电子邮件发送。

我在stackoverflow上找到了这个答案 ,以这种方式做到这一点很好,因为每次请求我只会发送一封电子邮件吗?

或者还有另一种标准方法可以做到这一点?

如果可能,您应该设置一个仅侦听环回地址(127.0.0.1)的本地SMTP服务器,因为这正是邮件队列的用途。 您可以将SMTP服务器配置为通过真实的出站邮件服务器进行中继,这样您就不会遇到SPF将邮件视为垃圾邮件的问题。

通过这种方式,您的应用程序可以快速对出站邮件进行排队,并以快乐的方式进行排序,您可以合理地确定即使在负载过重,网络问题甚至崩溃的情况下,最终也会传递邮件。

从请求处理程序内部生成新线程是有潜在危险的:如果你的流量高峰,你可能会发现自己创建了足够的线程,使得尖峰变得更糟。

更好的方法是通过诸如beanstalkd或其他消息队列之类的工具将邮件发送到另一个进程或使用系统提供的mail命令(我的Linux系统的mail(1)命令可以在.07秒内排队电子邮件,足够适用于中等邮件负载)。

衡量您期望的流量。 如果它是一个只能由几十个人使用的内部工具,那么产生新线程可能就好了。 如果它暴露在严重的坏世界中,我建议采用更强大的排队机制,这对机制资源的影响较小。