问题描述
我正在尝试构建一个可以处理入站邮件的Rails应用。我使用Rails指挥和操作邮箱在本地计算机上运行了该应用程序。发送电子邮件后,我可以保存电子邮件的内容。但是我很难在生产环境中使用它……我不确定如何配置域和设置以使其正常工作。
我一直按照这里的说明进行操作: https://edgeguides.rubyonrails.org/action_mailbox_basics.html#sendgrid 和https://sendgrid.com/docs/for-developers/parsing-email/setting-up-the-inbound-parse-webhook/
我已将此包含在我的rails凭证中:
action_mailBox: ingress_password:mypassword
我已经在Google域上设置了MX记录:
parse.[mydomain].com
我指向了主机名和URL。
https://actionmailBox:mypassword@parse.[mydomain].com/rails/action_mailBox/sendgrid/inbound_emails
parse@parse.[mydomain].com
但是我无法测试或跟踪此电子邮件的状况。我没有收到回信中的错误消息,因此我认为这是一个好兆头,但是我不确定是否正在处理它或如何进行故障排除。我什至在我的replies_mailBox.rb文件中放置了一个puts“ test”,但是当我拖尾登录生产时,控制台中什么都没有。
关于我可以采取哪些下一步措施的任何建议?
解决方法
在进行集成测试时,按照电子邮件路径的顺序将问题分成多个小问题很有用
- 通常在编辑区域时检查mx dns记录是否已传播-其他dns服务器可能仍会响应旧记录,直到区域TTL通过(通常设置为几个小时),然后使用一些远程dns检查器
- 检查sendgrid设置(包括actionmailbox期望的“发布原始的完整MIME消息”,以便sendgrid张贴“电子邮件”字段)
- 检查电子邮件是否已被sengrid中的垃圾邮件过滤器丢弃
- 检查请求是否存在于您的Web服务器/反向代理日志中(如nginx,如果您使用的话)
- 尝试模仿sendgrid的请求,以检查您的应用程序是否接受它(并且它是否在日志中),rails仅读取
params[:email]
,其他字段不是必需的:curl -X POST "https://actionmailbox:mypassword@parse.[mydomain].com/rails/action_mailbox/sendgrid/inbound_emails" \ -F email="From: foo <abc@localhost>\nTo: bar <bca@localhost>\nSubject: test\nMIME-Version: 1.0\n\nTest!"
我将从#5开始,以确保您的应用正确接收电子邮件并包含日志,然后继续运行。
PS。根据您的日志记录设置,puts
可能不会出现在生产中的日志中(或者不在您期望的位置出现)。更好的方法是使用Rails.logger.info