如何使用 ActionMailer 通过 AWS SES 发送电子邮件
How to send email with AWS SES using ActionMailer
我正在尝试使用 html 模板发送邀请电子邮件。目前我正在使用 aws-ses gem 这样的:
ses = AWS::SES::Base.new(
:access_key_id => 'XXXXXXXXXXXXXXX',
:secret_access_key => 'XXXXXXXXXXXXXXX')
ses.send_email(:to => ..., :source => ..., :subject => ..., :html_body => <p> Hi how are you</p>)
然后我将 html 代码作为字符串发送到 :html_body
中。这很好用。
我想做的是使用模板,并将其存储在单独的文件中,例如invite_email.html.erb
,它将存储在app/views/user_mailer/
.
下
所以我想我必须使用动作邮件程序来使用呈现的视图。我将操作邮件程序设置为使用 AWS::SES gem,并按照 rails 指南使用 rails g mailer UserMailer
设置操作邮件程序。我有一个 UserMailer,一个布局,我重新启动了服务器。我的 developement.rb
看起来像这样:
config.action_mailer.perform_deliveries = true
config.action_mailer.raise_delivery_errors = true
config.action_mailer.delivery_method = :ses
我在 initializers/action_mailer.rb
中像这样初始化了 :ses
:
ActionMailer::Base.add_delivery_method :ses, AWS::SES::Base,
access_key_id: 'XXXXX',
secret_access_key: 'XXXXX'
服务器响应:UserMailer#invite_email: processed outbound mail in 184.0ms
问题是,我仍然没有收到任何电子邮件。我在测试环境中尝试在另一台机器上使用 environments/test.rb
中的相同设置,但仍然没有电子邮件。服务器显示正在呈现布局并且正在处理电子邮件。我缺少设置吗?
我正在使用以下方法 ActionMailer
使用 AWS SES 发送电子邮件。我围绕 fog-aws gem 创建了一个简单的包装器,并添加了与您在问题中使用的类似的交付方法。我决定使用 fog-aws
gem 因为它允许我使用 IAM 角色而不是明确指定访问凭证。
我创建了 lib/aws/ses_mailer.rb
包含以下内容的文件:
module AWS
class SESMailer
attr_reader :settings
def initialize(options = {})
@fog_mailer = Fog::AWS::SES.new(options)
@settings = {}
end
delegate :send_raw_email, to: :@fog_mailer
alias_method :deliver!, :send_raw_email
alias_method :deliver, :send_raw_email
end
end
然后在config/initializers/amazon_ses.rb
中添加发货方式:
ActionMailer::Base.add_delivery_method :ses, AWS::SESMailer, use_iam_profile: true
然后针对特定环境启用它:
config.action_mailer.delivery_method = :ses
现在您可以使用 AWS SES 发送电子邮件了。
我正在尝试使用 html 模板发送邀请电子邮件。目前我正在使用 aws-ses gem 这样的:
ses = AWS::SES::Base.new(
:access_key_id => 'XXXXXXXXXXXXXXX',
:secret_access_key => 'XXXXXXXXXXXXXXX')
ses.send_email(:to => ..., :source => ..., :subject => ..., :html_body => <p> Hi how are you</p>)
然后我将 html 代码作为字符串发送到 :html_body
中。这很好用。
我想做的是使用模板,并将其存储在单独的文件中,例如invite_email.html.erb
,它将存储在app/views/user_mailer/
.
所以我想我必须使用动作邮件程序来使用呈现的视图。我将操作邮件程序设置为使用 AWS::SES gem,并按照 rails 指南使用 rails g mailer UserMailer
设置操作邮件程序。我有一个 UserMailer,一个布局,我重新启动了服务器。我的 developement.rb
看起来像这样:
config.action_mailer.perform_deliveries = true
config.action_mailer.raise_delivery_errors = true
config.action_mailer.delivery_method = :ses
我在 initializers/action_mailer.rb
中像这样初始化了 :ses
:
ActionMailer::Base.add_delivery_method :ses, AWS::SES::Base,
access_key_id: 'XXXXX',
secret_access_key: 'XXXXX'
服务器响应:UserMailer#invite_email: processed outbound mail in 184.0ms
问题是,我仍然没有收到任何电子邮件。我在测试环境中尝试在另一台机器上使用 environments/test.rb
中的相同设置,但仍然没有电子邮件。服务器显示正在呈现布局并且正在处理电子邮件。我缺少设置吗?
我正在使用以下方法 ActionMailer
使用 AWS SES 发送电子邮件。我围绕 fog-aws gem 创建了一个简单的包装器,并添加了与您在问题中使用的类似的交付方法。我决定使用 fog-aws
gem 因为它允许我使用 IAM 角色而不是明确指定访问凭证。
我创建了 lib/aws/ses_mailer.rb
包含以下内容的文件:
module AWS
class SESMailer
attr_reader :settings
def initialize(options = {})
@fog_mailer = Fog::AWS::SES.new(options)
@settings = {}
end
delegate :send_raw_email, to: :@fog_mailer
alias_method :deliver!, :send_raw_email
alias_method :deliver, :send_raw_email
end
end
然后在config/initializers/amazon_ses.rb
中添加发货方式:
ActionMailer::Base.add_delivery_method :ses, AWS::SESMailer, use_iam_profile: true
然后针对特定环境启用它:
config.action_mailer.delivery_method = :ses
现在您可以使用 AWS SES 发送电子邮件了。