3

当用户注册时,我正在使用 Amazon AWS SES 发送常见的确认电子邮件。我已经验证了我的电子邮件和域,但 Rails 没有发送消息。

我已经安装了 aws-ses gem 并且它可以工作,因为我已经从 Rails 控制台进行了一些尝试。但是当它必须自动发送时,我得到:

I, [2013-11-13T12:36:21.953813 #3262]  INFO -- : Completed 500 Internal Server Error in 1623ms
F, [2013-11-13T12:36:21.958860 #3262] FATAL -- : 
AWS::SES::ResponseError (MessageRejected - Email address is not verified.):

我的 amazon_ses.rb 看起来像:

ActionMailer::Base.add_delivery_method :ses, AWS::SES::Base,
  access_key_id: 'ACCESS_KEY_ID',
  secret_access_key: 'SECRET_ACCESS_KEY'

还有我的production.rb:

config.action_mailer.default_url_options = { :host => 'ismuser.com' }
config.action_mailer.delivery_method = :ses

我只是猜测问题是我没有定义源电子邮件(在 SES 中验证的电子邮件),但我不知道我应该在哪里定义它。

帮助?

4

5 回答 5

4

我今天刚遇到同样的问题。

经过一些调试后,我发现 SES 正在使用错误的服务器进行实例化(我使用的是欧盟,而美国是默认的)。

ActionMailer::Base.add_delivery_method :ses, AWS::SES::Base,
  server: "email.eu-west-1.amazonaws.com",
  access_key_id: PLEASE_REMOVE_YOUR_CREDENTIALS_FROM_QUESTION,
  secret_access_key: PLEASE_REMOVE_YOUR_CREDENTIALS_FROM_QUESTION

为我做了伎俩。

希望有一天这可以帮助某人^^

于 2014-04-30T15:10:38.243 回答
1
AWS::SES::ResponseError (MessageRejected - Email address is not verified.)

This means that you have to verify the email address for using it with SES. The easiest way to do this is log into the Web Console, go to SES and click on Email Addresses and then Verify a new address.

Also, you should make sure that you're sending the message from the same email address you have verified.

于 2013-11-13T12:52:11.603 回答
1

不知道出了什么问题。另一种方式是使用 smtp 投递方式。

在 AWS 面板中,单击“创建我的 SMTP 凭证”按钮</p>

记录创建的用户名和密码

将此添加到您的 development 和 production.rb 文件中:

config.action_mailer.delivery_method = :smtp
  config.action_mailer.smtp_settings = {
  :address => "email-smtp.us-east-1.amazonaws.com",
  :user_name => "..." # Your SMTP user here.
  :password => "...", # Your SMTP password here.
  :authentication => :login,
  :enable_starttls_auto => true

}

于 2013-12-05T23:25:48.623 回答
1

以下是亚马逊自己的一些提示:

恭喜!

您已使用 Amazon Simple Email Service (Amazon SES) 成功验证了电子邮件地址。您现在可以开始从该地址发送电子邮件。

如果您是新的 Amazon SES 用户并且尚未获得对 Amazon SES 的生产访问权限,那么您只能向您之前验证过地址发送电子邮件。要查看您的已验证电子邮件地址列表,请转至Amazon SES 控制台或参阅Amazon SES 开发人员指南

如果您已获准进行生产访问,则可以向任何地址发送电子邮件。

验证成功@Amazon Simple Email Service (SES) | AWS

您的 Amazon SES 账户在欧洲(爱尔兰)地区具有“沙盒”访问权限。 通过沙盒访问,您只能将电子邮件发送到 Amazon SES 邮箱模拟器以及您已验证的电子邮件地址或域。要移出沙盒,请请求提高发送限制。 了解更多

发送统计信息@SES 管理控制台

因此,显然仅电子邮件验证是不够的,您必须请求生产访问权限才能向现实世界发送电子邮件。

提交生产访问请求后,您将收到如下消息:

你好,

恭喜!在审核您的案例后,我们已将您在 AWS 区域欧洲(爱尔兰)的发送配额增加到每天 50,000 条消息,并将您的最大发送速率增加到每秒 14 条消息。您的帐户也已移出沙箱,因此您不再需要验证收件人地址。

确保您选择Yes所有官僚Yes/No问题,否则支持工程师可能会拒绝您的请求。显然,这类似于免责声明/许可协议。

于 2015-11-17T12:11:59.063 回答
0

当您的区域未与您的应用程序和 SES 注册为相同时,可能会导致此问题。查看您的 AWS SES 控制面板/控制台的右上角,您将看到区域名称。然后使用此代码进行比较:

ses = AWS::SES::Base.new(access_key_id: ENV['AWS_KEY'],secret_access_key: ENV['AWS_SECRET'])

在 Rails 控制台中创建新连接。它会像这样吐出输出:

=> #<AWS::SES::Base:0x00000110d37618
 @access_key_id="<access_key_value>",
 @http=#<Net::HTTP email.us-west-2.amazonaws.com:443 open=false>,
 @path="/",
 @port=443,
 @proxy_server=nil,
 @secret_access_key="<secret_key_value>",
 @server="email.us-west-2.amazonaws.com",
 @settings={},
 @use_ssl=true,
 @user_agent="github-aws-ses-ruby-gem">

如果您的地区不匹配,请专门设置:

ses = AWS::SES::Base.new(
   access_key_id: ENV['AWS_KEY'],
   secret_access_key: ENV['AWS_SECRET'], 
   server: 'email.us-west-2.amazonaws.com'
   )
于 2014-04-13T00:01:13.750 回答