AWS SES 超时
AWS SES Timeout
我用的是Rails4.2,AWS-SES gem and the Mailform gem。我正在尝试在开发中设置 AWS SES 并将其添加到 config/development.rb
:
# Configure mail using AWS SES
config.after_initialize do
ActionMailer::Base.delivery_method = :amazon_ses
ActionMailer::Base.custom_amazon_ses_mailer = AWS::SES::Base.new(
:secret_access_key => ENV['AWS_SECRET_ACCESS_KEY'],
:access_key_id => ENV['AWS_SECRET_KEY_ID'],
:server => 'email.eu-west-2.amazonaws.com'
)
end
当我尝试从控制台发送电子邮件时,我在 30 秒后超时。我开始把所有这些写下来寻求帮助,但后来我想到 MailForm
可能不是从 ActionMailer
派生的。果然,MailForm::Base
有超类 Object
,所以配置 ActionMailer
毫无意义。
我将这两行更改为配置 MailForm::Base
,但我仍然超时。这两个宝石可能不兼容吗?否则,我们将不胜感激任何解决或故障排除的建议。
正如我在问题中提到的,MailForm
和 AWS-SES
gem 开箱即用不兼容。有可能它们可以一起工作,但我选择了不同的路线。
设置AWS-SES
的一些关键(代码包含在下面供参考):
- AWS 设置 - 使用 AWS,您从沙盒模式开始。您需要在 SES 控制台中注册所有目标电子邮件地址才能正常工作。单击
Email Addresses
link 以列出您已验证的地址并添加更多。此外,您将需要设置 AWS IAM
凭据以与 gem 一起使用。执行此操作时,请确保用户附加了 SES 完全访问托管策略(在 IAM 控制台上)。
:server
设置 - AWS 在多个区域运行,但您的 SES 帐户将在其中一个区域设置。要确定您的区域,请转到 AWS 控制台并单击 SES。您会在 URL 中看到您所在的地区 - 对我来说是 region=us-west-2
。我建议按照 Dan Croak 的 excellent article 中所述设置初始化程序。我按照 Dan 的建议做了,除了我将交付方式设置为 :amazon-ses
并添加了服务器配置行。
- 配置 - Dan 的文章(如上所述)解释了如何在您的环境配置文件中设置
delivery_method
。同样,我使用了 :amazon-ses
.
- 配置 AWS 并安装 gem 后,您可以在 rails 控制台中测试您的设置。在那里进行故障排除比在您的代码库中更容易。
- 有点无关,但我用
Dotenv
gem 来管理我的环境设置。简而言之,安装 gem 后,您可以将所有环境设置粘贴到 ~/.env
中,并在整个代码中在 ENV
中访问它们。
/config/initializers/amazon-ses.rb
ActionMailer::Base.add_delivery_method :amazon_ses, AWS::SES::Base,
:access_key_id => ENV['AWS_SECRET_KEY_ID'],
:secret_access_key => ENV['AWS_SECRET_ACCESS_KEY'],
:server => 'email.us-west-2.amazonaws.com'
/config/environments/development.rb(节选):
# Configure mailer for development test
config.action_mailer.raise_delivery_errors = true
# Configure mail using AWS SES
config.action_mailer.delivery_method = :amazon_ses
# Configure URL options
host = 'www.example.com'
config.action_mailer.default_url_options = { host: host }
当然,要在生产环境中进行这项工作,您需要对 /config/environments/production.rb
进行这些更改。您还需要在生产服务器上进行 AWS 机密设置。如果您使用的是 Heroku:
$ heroku config:add AWS_SECRET_KEY_ID=12345XYZ
$ heroku config:add AWS_SECRET_ACCESS_KEY=67890ABC
我用的是Rails4.2,AWS-SES gem and the Mailform gem。我正在尝试在开发中设置 AWS SES 并将其添加到 config/development.rb
:
# Configure mail using AWS SES
config.after_initialize do
ActionMailer::Base.delivery_method = :amazon_ses
ActionMailer::Base.custom_amazon_ses_mailer = AWS::SES::Base.new(
:secret_access_key => ENV['AWS_SECRET_ACCESS_KEY'],
:access_key_id => ENV['AWS_SECRET_KEY_ID'],
:server => 'email.eu-west-2.amazonaws.com'
)
end
当我尝试从控制台发送电子邮件时,我在 30 秒后超时。我开始把所有这些写下来寻求帮助,但后来我想到 MailForm
可能不是从 ActionMailer
派生的。果然,MailForm::Base
有超类 Object
,所以配置 ActionMailer
毫无意义。
我将这两行更改为配置 MailForm::Base
,但我仍然超时。这两个宝石可能不兼容吗?否则,我们将不胜感激任何解决或故障排除的建议。
正如我在问题中提到的,MailForm
和 AWS-SES
gem 开箱即用不兼容。有可能它们可以一起工作,但我选择了不同的路线。
设置AWS-SES
的一些关键(代码包含在下面供参考):
- AWS 设置 - 使用 AWS,您从沙盒模式开始。您需要在 SES 控制台中注册所有目标电子邮件地址才能正常工作。单击
Email Addresses
link 以列出您已验证的地址并添加更多。此外,您将需要设置AWS IAM
凭据以与 gem 一起使用。执行此操作时,请确保用户附加了 SES 完全访问托管策略(在 IAM 控制台上)。 :server
设置 - AWS 在多个区域运行,但您的 SES 帐户将在其中一个区域设置。要确定您的区域,请转到 AWS 控制台并单击 SES。您会在 URL 中看到您所在的地区 - 对我来说是region=us-west-2
。我建议按照 Dan Croak 的 excellent article 中所述设置初始化程序。我按照 Dan 的建议做了,除了我将交付方式设置为:amazon-ses
并添加了服务器配置行。- 配置 - Dan 的文章(如上所述)解释了如何在您的环境配置文件中设置
delivery_method
。同样,我使用了:amazon-ses
. - 配置 AWS 并安装 gem 后,您可以在 rails 控制台中测试您的设置。在那里进行故障排除比在您的代码库中更容易。
- 有点无关,但我用
Dotenv
gem 来管理我的环境设置。简而言之,安装 gem 后,您可以将所有环境设置粘贴到~/.env
中,并在整个代码中在ENV
中访问它们。
/config/initializers/amazon-ses.rb
ActionMailer::Base.add_delivery_method :amazon_ses, AWS::SES::Base,
:access_key_id => ENV['AWS_SECRET_KEY_ID'],
:secret_access_key => ENV['AWS_SECRET_ACCESS_KEY'],
:server => 'email.us-west-2.amazonaws.com'
/config/environments/development.rb(节选):
# Configure mailer for development test
config.action_mailer.raise_delivery_errors = true
# Configure mail using AWS SES
config.action_mailer.delivery_method = :amazon_ses
# Configure URL options
host = 'www.example.com'
config.action_mailer.default_url_options = { host: host }
当然,要在生产环境中进行这项工作,您需要对 /config/environments/production.rb
进行这些更改。您还需要在生产服务器上进行 AWS 机密设置。如果您使用的是 Heroku:
$ heroku config:add AWS_SECRET_KEY_ID=12345XYZ
$ heroku config:add AWS_SECRET_ACCESS_KEY=67890ABC