使用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。
先决条件
-
如果您正在运行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有可能会发生段错误。
-
确保您已经使用AWSvalidation了您的发件人电子邮件地址。 您只能发送带有经过validation的电子邮件地址的电子邮件作为发件人。 转到SES的AWS控制台左侧菜单中的“已validation发件人”选项。
-
确保您具有用于身份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是特定于每个地区的,因此您所在的名称是以下地区的主机名。
- email-smtp.us-east-1.amazonaws.com (针对美国东部地区)
- email-smtp.us-west-2.amazonaws.com (对于美国西部地区2)
- 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
现在,你可能会自己写交货码。