【发布时间】:2021-08-13 09:56:25
【问题描述】:
我正在尝试设置 SendGrid 以通过 Sinatra 应用程序中的简单 Web 表单发送电子邮件。
我在 Heroku 中启用了 SendGrid 插件,并通过 heroku config 检查了环境变量; SENDGRID_USERNAME 和 SENDGRID_PASSWORD 都已设置。
我还在 SendGrid 网站上创建了发件人身份,已经过验证。
当我提交表单时,我得到:
“不允许 550 个未经身份验证的发件人”
当我单击 Heroku 仪表板上的“Twilio SendGrid”插件链接时,我被转发到 SendGrid 网站上的一个页面,该页面显示:
对 sendgrid.com 的访问被拒绝。您无权查看此页面。 HTTP 错误 403
发送邮件的方法和设置如下:
post '/contact' do
configure_options
Pony.mail(
:from => [params[:name], "<", params[:email], ">"].join,
:to => 'hi@mydomain.com',
:subject => ["Opt-in via /contact: ", params[:name]].join,
:body => [params[:name], params[:email]].join(": ")
)
redirect '/'
end
def configure_options
Pony.options = {
:via => :smtp,
:via_options => {
:address => 'smtp.sendgrid.net',
:port => '587',
:domain => 'heroku.com',
:user_name => ENV['SENDGRID_USERNAME'],
:password => ENV['SENDGRID_PASSWORD'],
:authentication => :plain,
:enable_starttls_auto => true
}
}
end
谢谢!
【问题讨论】:
-
一个可以节省大量调试时间的建议是使用
ENV.fetch('SENDGRID_USERNAME')。如果密钥丢失并提前失败,它将引发 KeyError,而不是仅仅得到nil,这会导致崩溃。 -
我在尝试这个命令时得到
-bash: ENV.fetch: command not found! -
您应该在 Ruby 代码中使用它而不是
ENV['SENDGRID_USERNAME']。不是来自 bash。 ruby-doc.org/core-2.5.1/Hash.html#method-i-fetch -
这有点奇怪。如果您启动 IRB 或使用
heroku run irb进行窥探,ENV 哈希是否包含预期值? -
对不起,我很难过。 Ruby 将允许您重新分配带有警告的常量。因此,您的代码可能会覆盖 ENV 哈希。不过,您会在本地机器上注意到这一点。
标签: ruby email heroku sinatra sendgrid