使用 Heroku SendGrid 附加组件从 Sinatra Web 应用程序发送电子邮件



我正在尝试设置SendGrid以通过Sinatra应用程序中的简单Web表单发送电子邮件。

我已经在 Heroku 中启用了 SendGrid 插件,并通过heroku config检查了环境变量;SENDGRID_USERNAMESENDGRID_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

最新更新