来自 AWS SES 的响应 Rails ActionMailer

Response from AWS SES with Rails ActionMailer

使用 Rails ActionMailer 和 :aws_sdk 作为传递方式时,如何从 AWS SES 获取消息 ID?

config.action_mailer.delivery_method = :aws_sdk

我只收到 ActionMailer 设置的消息 ID,但它被 SES 覆盖了:

response = ApplicationMailer.create_send(@message).deliver_now
puts response.message_id # => 5a1fbd6417a83_12a406a883740@28b9af04e9b9.mail

如何使用 SES 设置的实际消息 ID 从 SES 获取响应?我找到了这个 Response from SMTP server with Rails,但它对我不起作用。

我不是 ruby 方面的专家,但我认为问题出在 AWS 库上。具体来说,无法设置 return_response 设置。

在这个文件中 gems/2.3.0/gems/aws-sdk-rails-1.0.1/lib/aws/rails/mailer.rb

settings 是一个硬编码为 return 空哈希的函数。而且没有 attr_accessor 也没有初始化。

  # ActionMailer expects this method to be present and to return a hash.
  def settings
    {}
  end

并且在 message.rb 中,只有当 delivery_method.settings[:return_response] 为真时,您才能获得 smtp 响应代码。

# This method bypasses checking perform_deliveries and raise_delivery_errors,
# so use with caution.
#
# It still however fires off the interceptors and calls the observers callbacks if they are defined.
#
# Returns self
def deliver!
  inform_interceptors
  response = delivery_method.deliver!(self)

  inform_observers
  delivery_method.settings[:return_response] ? response : self

end

但是由于无法访问设置,所以无法获得响应。

所以也许可以使用 ruby 这样的技巧来覆盖 aws 库中的设置方法,但现在我只是将这一行添加到 aws 库文件中。

  # ActionMailer expects this method to be present and to return a hash.
  def settings
    { :return_response => true }
  end