首页 > 解决方案 > 在 Heroku 上使用 Rails ActionMailer 时如何避免 500 内部服务器错误

问题描述

我正在尝试在我的 Web 应用程序中注册时向用户发送一封电子邮件,该应用程序是在后端使用 Rails 构建的,在前端使用 React-Redux。我在本地服务器上测试时使用了一个 gem letter_opener,一切似乎都运行良好。当我在 Heroku 上实时尝试时,我得到了 500 错误,我不确定出了什么问题。

我尝试阅读 ActionMailer 文档,但似乎没有提到任何这样的问题。

UserMailer中的方法:

def welcome_email(user)
    @user = user
    mail(to: @user.email, subject: "Welcome")
end

相关代码UsersController

def create
   # ...
   email = UserMailer.welcome_email(@user)
   email.deliver_now   # This line throws the error
   # ...
end

Heroku 日志中的错误:

Errno::ECONNREFUSED (Connection refused - connect(2) for "localhost" port 25):

我希望这封电子邮件能够送达,或者至少会有更多信息性的错误消息。我不确定为什么 Rails 会查看 localhost 的 25 端口。

标签: ruby-on-railsheroku

解决方案


我不确定为什么 Rails 会查看 localhost 的 25 端口。

ActionMailer默认为localhost:25,您可能只更改了开发配置。

Errno::ECONNREFUSED(连接被拒绝 - “localhost”端口 25 的连接(2))

Heroku 不提供 SMTP 服务器,而且localhost. 使用您选择的电子邮件插件或其他第三方邮件服务。

您可能必须修改config/environments/production.rb以使用您选择的任何邮件服务。


推荐阅读