aboutsummaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorGeorge Claghorn <george@basecamp.com>2018-10-19 16:31:53 -0400
committerGeorge Claghorn <george@basecamp.com>2018-10-19 16:32:38 -0400
commitebe3d0aaab633de77db494e50f720a8723acbd41 (patch)
tree3f22d9b588414c9fe6be46f3ba59567b21862297 /lib
parentfbd4219274f7c30de391ec8d7b6b6c5d76fb57c7 (diff)
downloadrails-ebe3d0aaab633de77db494e50f720a8723acbd41.tar.gz
rails-ebe3d0aaab633de77db494e50f720a8723acbd41.tar.bz2
rails-ebe3d0aaab633de77db494e50f720a8723acbd41.zip
Add a Rake task for piping to the Postfix ingress
Diffstat (limited to 'lib')
-rw-r--r--lib/tasks/ingress.rake38
1 files changed, 38 insertions, 0 deletions
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