我刚刚在Bloc完成了我的红宝石基础课程,我开始把头埋进轨道开发中。事情进展顺利,直到我用设计和确认电子邮件打到这个障碍。我尝试使用Google搜索并查看其他一些问题,但无法找到任何可以提供给我的任何内容并适用于我的情况。
我在注册帐户时收到以下错误。
从#976行
附近的源代码中提取错误def check_auth_response(res)
unless res.success?
raise SMTPAuthenticationError, res.message
end
end
从其他帖子我知道你可能想看到我有一个如下所示的config / initializers / setup_mail.rb文件:
if Rails.env.development?
ActionMailer::Base.delivery_method = :smtp
ActionMailer::Base.smtp_settings = {
address: 'smtp.sendgrid.net',
port: '587',
authentication: :plain,
user_name: ENV['SENDGRID_USERNAME'],
password: ENV['SENDGRID_PASSWORD'],
domain: 'heroku.com',
enable_starttls_auto: true
}
end
这是一个application.yml文件示例:
SENDGRID_PASSWORD:
SENDGRID_USERNAME:
SECRET_KEY_BASE:
我的config / environments / development.rb中还有以下内容,然后才有人提出建议:
config.action_mailer.default_url_options = { host: 'localhost:3000'}
config.action_mailer.delivery_method = :smtp
config.action_mailer.perform_deliveries = true
# Override Action Mailer's 'silent errors' in development
config.action_mailer.raise_delivery_errors = true
如果您希望看到任何其他文件,请告知我们,我会将其添加到此帖子中。
答案 0 :(得分:8)
恭喜并欢迎光临黑客的世界。
您获得的错误意味着SendGrid服务器收到了错误的用户名+密码组合。
您的环境变量是空的,您的application.yml
文件无法使用您的SendGrid用户名+密码正确加载。
您可以通过在代码中的某处打印出来进行确认。在控制器中工作。
puts "SENDGRID_USERNAME: #{ENV['SENDGRID_USERNAME']}"
puts "SENDGRID_PASSWORD: #{ENV['SENDGRID_PASSWORD']}"
我怀疑他们是零。
我建议您阅读https://quickleft.com/blog/simple-rails-app-configuration-settings/,了解如何将这些内容发送到您的应用中。
如果您需要更多帮助,请与我们联系!
答案 1 :(得分:6)
自 2020 年第四季度起需要双重身份验证,所有 Twilio SendGrid API 端点将拒绝新的 API 请求和 SMTP 通过 Basic 使用用户名和密码进行配置 身份验证。
我从过去几年一直运行的应用中收到了类似的问题。从现在开始,基本身份验证不起作用,您需要使用替代身份验证机制。 Heroku sendgrid 安装时的自动配置尚未更新以反映这一点。
答案 2 :(得分:0)
在我的情况下,错误是将我的 apikey 的 id 用作用户名,但这是错误的,正确的值 user_name 是 'apikey',(字面意思是 'apikey' 字符串),正如他们在集成示例中所说, https://sendgrid.com/docs/for-developers/sending-email/rubyonrails/ https://app.sendgrid.com/guide/integrate/langs/smtp
ActionMailer::Base.smtp_settings = {
:user_name => 'apikey', # This is the string literal 'apikey', NOT the ID of your API key
:password => '<SENDGRID_API_KEY>', # This is the secret sendgrid API key which was issued during API key creation
:domain => 'yourdomain.com',
:address => 'smtp.sendgrid.net',
:port => 587,
:authentication => :plain,
:enable_starttls_auto => true
}