Ruby on rails AWS SES对Rails ActionMailer的响应
使用Rails ActionMailer with:AWS_sdk作为传递方法时,如何从AWS SES获取消息idRuby on rails AWS SES对Rails ActionMailer的响应,ruby-on-rails,amazon-web-services,aws-sdk,actionmailer,amazon-ses,Ruby On Rails,Amazon Web Services,Aws Sdk,Actionmailer,Amazon Ses,使用Rails ActionMailer with:AWS_sdk作为传递方法时,如何从AWS SES获取消息id config.action_mailer.delivery_method = :aws_sdk 我只获取ActionMailer设置的消息id,但该id会被SES覆盖: response = ApplicationMailer.create_send(@message).deliver_now puts response.message_id # => 5a1fbd6417
config.action_mailer.delivery_method = :aws_sdk
我只获取ActionMailer设置的消息id,但该id会被SES覆盖:
response = ApplicationMailer.create_send(@message).deliver_now
puts response.message_id # => 5a1fbd6417a83_12a406a883740@28b9af04e9b9.mail
如何使用SES设置的实际消息id从SES获取响应?我找到了这个,但它对我不起作用。我不是ruby方面的专家,但我认为问题在于AWS库。特别是由于无法设置return_response设置 在这个文件中 gems/2.3.0/gems/aws-sdk-rails-1.0.1/lib/aws/rails/mailer.rb settings是一个硬编码的函数,用于返回空哈希。没有attr_访问器,也没有初始化
# ActionMailer expects this method to be present and to return a hash.
def settings
{}
end
在message.rb中,只有当delivery\u method.settings[:return\u response]为true时,才能获取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技巧(如prepend)覆盖aws库中的settings方法,但现在我只是将这一行添加到aws库文件中
# ActionMailer expects this method to be present and to return a hash.
def settings
{ :return_response => true }
end
我不是ruby方面的专家,但我认为问题在于AWS库。特别是由于无法设置return_response设置 在这个文件中 gems/2.3.0/gems/aws-sdk-rails-1.0.1/lib/aws/rails/mailer.rb settings是一个硬编码的函数,用于返回空哈希。没有attr_访问器,也没有初始化
# ActionMailer expects this method to be present and to return a hash.
def settings
{}
end
在message.rb中,只有当delivery\u method.settings[:return\u response]为true时,才能获取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技巧(如prepend)覆盖aws库中的settings方法,但现在我只是将这一行添加到aws库文件中
# ActionMailer expects this method to be present and to return a hash.
def settings
{ :return_response => true }
end
我可以使用
Net::SMTP::response
获得响应,就像使用:SMTP作为传递方法,并设置返回响应:true
。虽然这不是最可选的解决方案。我可以使用Net::SMTP::response
获得响应,就像使用:SMTP作为传递方法,并设置返回响应:true
。尽管这不是最可选的解决方案。