大家好,我正在开发一个使用 devise 向注册用户发送确认电子邮件的 Rails 应用程序。该应用程序正确响应开发环境,并且邮件可以被mailcatcher捕获。推送 heroku 后,我的日志显示 SMTPAuthentication 错误,每次注册用户时都会导致 500 服务器错误。日志还显示消息在错误弹出之前已发送。
2020-02-23T16:04:03.373626+00:00 app[web.1]:
2020-02-23T16:04:03.373627+00:00 app[web.1]: <p>You can confirm your account email through the link below:</p>
2020-02-23T16:04:03.373627+00:00 app[web.1]:
2020-02-23T16:04:03.373628+00:00 app[web.1]: <p><a href="https://own-your-life-campaign.herokuapp.com//users/confirmation?confirmation_token=dsbs-bckkBo-qTcuoNLa">Confirm my account</a></p>
2020-02-23T16:04:03.373629+00:00 app[web.1]:
2020-02-23T16:04:03.373629+00:00 app[web.1]: [12fef5ae-b267-4f98-a4e9-8dd25b6b077b] Completed 500 Internal Server Error in 152ms (ActiveRecord: 5.4ms)
2020-02-23T16:04:03.373630+00:00 app[web.1]: [12fef5ae-b267-4f98-a4e9-8dd25b6b077b]
2020-02-23T16:04:03.373630+00:00 app[web.1]: [12fef5ae-b267-4f98-a4e9-8dd25b6b077b] Net::SMTPAuthenticationError (530-5.7.0 Authentication Required. Learn more at
2020-02-23T16:04:03.373631+00:00 app[web.1]: ):
这是我在 environment/production.rb 文件上的 action mailler SMTP 配置。
# ActionMailer Config
config.action_mailer.default_url_options = {
:host => 'https://own-your-life-campaign.herokuapp.com/'
}
config.action_mailer.delivery_method = :smtp
config.action_mailer.perform_deliveries = true
ActionMailer::Base.smtp_settings = {
:user_name => ENV['SENDGRID_USERNAME'],
:password => ENV['SENDGRID_PASSWORD'],
:domain => 'own-your-life-campaign.herokuapp.com',
:address => 'smtp.sendgrid.net',
:port => 587,
:authentication => :plain,
:enable_starttls_auto => true
}
我还在heroku上添加了SendGrid插件并生成了用户名和密码,这是我在heroku上的环境变量示例。出于安全原因,我省略了我的密钥库和 SENDGRID_API 密钥。
SECRET_KEY_BASE: ------------------------------------------------------------------
SENDGRID_API_KEY: -------------------------------------------------------------------
SENDGRID_PASSWORD: -------------------------------------
SENDGRID_USERNAME: --------------------------------------
创建 SendGrid api 密钥后,我在他们的平台上对其进行了验证,它给了我一个 200 状态确认这是好的。我还将 Api 密钥设置更改为完全访问权限。我不知道我是否需要在他们的平台上做进一步的设置才能让我的发布请求正确地从我的 rails 应用程序进行身份验证,或者这是使用免费计划的事实?