From ebe3d0aaab633de77db494e50f720a8723acbd41 Mon Sep 17 00:00:00 2001 From: George Claghorn Date: Fri, 19 Oct 2018 16:31:53 -0400 Subject: Add a Rake task for piping to the Postfix ingress --- lib/tasks/ingress.rake | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 lib/tasks/ingress.rake (limited to 'lib/tasks/ingress.rake') diff --git a/lib/tasks/ingress.rake b/lib/tasks/ingress.rake new file mode 100644 index 0000000000..051d7a6c94 --- /dev/null +++ b/lib/tasks/ingress.rake @@ -0,0 +1,38 @@ +# frozen_string_literal: true + +namespace :action_mailbox do + namespace :ingress do + desc "Pipe an inbound email from STDIN to the Postfix ingress at the given URL" + task :postfix do + require "active_support" + require "active_support/core_ext/object/blank" + require "http" + + url, username, password = ENV.values_at("URL", "INGRESS_USERNAME", "INGRESS_PASSWORD") + + if url.blank? || username.blank? || password.blank? + abort "URL, INGRESS_USERNAME, and INGRESS_PASSWORD are required" + end + + begin + response = HTTP.basic_auth(user: username, pass: password) + .timeout(connect: 1, write: 10, read: 10) + .post(url, headers: { "Content-Type" => "message/rfc822", "User-Agent" => "Postfix" }, body: STDIN) + + if response.status.success? + puts "2.0.0 HTTP #{response.status}" + exit 0 + else + puts "4.6.0 HTTP #{response.status}" + exit 1 + end + rescue HTTP::ConnectionError => error + puts "4.4.2 Error connecting to the Postfix ingress: #{error.message}" + exit 1 + rescue HTTP::TimeoutError + puts "4.4.7 Timed out piping to the Postfix ingress" + exit 1 + end + end + end +end -- cgit v1.2.3