使用Amazon SES和Rails ActionMailer

通过Rails 3中的Amazon SES使ActionMailer发送邮件最好的方法是什么?

编辑:

这现在是一个gem:

gem install amazon-ses-mailer 

https://rubygems.org/gems/amazon-ses-mailer

https://github.com/abronte/Amazon-SES-Mailer

我也有一个支持从Rails 3通过SES发送电子邮件的gem:

https://github.com/drewblas/aws-ses

它还具有validation/pipe理电子邮件地址的所有API

设置Rails 3.2使用Amazon的简单电子邮件服务(SES)发送电子邮件很容易。 你不需要任何额外的gem或猴子补丁,使其工作。

SES支持通过SMTP以及TLS / SSL的STARTTLS。 以下演示如何使用SES为STARTTLS设置Rails。

先决条件

  1. 如果您正在运行rails Mac OS X,则可能需要正确configurationOpenSSL for Ruby,然后才能使用STARTTLS。 如果您使用的是Ruby 1.9.3和RVM,则可以这样做:

     rvm pkg install openssl rvm reinstall 1.9.3 --with-openssl-dir=$rvm_path/usr 

如果你不这样做,当你尝试发送电子邮件时,Ruby有可能会发生段错误。

  1. 确保您已经使用AWSvalidation了您的发件人电子邮件地址。 您只能发送带有经过validation的电子邮件地址的电子邮件作为发件人。 转到SES的AWS控制台左侧菜单中的“已validation发件人”选项。

  2. 确保您具有用于身份validation的AWS SMTP用户名和密码。 转到SES的AWS控制台左侧菜单中的“SMTP设置”选项进行设置。 您将首先被提示创buildIAM用户(默认:ses-smtp-user),然后您将显示SMTP用户和密码,这看起来像通常的AWS密钥和秘密。 请注意,IAM用户(即,ses-smtp-user) 不是您将用于身份validation的SMTP用户。

configurationRails

在config / environments / development.rb和config / environments / production.rb中添加以下内容:

  config.action_mailer.delivery_method = :smtp config.action_mailer.smtp_settings = { :address => "email-smtp.us-east-1.amazonaws.com", :port => 587, # Port 25 is throttled on AWS :user_name => "...", # Your SMTP user here. :password => "...", # Your SMTP password here. :authentication => :login, :enable_starttls_auto => true } 

发送电子邮件

就是这个。 现在你可以继续创build一个邮件程序,并开始发送电子邮件的乐趣和利润!

创build一个示例邮件

 rails g mailer user_mailer 

在app / mailer / user_mailer.rb中:

  class UserMailer < ActionMailer::Base # Make sure to set this to your verified sender! default from: "your@verifiedsender.com" def test(email) mail(:to => email, :subject => "Hello World!") end end 

在views / user_mailer / test.erb中:

  A quick brown fox jumped over the lazy dog. 

现在,启动控制台并发送testing电子邮件:

  rails c Loading development environment (Rails 3.2.1) 1.9.3p125 :001 > UserMailer.test("your@email.com").deliver 

经过一番摸索,我最终做了一个简单的课程来做到这一点。

https://github.com/abronte/Amazon-SES-Mailer

在rails中,你可以得到编码的电子邮件信息:

 m = UserMailer.welcome.encoded AmazonSES.new.deliver(m) 

对于TLS SSL设置[由Amazon SES推荐]

你不需要这个东西的gem。

smtp是在轨道上发送电子邮件defualt的方式,但你可以添加这一行显式定义在config / application.rb文件

 config.action_mailer.delivery_method = :smtp 

config / application.rb中,或者你可以在特定的环境文件中指定

 config.action_mailer.smtp_settings = { address: 'Amazon SES SMTP HOSTNAME', port: 465, #TLS port domain: 'example.com', user_name: 'SMTP_USERNAME', password: 'SMTP_PASSWORD', authentication: 'plain', #you can also use login ssl: true, #For TLS SSL connection } 

Amazon SES SMTP HOSTNAME是特定于每个地区的,因此您所在的名称是以下地区的主机名。

  1. email-smtp.us-east-1.amazonaws.com (针对美国东部地区)
  2. email-smtp.us-west-2.amazonaws.com (对于美国西部地区2)
  3. email-smtp.eu-west-1.amazonaws.com (针对eu-west-1地区)

StackOverFlow | 使用-SMTP亚马逊工具入门-发送-

我使用以下gem:

https://github.com/aws/aws-sdk-rails

它引入了标准的aws-sdk ,并允许将ActionMailer设置为使用AWS SES。 例:

 # config/production.rb # ... config.action_mailer.delivery_method = :aws_sdk 

使用Amazon SESconfiguration您的Rails应用程序

将action_mailer.perform_deliveries设置为true,因为它在开发/生产环境中默认设置为false

 config.action_mailer.perform_deliveries = true 

然后将此代码粘贴到开发/生产环境中

 config.action_mailer.smtp_settings = { :address => ENV["SES_SMTP_ADDRESS"], :port => 587, :user_name => ENV["SES_SMTP_USERNAME"], :password => ENV["SES_SMTP_PASSWORD"], :authentication => :login, :enable_starttls_auto => true } 

我创build了一个使用Signature v4签名请求的简单的Rails / SES API gem。 这最好用于交易电子邮件,如联系我们,用户注册等。

Rails SES API集成gem

请随时改善和贡献。

使用:sendmail ,我设法得到所有的电子邮件发送运行apt-get install postfix作为根在我的AWS机器上,并使用所有的默认答案。

SES今天刚刚发布到testing版,所以我怀疑是否有一个准备好的gem(至less,不是我见过)。 你可以根据他们的开发者文档编写一个自定义模块:

 http://docs.amazonwebservices.com/ses/latest/DeveloperGuide/ 

您可以在您的环境中提供交付方式给行动邮件程序。

 config.action_mailer.delivery_method = AmazonSES.deliver 

现在,你可能会自己写交货码。