diff options
author | George Claghorn <george.claghorn@gmail.com> | 2019-01-12 21:38:26 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-01-12 21:38:26 -0500 |
commit | 512b5316dd33a8aa36821ee9b134d6652fd4a35f (patch) | |
tree | 81e3434a480765ff76f41f7994685e9391e28aee /actionmailbox/lib/action_mailbox | |
parent | bb75d68fe2262199a16973c09a8b2749542c7590 (diff) | |
download | rails-512b5316dd33a8aa36821ee9b134d6652fd4a35f.tar.gz rails-512b5316dd33a8aa36821ee9b134d6652fd4a35f.tar.bz2 rails-512b5316dd33a8aa36821ee9b134d6652fd4a35f.zip |
Add Exim and Qmail support to Action Mailbox
Diffstat (limited to 'actionmailbox/lib/action_mailbox')
-rw-r--r-- | actionmailbox/lib/action_mailbox/relayer.rb (renamed from actionmailbox/lib/action_mailbox/postfix_relayer.rb) | 28 |
1 files changed, 18 insertions, 10 deletions
diff --git a/actionmailbox/lib/action_mailbox/postfix_relayer.rb b/actionmailbox/lib/action_mailbox/relayer.rb index d43c56ed2b..e2890acb60 100644 --- a/actionmailbox/lib/action_mailbox/postfix_relayer.rb +++ b/actionmailbox/lib/action_mailbox/relayer.rb @@ -5,19 +5,27 @@ require "net/http" require "uri" module ActionMailbox - class PostfixRelayer - class Result < Struct.new(:output) + class Relayer + class Result < Struct.new(:status_code, :message) def success? !failure? end def failure? - output.match?(/\A[45]\.\d{1,3}\.\d{1,3}(\s|\z)/) + transient_failure? || permanent_failure? + end + + def transient_failure? + status_code.start_with?("4.") + end + + def permanent_failure? + status_code.start_with?("5.") end end CONTENT_TYPE = "message/rfc822" - USER_AGENT = "Action Mailbox Postfix relayer v#{ActionMailbox.version}" + USER_AGENT = "Action Mailbox relayer v#{ActionMailbox.version}" attr_reader :uri, :username, :password @@ -28,18 +36,18 @@ module ActionMailbox def relay(source) case response = post(source) when Net::HTTPSuccess - Result.new "2.0.0 Successfully relayed message to Postfix ingress" + Result.new "2.0.0", "Successfully relayed message to ingress" when Net::HTTPUnauthorized - Result.new "4.7.0 Invalid credentials for Postfix ingress" + Result.new "4.7.0", "Invalid credentials for ingress" else - Result.new "4.0.0 HTTP #{response.code}" + Result.new "4.0.0", "HTTP #{response.code}" end rescue IOError, SocketError, SystemCallError => error - Result.new "4.4.2 Network error relaying to Postfix ingress: #{error.message}" + Result.new "4.4.2", "Network error relaying to ingress: #{error.message}" rescue Timeout::Error - Result.new "4.4.2 Timed out relaying to Postfix ingress" + Result.new "4.4.2", "Timed out relaying to ingress" rescue => error - Result.new "4.0.0 Error relaying to Postfix ingress: #{error.message}" + Result.new "4.0.0", "Error relaying to ingress: #{error.message}" end private |