Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 从rails或actionmailer发送的电子邮件状态_Ruby On Rails_Actionmailer - Fatal编程技术网

Ruby on rails 从rails或actionmailer发送的电子邮件状态

Ruby on rails 从rails或actionmailer发送的电子邮件状态,ruby-on-rails,actionmailer,Ruby On Rails,Actionmailer,我正在开发一个测试应用程序,并在我的工作pc上运行整个程序。我正在使用我的公司邮件服务器发送邮件。它正常工作。我想知道如何处理任何情况,如邮件服务器无法从我的电脑。 据我所知,rails应用程序只发送邮件,仅此而已。无法知道邮件是否到达收件人,收件人邮件id是否正确等。 有没有关于如何处理这种情况的想法? 感谢和问候, Anjali我考虑过这个问题。我的想法是将消息存储到一个名为“mailqueue”的单独模型中,然后运行一个ruby脚本,只有在公司邮件服务器可用的情况下(我相信我已经有了这样做

我正在开发一个测试应用程序,并在我的工作pc上运行整个程序。我正在使用我的公司邮件服务器发送邮件。它正常工作。我想知道如何处理任何情况,如邮件服务器无法从我的电脑。 据我所知,rails应用程序只发送邮件,仅此而已。无法知道邮件是否到达收件人,收件人邮件id是否正确等。 有没有关于如何处理这种情况的想法? 感谢和问候,
Anjali

我考虑过这个问题。我的想法是将消息存储到一个名为“mailqueue”的单独模型中,然后运行一个ruby脚本,只有在公司邮件服务器可用的情况下(我相信我已经有了这样做的代码)才会从该邮件队列中拉取和删除消息。当然,如果有更好的方法,我也会欢迎的。

我相信你在这里把两个问题混在一起了,这两个问题实际上是毫不相关的

第一个问题-确保公司邮件服务器接受了电子邮件(本例中为邮件中继)。要解决这个问题,您可以构建一个本地消息队列(将它们存储在数据库、队列服务器等中),并使用一个单独的工作进程发送它们,该进程将从队列中提取每条消息,尝试传递该消息,并仅在邮件中继接受该消息时将其删除

或者,如果您不需要对流程进行低级手动控制,您可以在您的计算机上设置一个简单的本地邮件服务器,而如果直接向您的公司邮件中继发送电子邮件,只需将其发送到您的本地邮件服务器即可。然后,它将确保电子邮件被正确地发送给公司

但在这两种情况下,您都无法获得有关邮件发送到最终收件人的位置的任何信息,如电子邮件地址是否有效、用户邮箱是否已满等

第二个问题-跟踪邮件传递错误。要正确彻底地解决此问题,您需要捕获从远程服务器返回给您的所有邮件并对其进行分析,因为在发送电子邮件时,许多错误是未知的,但它们稍后会以邮件反弹的形式返回。如果您捕获并跟踪这些反弹,您将能够捕获错误,如邮箱、无效电子邮件、只是暂时的传递失败等


这是邮件列表管理软件的工作方式——例如,phpList的工作方式与此完全相同。

当然。不过,你不需要自己做这件事,周围已经有很多邮件队列了。每一个非平凡的SMTP服务器都能做到这一点:)足够公平。这绝对是一条路,尽管出于某种原因,我提到上述内容是有原因的。别担心。最近,我们在工作中进行了讨论,有人建议在rails中实现一个队列,用来保存电子邮件,以便我们以后发送它们。如果生成邮件是一个问题(因为,比方说,将模型转换为最终电子邮件的代码),那么队列肯定是一个不错的选择。为此,人们通常使用delayedjob或resque。)