编辑:
现在已经有一个gem可以实现此功能。
gem install amazon-ses-mailer
gem install amazon-ses-mailer
使用Amazon的简单邮件服务(SES)设置Rails 3.2以发送电子邮件很容易。您不需要任何额外的gem或猴子补丁即可使其正常工作。
SES支持SMTP上的STARTTLS和TLS / SSL。以下演示了如何为SES设置Rails进行STARTTLS。
先决条件
如果您正在运行Mac OS X的rails,则在使用STARTTLS之前,您可能需要正确配置Ruby的OpenSSL。如果您使用的是Ruby 1.9.3和RVM,则可以按照以下方式操作:
rvm pkg install openssl
rvm reinstall 1.9.3 --with-openssl-dir=$rvm_path/usr
如果您不这样做,当您尝试发送电子邮件时,Ruby 可能会发生段错误。
确保您已通过 AWS 验证了发件人电子邮件地址。只有经过验证的电子邮件地址才能作为发件人发送电子邮件。在 SES 的 AWS 控制台左侧菜单中选择“已验证的发件人”选项。
确保您具有用于身份验证的 AWS SMTP 用户名和密码。在 SES 的 AWS 控制台左侧菜单中选择“SMTP 设置”选项进行设置。首先,您将被提示创建 IAM 用户(默认:ses-smtp-user),然后您将看到 SMTP 用户和密码,它们看起来像通常的 AWS 密钥和密钥。请注意,IAM 用户即 ses-smtp-user 不是您将用于身份验证的 SMTP 用户。
配置 Rails
在 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
}
发送电子邮件
这就是全部内容了。现在您可以创建一个邮件程序并开始为乐趣和利润发送电子邮件!
创建样例邮件程序
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.
现在,打开控制台并发送一封测试邮件:
rails c
Loading development environment (Rails 3.2.1)
1.9.3p125 :001 > UserMailer.test("your@email.com").deliver
用于TLS SSL设置[Amazon SES推荐]
剧透:无需Gem
在Rails中发送电子邮件的默认方式为smtp,但您可以添加此行以明确定义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主机名是每个区域特定的,因此你需要根据所在的区域选择相应的主机名。以下是各个区域对应的主机名:
在稍微探索了一下之后,我最终只是创建了一个简单的类来完成这个任务。
https://github.com/abronte/Amazon-SES-Mailer
在Rails中,您可以获取编码后的电子邮件消息:
m = UserMailer.welcome.encoded
AmazonSES.new.deliver(m)
# config/production.rb
# ...
config.action_mailer.delivery_method = :aws_sdk
config.action_mailer.delivery_method = :ses
。 - BenV使用Amazon SES配置您的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
}
我创建了一个简单的Rails / SES API gem,它使用Signature v4来签署请求。这最适合用于诸如联系我们、用户注册等交易性电子邮件。
请随意改进并贡献。
SES今天刚刚发布beta版,因此我怀疑是否有现成的gem(至少我没有看到)。您可以根据他们的开发人员文档编写自定义模块:
http://docs.amazonwebservices.com/ses/latest/DeveloperGuide/
通过使用:sendmail
,我成功地在我的AWS机器上以root身份运行apt-get install postfix
并使用所有默认答案来发送所有电子邮件。
您可以在您的环境中为Action Mailer提供交付方式。
config.action_mailer.delivery_method = AmazonSES.deliver
目前你可能需要自己编写交付代码。