我正在尝试设置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
谢谢!
SendGrid 不会收到任何邮件,因此您向 SendGrid 发出的任何请求都是发送邮件。
这意味着您首先需要设置一个您控制的实体,即使收件人是您自己,该实体也可以充当发件人。
您可以通过创建发件人标识来执行此操作。这是通过 SMTP 发送邮件时的过程:
https://sendgrid.com/docs/for-developers/sending-email/integrating-with-the-smtp-api/
接下来,您需要创建一个 API 密钥。SendGrid 不再支持基本身份验证,因此此代码将不起作用:
:user_name => ENV['SENDGRID_USERNAME'],
:password => ENV['SENDGRID_PASSWORD'],
相反,您需要使用:
:user_name => 'apikey',
:password => 'your-api-key',
其中'apikey'
是文字字符串'apikey'
,'your-api-key'
是 SendGrid 生成的 69 个字符的 API 密钥(仅显示一次)。
然后,在您的 POST 方法中:
post '/contact' do
configure_options
Pony.mail(
# the :from field below is the email address
# associated with your SendGrid Sender Identity:
:from => 'yourname@email.com',
:to => 'someother@email.com',
:subject => ["Opt-in via /contact: ", params[:name]].join,
:body => [params[:name], params[:email]].join(": ")
)
redirect '/'
end