blob: 510951aa2a70eaf19593847541a8cd3f3f30fc1f (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
# 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"
unless url = ENV["URL"].presence
abort "5.3.5 URL is required"
end
unless password = ENV["INGRESS_PASSWORD"].presence
abort "5.3.5 INGRESS_PASSWORD is required"
end
begin
response = HTTP.basic_auth(user: "actionmailbox", pass: password)
.timeout(connect: 1, write: 10, read: 10)
.post(url, headers: { "Content-Type" => "message/rfc822", "User-Agent" => ENV.fetch("USER_AGENT", "Postfix") }, body: STDIN)
case
when response.status.success?
puts "2.0.0 HTTP #{response.status}"
when response.status.unauthorized?
abort "4.7.0 HTTP #{response.status}"
when response.status.unsupported_media_type?
abort "5.6.1 HTTP #{response.status}"
else
abort "4.0.0 HTTP #{response.status}"
end
rescue HTTP::ConnectionError => error
abort "4.4.2 Error connecting to the Postfix ingress: #{error.message}"
rescue HTTP::TimeoutError
abort "4.4.7 Timed out piping to the Postfix ingress"
end
end
end
end
|