使用 Heroku SendGrid 附加组件从 Sinatra 网络应用程序发送电子邮件
Sending email from a Sinatra web app using the Heroku SendGrid add-on
我正在尝试将 SendGrid 设置为通过 Sinatra 应用程序中的简单 Web 表单发送电子邮件。
我在 Heroku 中启用了 SendGrid 附加组件,并通过 heroku config
检查了环境变量; SENDGRID_USERNAME
和 SENDGRID_PASSWORD
都已设置。
我也在SendGrid网站上创建了一个Sender Identity,已经过验证。
当我提交表格时,我得到:
"550 Unauthenticated senders not allowed"
当我在 Heroku 仪表板上单击“Twilio SendGrid”附加组件 link 时,我被转到 SendGrid 网站上的一个页面,上面写着:
Access to sendgrid.com was denied. You don't have authorisation to view this page.
HTTP ERROR 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
我正在尝试将 SendGrid 设置为通过 Sinatra 应用程序中的简单 Web 表单发送电子邮件。
我在 Heroku 中启用了 SendGrid 附加组件,并通过 heroku config
检查了环境变量; SENDGRID_USERNAME
和 SENDGRID_PASSWORD
都已设置。
我也在SendGrid网站上创建了一个Sender Identity,已经过验证。
当我提交表格时,我得到:
"550 Unauthenticated senders not allowed"
当我在 Heroku 仪表板上单击“Twilio SendGrid”附加组件 link 时,我被转到 SendGrid 网站上的一个页面,上面写着:
Access to sendgrid.com was denied. You don't have authorisation to view this page. HTTP ERROR 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