multi_mail 0.0.2 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (60) hide show
  1. data/.gitignore +2 -1
  2. data/.travis.yml +10 -0
  3. data/README.md +283 -59
  4. data/Rakefile +38 -19
  5. data/lib/multi_mail/cloudmailin/receiver.rb +3 -13
  6. data/lib/multi_mail/mailgun/message.rb +67 -0
  7. data/lib/multi_mail/mailgun/receiver.rb +20 -13
  8. data/lib/multi_mail/mailgun/sender.rb +79 -2
  9. data/lib/multi_mail/mandrill/message.rb +74 -0
  10. data/lib/multi_mail/mandrill/receiver.rb +36 -16
  11. data/lib/multi_mail/mandrill/sender.rb +77 -2
  12. data/lib/multi_mail/message/base.rb +40 -0
  13. data/lib/multi_mail/postmark/receiver.rb +1 -1
  14. data/lib/multi_mail/postmark/sender.rb +35 -5
  15. data/lib/multi_mail/receiver/base.rb +31 -2
  16. data/lib/multi_mail/receiver.rb +1 -4
  17. data/lib/multi_mail/sender/base.rb +23 -1
  18. data/lib/multi_mail/sendgrid/message.rb +74 -0
  19. data/lib/multi_mail/sendgrid/receiver.rb +72 -23
  20. data/lib/multi_mail/sendgrid/sender.rb +63 -2
  21. data/lib/multi_mail/service.rb +48 -56
  22. data/lib/multi_mail/simple/receiver.rb +4 -4
  23. data/lib/multi_mail/version.rb +1 -1
  24. data/lib/multi_mail.rb +16 -1
  25. data/multi_mail.gemspec +4 -1
  26. data/spec/fixtures/empty.gif +0 -0
  27. data/spec/fixtures/mailgun/raw/invalid.txt +13 -0
  28. data/spec/fixtures/mailgun/raw/missing.txt +13 -0
  29. data/spec/fixtures/mailgun/raw/spam.txt +13 -0
  30. data/spec/fixtures/mailgun/raw/valid.txt +13 -0
  31. data/spec/fixtures/mandrill/invalid.txt +15 -0
  32. data/spec/fixtures/mandrill/missing.txt +14 -0
  33. data/spec/fixtures/mandrill/multiple.txt +15 -0
  34. data/spec/fixtures/mandrill/valid.txt +10 -5
  35. data/spec/fixtures/postmark/valid.txt +13 -13
  36. data/spec/fixtures/sendgrid/encoding.txt +90 -0
  37. data/spec/fixtures/sendgrid/spam.txt +94 -0
  38. data/spec/fixtures/sendgrid/valid.txt +136 -0
  39. data/spec/mailgun/message_spec.rb +251 -0
  40. data/spec/mailgun/receiver_spec.rb +35 -20
  41. data/spec/mailgun/sender_spec.rb +175 -0
  42. data/spec/mandrill/message_spec.rb +305 -0
  43. data/spec/mandrill/receiver_spec.rb +90 -46
  44. data/spec/mandrill/sender_spec.rb +138 -0
  45. data/spec/message/base_spec.rb +81 -0
  46. data/spec/postmark/receiver_spec.rb +4 -4
  47. data/spec/postmark/sender_spec.rb +118 -0
  48. data/spec/receiver/base_spec.rb +16 -9
  49. data/spec/sender/base_spec.rb +24 -10
  50. data/spec/sendgrid/message_spec.rb +265 -0
  51. data/spec/sendgrid/receiver_spec.rb +77 -0
  52. data/spec/sendgrid/sender_spec.rb +140 -0
  53. data/spec/service_spec.rb +18 -1
  54. data/spec/simple/receiver_spec.rb +1 -1
  55. data/spec/spec_helper.rb +46 -4
  56. metadata +226 -143
  57. data/lib/multi_mail/sender.rb +0 -46
  58. data/lib/multi_mail/simple/sender.rb +0 -14
  59. data/spec/sender_spec.rb +0 -13
  60. data/spec/simple/sender_spec.rb +0 -0
@@ -0,0 +1,74 @@
1
+ module MultiMail
2
+ module Message
3
+ # @see http://sendgrid.com/docs/API_Reference/Web_API/mail.html
4
+ class SendGrid < MultiMail::Message::Base
5
+ # Returns the message headers in SendGrid format.
6
+ #
7
+ # @return [Hash] the message headers in SendGrid format
8
+ def sendgrid_headers
9
+ headers = {}
10
+ header_fields.each do |field|
11
+ key = field.name.downcase
12
+ unless %w(to subject from bcc reply-to date message-id).include?(key)
13
+ # The JSON must not contain integers.
14
+ headers[field.name] = field.value.to_s
15
+ end
16
+ end
17
+ headers
18
+ end
19
+
20
+ # Returns the message's attachments in SendGrid format.
21
+ #
22
+ # @return [Hash] the attachments in SendGrid format
23
+ def sendgrid_files
24
+ hash = {}
25
+ attachments.map do |attachment|
26
+ # File contents must be part of the multipart HTTP POST.
27
+ # @see http://sendgrid.com/docs/API_Reference/Web_API/mail.html
28
+ hash[attachment.filename] = Faraday::UploadIO.new(StringIO.new(attachment.body.decoded), attachment.content_type, attachment.filename)
29
+ end
30
+ hash
31
+ end
32
+
33
+ # Returns the attachments' content IDs in SendGrid format.
34
+ #
35
+ # @return [Hash] the content IDs in SendGrid format
36
+ def sendgrid_content
37
+ hash = {}
38
+ attachments.each do |attachment|
39
+ if attachment.content_type.start_with?('image/')
40
+ # Mirror Mailgun behavior for naming inline attachments.
41
+ # @see http://documentation.mailgun.com/user_manual.html#inline-image
42
+ hash[attachment.filename] = attachment.filename
43
+ end
44
+ end
45
+ hash
46
+ end
47
+
48
+ # Returns the message as parameters to POST to SendGrid.
49
+ #
50
+ # @return [Hash] the message as parameters to POST to SendGrid
51
+ def to_sendgrid_hash
52
+ headers = sendgrid_headers
53
+
54
+ hash = {
55
+ 'to' => to.to_a,
56
+ 'toname' => to && self[:to].display_names.to_a,
57
+ 'subject' => subject,
58
+ 'text' => body_text,
59
+ 'html' => body_html,
60
+ 'from' => from && from.first,
61
+ 'bcc' => bcc.to_a,
62
+ 'fromname' => from && self[:from].display_names.first,
63
+ 'replyto' => reply_to && reply_to.first,
64
+ 'date' => date && Time.parse(date.to_s).rfc2822, # Ruby 1.8.7
65
+ 'files' => sendgrid_files,
66
+ 'content' => sendgrid_content,
67
+ 'headers' => headers.empty? ? nil : JSON.dump(headers),
68
+ }
69
+
70
+ normalize(hash)
71
+ end
72
+ end
73
+ end
74
+ end
@@ -1,42 +1,91 @@
1
1
  module MultiMail
2
2
  module Receiver
3
- class SendGrid < MultiMail::Service
3
+ # SendGrid's incoming email receiver.
4
+ class SendGrid
4
5
  include MultiMail::Receiver::Base
5
-
6
- requires :sendgrid_username
7
- requires :sendgrid_password
8
- recognizes :http_post_format
9
- attr_reader :http_post_format
10
-
6
+ # Initializes a SendGrid incoming email receiver.
7
+ #
8
+ # @param [Hash] options required and optional arguments
9
+ # @option option [Float] :spamassassin_threshold the Spamassassin score
10
+ # needed to flag a message as spam
11
11
  def initialize(options = {})
12
12
  super
13
- @sendgrid_username = options[:sendgrid_username]
14
- @sendgrid_password = options[:sendgrid_password]
15
- @http_post_format = options[:http_post_format]
13
+ @spamassassin_threshold = options[:spamassassin_threshold] || 5
16
14
  end
17
15
 
16
+ # Transforms the content of SendGrid's webook into a list of messages.
17
+ #
18
+ # @param [Hash] params the content of Mandrill's webhook
19
+ # @return [Array<Mail::Messages>] messages
20
+ # @see http://sendgrid.com/docs/API_Reference/Webhooks/parse.html
18
21
  def transform(params)
19
- attachments = 1.upto(params['attachments'].to_i).map do |num|
20
- attachment_from_params(params["attachment#{num}"])
21
- end
22
+ # Make variables available to the `encode` method.
23
+ @params = params
24
+ @charsets = JSON.load(params['charsets'])
22
25
 
23
- @message = Mail.new do
26
+ # Mail changes `self`.
27
+ this = self
28
+
29
+ message = Mail.new do
30
+ # SendGrid includes a `charsets` parameter, which describes the
31
+ # encodings of the `from`, `to`, `cc` and `subject` parameters, which
32
+ # we don't need because we parse the headers directly.
33
+ # @see http://sendgrid.com/docs/API_Reference/Webhooks/parse.html#-Character-Sets-and-Header-Decoding
24
34
  header params['headers']
25
35
 
26
- body params['text']
36
+ # The following are redundant with `headers`:
37
+ #
38
+ # from params['from']
39
+ # to params['to']
40
+ # cc params['cc']
41
+ # subject params['subject']
42
+
43
+ text_part do
44
+ body this.encode('text')
45
+ end
46
+
47
+ if params.key?('html')
48
+ html_part do
49
+ content_type 'text/html; charset=UTF-8'
50
+ body this.encode('html')
51
+ end
52
+ end
53
+
54
+ 1.upto(params['attachments'].to_i) do |n|
55
+ attachment = params["attachment#{n}"]
56
+ add_file(this.class.add_file_arguments(attachment))
57
+ end
58
+ end
27
59
 
28
- html_part do
29
- content_type 'text/html; charset=UTF-8'
30
- body params['html']
31
- end if params['html']
60
+ # Extra SendGrid parameters. Discard
61
+ %w(dkim SPF spam_report spam_score).each do |key|
62
+ message[key] = params[key]
63
+ end
64
+
65
+ # Discard `envelope`, which contains `to` and `from`, and the
66
+ # undocumented `attachment-info`.
67
+ [message]
68
+ end
32
69
 
33
- attachments.each do |attachment|
34
- add_file(attachment)
70
+ # Returns whether a message is spam.
71
+ #
72
+ # @param [Mail::Message] message a message
73
+ # @return [Boolean] whether the message is spam
74
+ def spam?(message)
75
+ message['spam_score'] && message['spam_score'].value.to_f > @spamassassin_threshold
76
+ end
77
+
78
+ def encode(key)
79
+ if @charsets.key?(key)
80
+ if @params[key].respond_to?(:force_encoding)
81
+ @params[key].force_encoding(@charsets[key]).encode('UTF-8')
82
+ else
83
+ Iconv.conv('UTF-8', @charsets[key], @params[key])
35
84
  end
85
+ else
86
+ @params[key]
36
87
  end
37
88
  end
38
89
  end
39
90
  end
40
91
  end
41
-
42
-
@@ -1,10 +1,71 @@
1
+ require 'multi_mail/sendgrid/message'
2
+
1
3
  module MultiMail
2
4
  module Sender
3
- class SendGrid < MultiMail::Service
4
- include MultiMail::Sender::base
5
+ # SendGrid's outgoing mail sender.
6
+ class SendGrid
7
+ include MultiMail::Sender::Base
8
+
9
+ # @see http://sendgrid.com/docs/API_Reference/Web_API/
10
+ requires :api_user, :api_key
5
11
 
12
+ # Initializes a SendGrid outgoing email sender.
13
+ #
14
+ # @param [Hash] options required and optional arguments
15
+ # @option options [String] :api_user a SendGrid API user
16
+ # @option options [String] :api_key a SendGrid API key
6
17
  def initialize(options = {})
7
18
  super
19
+ if Hash === settings[:'x-smtpapi']
20
+ settings[:'x-smtpapi'] = JSON.dump(settings[:'x-smtpapi'])
21
+ end
22
+ end
23
+
24
+ # Delivers a message via the SendGrid API.
25
+ #
26
+ # @param [Mail::Message] mail a message
27
+ # @see http://sendgrid.com/docs/API_Reference/Web_API/mail.html
28
+ def deliver!(mail)
29
+ parameters = settings.dup
30
+ parameters.delete(:return_response)
31
+ message = MultiMail::Message::SendGrid.new(mail).to_sendgrid_hash.merge(parameters)
32
+
33
+ connection = Faraday.new do |conn|
34
+ conn.request :multipart
35
+ conn.request :url_encoded
36
+ conn.adapter Faraday.default_adapter
37
+ end
38
+
39
+ response = connection.post('https://sendgrid.com/api/mail.send.json', message)
40
+
41
+ body = JSON.load(response.body)
42
+
43
+ unless response.status == 200
44
+ if body['message'] == 'error'
45
+ case body['errors']
46
+ when ['Bad username / password']
47
+ raise InvalidAPIKey, body['errors'].first
48
+ when ['Empty from email address (required)']
49
+ raise MissingSender, body['errors'].first
50
+ when ['Missing destination email']
51
+ raise MissingRecipients, body['errors'].first
52
+ when ['Missing subject']
53
+ raise MissingSubject, body['errors'].first
54
+ when ['Missing email body']
55
+ raise MissingBody, body['errors'].first
56
+ else
57
+ raise body['errors'].join
58
+ end
59
+ else
60
+ raise body['errors'].join
61
+ end
62
+ end
63
+
64
+ if settings[:return_response]
65
+ body
66
+ else
67
+ self
68
+ end
8
69
  end
9
70
  end
10
71
  end
@@ -2,71 +2,63 @@ module MultiMail
2
2
  # Interacts with email APIs to send or receive email.
3
3
  #
4
4
  # @see http://rdoc.info/gems/fog/Fog/Service
5
- class Service
6
- # Initializers an email API service.
5
+ module Service
6
+ # Appends the given arguments to the list of required arguments.
7
7
  #
8
- # @param [Hash] options optional arguments
9
- def initialize(options = {})
10
- self.class.validate_options(options)
8
+ # @param args one or more required arguments
9
+ # @see Fog::Service::requires
10
+ def requires(*args)
11
+ requirements.concat(args)
11
12
  end
12
13
 
13
- class << self
14
- # Appends the given arguments to the list of required arguments.
15
- #
16
- # @param args one or more required arguments
17
- # @see Fog::Service::requires
18
- def requires(*args)
19
- requirements.concat(args)
20
- end
14
+ # Returns the list of required arguments.
15
+ #
16
+ # @return [Array] a list of required arguments
17
+ # @see Fog::Service::requirements
18
+ def requirements
19
+ @requirements ||= []
20
+ end
21
21
 
22
- # Returns the list of required arguments.
23
- #
24
- # @return [Array] a list of required arguments
25
- # @see Fog::Service::requirements
26
- def requirements
27
- @requirements ||= []
28
- end
22
+ # Appends the given arguments to the list of optional arguments.
23
+ #
24
+ # @param args one or more optional arguments
25
+ # @see Fog::Service::recognizes
26
+ def recognizes(*args)
27
+ recognized.concat(args)
28
+ end
29
29
 
30
- # Appends the given arguments to the list of optional arguments.
31
- #
32
- # @param args one or more optional arguments
33
- # @see Fog::Service::recognizes
34
- def recognizes(*args)
35
- recognized.concat(args)
36
- end
30
+ # Returns the list of optional arguments.
31
+ #
32
+ # @return [Array] a list of optional arguments
33
+ # @see Fog::Service::recognized
34
+ def recognized
35
+ @recognized ||= []
36
+ end
37
37
 
38
- # Returns the list of optional arguments.
39
- #
40
- # @return [Array] a list of optional arguments
41
- # @see Fog::Service::recognized
42
- def recognized
43
- @recognized ||= []
38
+ # Ensures that required arguments are present and that optional arguments
39
+ # are recognized.
40
+ #
41
+ # @param [Hash] options arguments
42
+ # @raise [ArgumentError] if it can't find a required argument or can't
43
+ # recognize an optional argument
44
+ # @see Fog::Service::validate_options
45
+ def validate_options(options, raise_error_if_unrecognized = true)
46
+ keys = []
47
+ for key, value in options
48
+ unless value.nil?
49
+ keys << key
50
+ end
44
51
  end
45
52
 
46
- # Ensures that required arguments are present and that optional arguments
47
- # are recognized.
48
- #
49
- # @param [Hash] options arguments
50
- # @raise [ArgumentError] if it can't find a required argument or can't
51
- # recognize an optional argument
52
- # @see Fog::Service::validate_options
53
- def validate_options(options)
54
- keys = []
55
- for key, value in options
56
- unless value.nil?
57
- keys << key
58
- end
59
- end
60
- missing = requirements - keys
61
- unless missing.empty?
62
- raise ArgumentError, "Missing required arguments: #{missing.map(&:to_s).sort.join(', ')}"
63
- end
53
+ missing = requirements - keys
54
+ unless missing.empty?
55
+ raise ArgumentError, "Missing required arguments: #{missing.map(&:to_s).sort.join(', ')}"
56
+ end
64
57
 
65
- unless recognizes.empty?
66
- unrecognized = options.keys - requirements - recognized
67
- unless unrecognized.empty?
68
- raise ArgumentError, "Unrecognized arguments: #{unrecognized.map(&:to_s).sort.join(', ')}"
69
- end
58
+ if !recognizes.empty? && raise_error_if_unrecognized
59
+ unrecognized = options.keys - requirements - recognized
60
+ unless unrecognized.empty?
61
+ raise ArgumentError, "Unrecognized arguments: #{unrecognized.map(&:to_s).sort.join(', ')}"
70
62
  end
71
63
  end
72
64
  end
@@ -1,14 +1,14 @@
1
1
  module MultiMail
2
2
  module Receiver
3
- class Simple < MultiMail::Service
3
+ class Simple
4
4
  include MultiMail::Receiver::Base
5
- # Expects the value of the "message" query string parameter to be a raw
6
- # email message parsable by the Mail gem.
5
+
6
+ # Expects a raw email message parsable by the Mail gem.
7
7
  #
8
8
  # @param [Hash] params the content of the webhook
9
9
  # @return [Array<Mail::Message>] messages
10
10
  def transform(params)
11
- [Mail.new(params['message'])]
11
+ [Mail.new(params)]
12
12
  end
13
13
  end
14
14
  end
@@ -1,3 +1,3 @@
1
1
  module MultiMail
2
- VERSION = "0.0.2"
2
+ VERSION = "0.1.0"
3
3
  end
data/lib/multi_mail.rb CHANGED
@@ -2,7 +2,9 @@ require 'base64'
2
2
  require 'cgi'
3
3
  require 'json'
4
4
  require 'openssl'
5
+ require 'iconv' unless RUBY_VERSION >= '1.9'
5
6
 
7
+ require 'faraday'
6
8
  require 'mail'
7
9
  require 'multimap'
8
10
  require 'rack'
@@ -12,6 +14,19 @@ module MultiMail
12
14
  class Error < StandardError; end
13
15
  # Raise if an incoming POST request is forged.
14
16
  class ForgedRequest < MultiMail::Error; end
17
+ # Raise if an API key is invalid.
18
+ class InvalidAPIKey < MultiMail::Error; end
19
+
20
+ # Raise if a message is invalid.
21
+ class InvalidMessage < MultiMail::Error; end
22
+ # Raise if a message has no sender.
23
+ class MissingSender < InvalidMessage; end
24
+ # Raise if a message has no recipients.
25
+ class MissingRecipients < InvalidMessage; end
26
+ # Raise if a message has no subject.
27
+ class MissingSubject < InvalidMessage; end
28
+ # Raise if a message has no body.
29
+ class MissingBody < InvalidMessage; end
15
30
 
16
31
  class << self
17
32
  # @return [RegExp] a message whose subject matches this pattern will be
@@ -79,6 +94,6 @@ end
79
94
 
80
95
  require 'multi_mail/service'
81
96
  require 'multi_mail/receiver'
97
+ require 'multi_mail/message/base'
82
98
  require 'multi_mail/receiver/base'
83
- require 'multi_mail/sender'
84
99
  require 'multi_mail/sender/base'
data/multi_mail.gemspec CHANGED
@@ -15,6 +15,7 @@ Gem::Specification.new do |s|
15
15
  s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
16
16
  s.require_paths = ["lib"]
17
17
 
18
+ s.add_runtime_dependency 'faraday', '~> 0.8.0'
18
19
  s.add_runtime_dependency 'mail', '~> 2.5.3' # Rails 3.2.13, less buggy than 2.4.x
19
20
  s.add_runtime_dependency 'multimap', '~> 1.1.2'
20
21
  s.add_runtime_dependency 'rack', '~> 1.4'
@@ -24,9 +25,11 @@ Gem::Specification.new do |s|
24
25
  s.add_development_dependency 'json', '~> 1.7.7' # to silence coveralls warning
25
26
  s.add_development_dependency 'rake'
26
27
  s.add_development_dependency 'rspec', '~> 2.10'
28
+ s.add_development_dependency 'vcr', '~> 2.0'
27
29
 
28
30
  # For Rake tasks
29
- s.add_development_dependency 'mandrill-api', '~> 1.0.12'
31
+ s.add_development_dependency 'mandrill-api', '~> 1.0.35'
30
32
  s.add_development_dependency 'postmark'
31
33
  s.add_development_dependency 'rest-client', '~> 1.6.7'
34
+ s.add_development_dependency 'sendgrid_webapi'
32
35
  end
Binary file
@@ -0,0 +1,13 @@
1
+ HTTP/1.1 200 OK
2
+ Content-Length: 7575
3
+ Content-Type: application/x-www-form-urlencoded
4
+ X-Request-Start: 1368728762873
5
+ X-Forwarded-Proto: http
6
+ X-Forwarded-Port: 80
7
+ X-Forwarded-For: 198.61.253.119
8
+ User-Agent: Python-urllib/2.7
9
+ Host: rackbin.herokuapp.com
10
+ Connection: close
11
+ Version: HTTP/1.1
12
+
13
+ recipient=foo%2Bbar%40multimail.mailgun.org&sender=james%40opennorth.ca&subject=&from=James+McKinney+%3Cjames%40opennorth.ca%3E&Received=by+luna.mailgun.net+with+SMTP+mgrt+8742233976457%3B+Thu%2C+16+May+2013+18%3A26%3A02+%2B0000&X-Envelope-From=%3Cjames%40opennorth.ca%3E&Received=from+mail-ie0-f176.google.com+%28mail-ie0-f176.google.com+%5B209.85.223.176%5D%29+by+mxa.mailgun.org+with+ESMTP+id+519524b1.6324fb0-in1%3B+Thu%2C+16+May+2013+18%3A25%3A53+-0000+%28UTC%29&Received=by+mail-ie0-f176.google.com+with+SMTP+id+at1so7220895iec.35+for+%3Cfoo%2Bbar%40multimail.mailgun.org%3E%3B+Thu%2C+16+May+2013+11%3A25%3A52+-0700+%28PDT%29&X-Google-Dkim-Signature=v%3D1%3B+a%3Drsa-sha256%3B+c%3Drelaxed%2Frelaxed%3B+d%3Dgoogle.com%3B+s%3D20120113%3B+h%3Dfrom%3Acontent-type%3Acontent-transfer-encoding%3Asubject%3Adate%3Amessage-id+%3Ato%3Amime-version%3Ax-mailer%3Ax-gm-message-state%3B+bh%3D47DEQpj8HBSa%2B%2FTImW%2B5JCeuQeRkm5NMpJWZG3hSuFU%3D%3B+b%3DlBjUT6ywRw8lW1OGr5YqUZwSA6fjnu9sTtDqJ%2BRX9QxXE2b8qISzynqB5aieVHZMlw+F7IiBZwxZcjTcXNGqaSZePmYfTeK7jYnHtPN3hSVYSdjEnJPweaNpTG8YEfW30MjTByX+k4kl8s6Ne1YKM9spIFYo4w40iWRAqQm2GWlw7IZ2NwiBl4EfOYBL%2BgA%2BRyBoc0TM%2F%2F64+T9Yhjffl1mp%2BcSDSAVcqrXfNs84%2FFwZqzyBSkvtledaLVGi23AJ6%2BY8bBBtN9ugYp4Tx+HZvMwbFr0fHQFesJtfBwNCvXy3gk16illqbLFDHBw8CqZjMXBbL%2FOQwAX0zVzcSI1bEq+nmsw%3D%3D&X-Received=by+10.50.131.137+with+SMTP+id+om9mr381819igb.1.1368728752881%3B+Thu%2C+16+May+2013+11%3A25%3A52+-0700+%28PDT%29&Return-Path=%3Cjames%40opennorth.ca%3E&Received=from+%5B192.168.0.105%5D+%28%5B69.165.208.137%5D%29+by+mx.google.com+with+ESMTPSA+id+d9sm5269077igr.4.2013.05.16.11.25.50+for+%3Cfoo%2Bbar%40multimail.mailgun.org%3E+%28version%3DTLSv1+cipher%3DRC4-SHA+bits%3D128%2F128%29%3B+Thu%2C+16+May+2013+11%3A25%3A51+-0700+%28PDT%29&From=James+McKinney+%3Cjames%40opennorth.ca%3E&Content-Type=text%2Fplain&Content-Transfer-Encoding=7bit&Subject=&Date=Thu%2C+16+May+2013+14%3A25%3A49+-0400&Message-Id=%3CDD2D5E91-DC27-4DB1-8E9E-DC5767D35B53%40opennorth.ca%3E&To=foo%2Bbar%40multimail.mailgun.org&Mime-Version=1.0+%28Apple+Message+framework+v1283%29&X-Mailer=Apple+Mail+%282.1283%29&X-Gm-Message-State=ALoCoQlaZGqu6QdEEydVPntY6%2FUZJzH7yUT7oE7uV%2FEvFn%2FXSZ4zMOT9owx5X3BXokYI9AyXtQiM&X-Mailgun-Sflag=No&X-Mailgun-Sscore=0.0&X-Mailgun-Spf=Neutral&X-Mailgun-Incoming=Yes&message-headers=%5B%5B%22Received%22%2C+%22by+luna.mailgun.net+with+SMTP+mgrt+8742233976457%3B+Thu%2C+16+May+2013+18%3A26%3A02+%2B0000%22%5D%2C+%5B%22X-Envelope-From%22%2C+%22%3Cjames%40opennorth.ca%3E%22%5D%2C+%5B%22Received%22%2C+%22from+mail-ie0-f176.google.com+%28mail-ie0-f176.google.com+%5B209.85.223.176%5D%29+by+mxa.mailgun.org+with+ESMTP+id+519524b1.6324fb0-in1%3B+Thu%2C+16+May+2013+18%3A25%3A53+-0000+%28UTC%29%22%5D%2C+%5B%22Received%22%2C+%22by+mail-ie0-f176.google.com+with+SMTP+id+at1so7220895iec.35+for+%3Cfoo%2Bbar%40multimail.mailgun.org%3E%3B+Thu%2C+16+May+2013+11%3A25%3A52+-0700+%28PDT%29%22%5D%2C+%5B%22X-Google-Dkim-Signature%22%2C+%22v%3D1%3B+a%3Drsa-sha256%3B+c%3Drelaxed%2Frelaxed%3B+d%3Dgoogle.com%3B+s%3D20120113%3B+h%3Dfrom%3Acontent-type%3Acontent-transfer-encoding%3Asubject%3Adate%3Amessage-id+%3Ato%3Amime-version%3Ax-mailer%3Ax-gm-message-state%3B+bh%3D47DEQpj8HBSa%2B%2FTImW%2B5JCeuQeRkm5NMpJWZG3hSuFU%3D%3B+b%3DlBjUT6ywRw8lW1OGr5YqUZwSA6fjnu9sTtDqJ%2BRX9QxXE2b8qISzynqB5aieVHZMlw+F7IiBZwxZcjTcXNGqaSZePmYfTeK7jYnHtPN3hSVYSdjEnJPweaNpTG8YEfW30MjTByX+k4kl8s6Ne1YKM9spIFYo4w40iWRAqQm2GWlw7IZ2NwiBl4EfOYBL%2BgA%2BRyBoc0TM%2F%2F64+T9Yhjffl1mp%2BcSDSAVcqrXfNs84%2FFwZqzyBSkvtledaLVGi23AJ6%2BY8bBBtN9ugYp4Tx+HZvMwbFr0fHQFesJtfBwNCvXy3gk16illqbLFDHBw8CqZjMXBbL%2FOQwAX0zVzcSI1bEq+nmsw%3D%3D%22%5D%2C+%5B%22X-Received%22%2C+%22by+10.50.131.137+with+SMTP+id+om9mr381819igb.1.1368728752881%3B+Thu%2C+16+May+2013+11%3A25%3A52+-0700+%28PDT%29%22%5D%2C+%5B%22Return-Path%22%2C+%22%3Cjames%40opennorth.ca%3E%22%5D%2C+%5B%22Received%22%2C+%22from+%5B192.168.0.105%5D+%28%5B69.165.208.137%5D%29+by+mx.google.com+with+ESMTPSA+id+d9sm5269077igr.4.2013.05.16.11.25.50+for+%3Cfoo%2Bbar%40multimail.mailgun.org%3E+%28version%3DTLSv1+cipher%3DRC4-SHA+bits%3D128%2F128%29%3B+Thu%2C+16+May+2013+11%3A25%3A51+-0700+%28PDT%29%22%5D%2C+%5B%22From%22%2C+%22James+McKinney+%3Cjames%40opennorth.ca%3E%22%5D%2C+%5B%22Content-Type%22%2C+%22text%2Fplain%22%5D%2C+%5B%22Content-Transfer-Encoding%22%2C+%227bit%22%5D%2C+%5B%22Subject%22%2C+%22%22%5D%2C+%5B%22Date%22%2C+%22Thu%2C+16+May+2013+14%3A25%3A49+-0400%22%5D%2C+%5B%22Message-Id%22%2C+%22%3CDD2D5E91-DC27-4DB1-8E9E-DC5767D35B53%40opennorth.ca%3E%22%5D%2C+%5B%22To%22%2C+%22foo%2Bbar%40multimail.mailgun.org%22%5D%2C+%5B%22Mime-Version%22%2C+%221.0+%28Apple+Message+framework+v1283%29%22%5D%2C+%5B%22X-Mailer%22%2C+%22Apple+Mail+%282.1283%29%22%5D%2C+%5B%22X-Gm-Message-State%22%2C+%22ALoCoQlaZGqu6QdEEydVPntY6%2FUZJzH7yUT7oE7uV%2FEvFn%2FXSZ4zMOT9owx5X3BXokYI9AyXtQiM%22%5D%2C+%5B%22X-Mailgun-Sflag%22%2C+%22No%22%5D%2C+%5B%22X-Mailgun-Sscore%22%2C+%220.0%22%5D%2C+%5B%22X-Mailgun-Spf%22%2C+%22Neutral%22%5D%2C+%5B%22X-Mailgun-Incoming%22%2C+%22Yes%22%5D%5D&timestamp=1368728762&token=9re7ap1c3w2tl3p34059w2v7yqz0s-l59r1tv4akbt1il87qd2&signature=xxx&body-mime=Received%3A+by+luna.mailgun.net+with+SMTP+mgrt+8742233976457%3B+Thu%2C+16+May+2013%0A+18%3A26%3A02+%2B0000%0D%0AX-Envelope-From%3A+%3Cjames%40opennorth.ca%3E%0D%0AReceived%3A+from+mail-ie0-f176.google.com+%28mail-ie0-f176.google.com%0A+%5B209.85.223.176%5D%29+by+mxa.mailgun.org+with+ESMTP+id+519524b1.6324fb0-in1%3B%0A+Thu%2C+16+May+2013+18%3A25%3A53+-0000+%28UTC%29%0D%0AReceived%3A+by+mail-ie0-f176.google.com+with+SMTP+id+at1so7220895iec.35+for%0A+%3Cfoo%2Bbar%40multimail.mailgun.org%3E%3B+Thu%2C+16+May+2013+11%3A25%3A52+-0700+%28PDT%29%0D%0AX-Google-Dkim-Signature%3A+v%3D1%3B+a%3Drsa-sha256%3B+c%3Drelaxed%2Frelaxed%3B+d%3Dgoogle.com%3B%0A+s%3D20120113%3B%0A+h%3Dfrom%3Acontent-type%3Acontent-transfer-encoding%3Asubject%3Adate%3Amessage-id%0A+%3Ato%3Amime-version%3Ax-mailer%3Ax-gm-message-state%3B%0A+bh%3D47DEQpj8HBSa%2B%2FTImW%2B5JCeuQeRkm5NMpJWZG3hSuFU%3D%3B%0A+b%3DlBjUT6ywRw8lW1OGr5YqUZwSA6fjnu9sTtDqJ%2BRX9QxXE2b8qISzynqB5aieVHZMlw%0A+F7IiBZwxZcjTcXNGqaSZePmYfTeK7jYnHtPN3hSVYSdjEnJPweaNpTG8YEfW30MjTByX%0A+k4kl8s6Ne1YKM9spIFYo4w40iWRAqQm2GWlw7IZ2NwiBl4EfOYBL%2BgA%2BRyBoc0TM%2F%2F64%0A+T9Yhjffl1mp%2BcSDSAVcqrXfNs84%2FFwZqzyBSkvtledaLVGi23AJ6%2BY8bBBtN9ugYp4Tx%0A+HZvMwbFr0fHQFesJtfBwNCvXy3gk16illqbLFDHBw8CqZjMXBbL%2FOQwAX0zVzcSI1bEq+nmsw%3D%3D%0D%0AX-Received%3A+by+10.50.131.137+with+SMTP+id+om9mr381819igb.1.1368728752881%3B%0A+Thu%2C+16+May+2013+11%3A25%3A52+-0700+%28PDT%29%0D%0AReturn-Path%3A+%3Cjames%40opennorth.ca%3E%0D%0AReceived%3A+from+%5B192.168.0.105%5D+%28%5B69.165.208.137%5D%29+by+mx.google.com+with%0A+ESMTPSA+id+d9sm5269077igr.4.2013.05.16.11.25.50+for%0A+%3Cfoo%2Bbar%40multimail.mailgun.org%3E+%28version%3DTLSv1+cipher%3DRC4-SHA%0A+bits%3D128%2F128%29%3B+Thu%2C+16+May+2013+11%3A25%3A51+-0700+%28PDT%29%0D%0AFrom%3A+James+McKinney+%3Cjames%40opennorth.ca%3E%0D%0AContent-Type%3A+text%2Fplain%0D%0AContent-Transfer-Encoding%3A+7bit%0D%0ASubject%3A+%0D%0ADate%3A+Thu%2C+16+May+2013+14%3A25%3A49+-0400%0D%0AMessage-Id%3A+%3CDD2D5E91-DC27-4DB1-8E9E-DC5767D35B53%40opennorth.ca%3E%0D%0ATo%3A+foo%2Bbar%40multimail.mailgun.org%0D%0AMime-Version%3A+1.0+%28Apple+Message+framework+v1283%29%0D%0AX-Mailer%3A+Apple+Mail+%282.1283%29%0D%0AX-Gm-Message-State%3A+ALoCoQlaZGqu6QdEEydVPntY6%2FUZJzH7yUT7oE7uV%2FEvFn%2FXSZ4zMOT9owx5X3BXokYI9AyXtQiM%0D%0AX-Mailgun-Sflag%3A+No%0D%0AX-Mailgun-Sscore%3A+0.0%0D%0AX-Mailgun-Spf%3A+Neutral%0D%0AX-Mailgun-Incoming%3A+Yes%0D%0A%0D%0A
@@ -0,0 +1,13 @@
1
+ HTTP/1.1 200 OK
2
+ Content-Length: 7575
3
+ Content-Type: application/x-www-form-urlencoded
4
+ X-Request-Start: 1368728762873
5
+ X-Forwarded-Proto: http
6
+ X-Forwarded-Port: 80
7
+ X-Forwarded-For: 198.61.253.119
8
+ User-Agent: Python-urllib/2.7
9
+ Host: rackbin.herokuapp.com
10
+ Connection: close
11
+ Version: HTTP/1.1
12
+
13
+ recipient=foo%2Bbar%40multimail.mailgun.org&sender=james%40opennorth.ca&subject=&from=James+McKinney+%3Cjames%40opennorth.ca%3E&Received=by+luna.mailgun.net+with+SMTP+mgrt+8742233976457%3B+Thu%2C+16+May+2013+18%3A26%3A02+%2B0000&X-Envelope-From=%3Cjames%40opennorth.ca%3E&Received=from+mail-ie0-f176.google.com+%28mail-ie0-f176.google.com+%5B209.85.223.176%5D%29+by+mxa.mailgun.org+with+ESMTP+id+519524b1.6324fb0-in1%3B+Thu%2C+16+May+2013+18%3A25%3A53+-0000+%28UTC%29&Received=by+mail-ie0-f176.google.com+with+SMTP+id+at1so7220895iec.35+for+%3Cfoo%2Bbar%40multimail.mailgun.org%3E%3B+Thu%2C+16+May+2013+11%3A25%3A52+-0700+%28PDT%29&X-Google-Dkim-Signature=v%3D1%3B+a%3Drsa-sha256%3B+c%3Drelaxed%2Frelaxed%3B+d%3Dgoogle.com%3B+s%3D20120113%3B+h%3Dfrom%3Acontent-type%3Acontent-transfer-encoding%3Asubject%3Adate%3Amessage-id+%3Ato%3Amime-version%3Ax-mailer%3Ax-gm-message-state%3B+bh%3D47DEQpj8HBSa%2B%2FTImW%2B5JCeuQeRkm5NMpJWZG3hSuFU%3D%3B+b%3DlBjUT6ywRw8lW1OGr5YqUZwSA6fjnu9sTtDqJ%2BRX9QxXE2b8qISzynqB5aieVHZMlw+F7IiBZwxZcjTcXNGqaSZePmYfTeK7jYnHtPN3hSVYSdjEnJPweaNpTG8YEfW30MjTByX+k4kl8s6Ne1YKM9spIFYo4w40iWRAqQm2GWlw7IZ2NwiBl4EfOYBL%2BgA%2BRyBoc0TM%2F%2F64+T9Yhjffl1mp%2BcSDSAVcqrXfNs84%2FFwZqzyBSkvtledaLVGi23AJ6%2BY8bBBtN9ugYp4Tx+HZvMwbFr0fHQFesJtfBwNCvXy3gk16illqbLFDHBw8CqZjMXBbL%2FOQwAX0zVzcSI1bEq+nmsw%3D%3D&X-Received=by+10.50.131.137+with+SMTP+id+om9mr381819igb.1.1368728752881%3B+Thu%2C+16+May+2013+11%3A25%3A52+-0700+%28PDT%29&Return-Path=%3Cjames%40opennorth.ca%3E&Received=from+%5B192.168.0.105%5D+%28%5B69.165.208.137%5D%29+by+mx.google.com+with+ESMTPSA+id+d9sm5269077igr.4.2013.05.16.11.25.50+for+%3Cfoo%2Bbar%40multimail.mailgun.org%3E+%28version%3DTLSv1+cipher%3DRC4-SHA+bits%3D128%2F128%29%3B+Thu%2C+16+May+2013+11%3A25%3A51+-0700+%28PDT%29&From=James+McKinney+%3Cjames%40opennorth.ca%3E&Content-Type=text%2Fplain&Content-Transfer-Encoding=7bit&Subject=&Date=Thu%2C+16+May+2013+14%3A25%3A49+-0400&Message-Id=%3CDD2D5E91-DC27-4DB1-8E9E-DC5767D35B53%40opennorth.ca%3E&To=foo%2Bbar%40multimail.mailgun.org&Mime-Version=1.0+%28Apple+Message+framework+v1283%29&X-Mailer=Apple+Mail+%282.1283%29&X-Gm-Message-State=ALoCoQlaZGqu6QdEEydVPntY6%2FUZJzH7yUT7oE7uV%2FEvFn%2FXSZ4zMOT9owx5X3BXokYI9AyXtQiM&X-Mailgun-Sflag=No&X-Mailgun-Sscore=0.0&X-Mailgun-Spf=Neutral&X-Mailgun-Incoming=Yes&message-headers=%5B%5B%22Received%22%2C+%22by+luna.mailgun.net+with+SMTP+mgrt+8742233976457%3B+Thu%2C+16+May+2013+18%3A26%3A02+%2B0000%22%5D%2C+%5B%22X-Envelope-From%22%2C+%22%3Cjames%40opennorth.ca%3E%22%5D%2C+%5B%22Received%22%2C+%22from+mail-ie0-f176.google.com+%28mail-ie0-f176.google.com+%5B209.85.223.176%5D%29+by+mxa.mailgun.org+with+ESMTP+id+519524b1.6324fb0-in1%3B+Thu%2C+16+May+2013+18%3A25%3A53+-0000+%28UTC%29%22%5D%2C+%5B%22Received%22%2C+%22by+mail-ie0-f176.google.com+with+SMTP+id+at1so7220895iec.35+for+%3Cfoo%2Bbar%40multimail.mailgun.org%3E%3B+Thu%2C+16+May+2013+11%3A25%3A52+-0700+%28PDT%29%22%5D%2C+%5B%22X-Google-Dkim-Signature%22%2C+%22v%3D1%3B+a%3Drsa-sha256%3B+c%3Drelaxed%2Frelaxed%3B+d%3Dgoogle.com%3B+s%3D20120113%3B+h%3Dfrom%3Acontent-type%3Acontent-transfer-encoding%3Asubject%3Adate%3Amessage-id+%3Ato%3Amime-version%3Ax-mailer%3Ax-gm-message-state%3B+bh%3D47DEQpj8HBSa%2B%2FTImW%2B5JCeuQeRkm5NMpJWZG3hSuFU%3D%3B+b%3DlBjUT6ywRw8lW1OGr5YqUZwSA6fjnu9sTtDqJ%2BRX9QxXE2b8qISzynqB5aieVHZMlw+F7IiBZwxZcjTcXNGqaSZePmYfTeK7jYnHtPN3hSVYSdjEnJPweaNpTG8YEfW30MjTByX+k4kl8s6Ne1YKM9spIFYo4w40iWRAqQm2GWlw7IZ2NwiBl4EfOYBL%2BgA%2BRyBoc0TM%2F%2F64+T9Yhjffl1mp%2BcSDSAVcqrXfNs84%2FFwZqzyBSkvtledaLVGi23AJ6%2BY8bBBtN9ugYp4Tx+HZvMwbFr0fHQFesJtfBwNCvXy3gk16illqbLFDHBw8CqZjMXBbL%2FOQwAX0zVzcSI1bEq+nmsw%3D%3D%22%5D%2C+%5B%22X-Received%22%2C+%22by+10.50.131.137+with+SMTP+id+om9mr381819igb.1.1368728752881%3B+Thu%2C+16+May+2013+11%3A25%3A52+-0700+%28PDT%29%22%5D%2C+%5B%22Return-Path%22%2C+%22%3Cjames%40opennorth.ca%3E%22%5D%2C+%5B%22Received%22%2C+%22from+%5B192.168.0.105%5D+%28%5B69.165.208.137%5D%29+by+mx.google.com+with+ESMTPSA+id+d9sm5269077igr.4.2013.05.16.11.25.50+for+%3Cfoo%2Bbar%40multimail.mailgun.org%3E+%28version%3DTLSv1+cipher%3DRC4-SHA+bits%3D128%2F128%29%3B+Thu%2C+16+May+2013+11%3A25%3A51+-0700+%28PDT%29%22%5D%2C+%5B%22From%22%2C+%22James+McKinney+%3Cjames%40opennorth.ca%3E%22%5D%2C+%5B%22Content-Type%22%2C+%22text%2Fplain%22%5D%2C+%5B%22Content-Transfer-Encoding%22%2C+%227bit%22%5D%2C+%5B%22Subject%22%2C+%22%22%5D%2C+%5B%22Date%22%2C+%22Thu%2C+16+May+2013+14%3A25%3A49+-0400%22%5D%2C+%5B%22Message-Id%22%2C+%22%3CDD2D5E91-DC27-4DB1-8E9E-DC5767D35B53%40opennorth.ca%3E%22%5D%2C+%5B%22To%22%2C+%22foo%2Bbar%40multimail.mailgun.org%22%5D%2C+%5B%22Mime-Version%22%2C+%221.0+%28Apple+Message+framework+v1283%29%22%5D%2C+%5B%22X-Mailer%22%2C+%22Apple+Mail+%282.1283%29%22%5D%2C+%5B%22X-Gm-Message-State%22%2C+%22ALoCoQlaZGqu6QdEEydVPntY6%2FUZJzH7yUT7oE7uV%2FEvFn%2FXSZ4zMOT9owx5X3BXokYI9AyXtQiM%22%5D%2C+%5B%22X-Mailgun-Sflag%22%2C+%22No%22%5D%2C+%5B%22X-Mailgun-Sscore%22%2C+%220.0%22%5D%2C+%5B%22X-Mailgun-Spf%22%2C+%22Neutral%22%5D%2C+%5B%22X-Mailgun-Incoming%22%2C+%22Yes%22%5D%5D&timestamp=1368728762&token=9re7ap1c3w2tl3p34059w2v7yqz0s-l59r1tv4akbt1il87qd2&body-mime=Received%3A+by+luna.mailgun.net+with+SMTP+mgrt+8742233976457%3B+Thu%2C+16+May+2013%0A+18%3A26%3A02+%2B0000%0D%0AX-Envelope-From%3A+%3Cjames%40opennorth.ca%3E%0D%0AReceived%3A+from+mail-ie0-f176.google.com+%28mail-ie0-f176.google.com%0A+%5B209.85.223.176%5D%29+by+mxa.mailgun.org+with+ESMTP+id+519524b1.6324fb0-in1%3B%0A+Thu%2C+16+May+2013+18%3A25%3A53+-0000+%28UTC%29%0D%0AReceived%3A+by+mail-ie0-f176.google.com+with+SMTP+id+at1so7220895iec.35+for%0A+%3Cfoo%2Bbar%40multimail.mailgun.org%3E%3B+Thu%2C+16+May+2013+11%3A25%3A52+-0700+%28PDT%29%0D%0AX-Google-Dkim-Signature%3A+v%3D1%3B+a%3Drsa-sha256%3B+c%3Drelaxed%2Frelaxed%3B+d%3Dgoogle.com%3B%0A+s%3D20120113%3B%0A+h%3Dfrom%3Acontent-type%3Acontent-transfer-encoding%3Asubject%3Adate%3Amessage-id%0A+%3Ato%3Amime-version%3Ax-mailer%3Ax-gm-message-state%3B%0A+bh%3D47DEQpj8HBSa%2B%2FTImW%2B5JCeuQeRkm5NMpJWZG3hSuFU%3D%3B%0A+b%3DlBjUT6ywRw8lW1OGr5YqUZwSA6fjnu9sTtDqJ%2BRX9QxXE2b8qISzynqB5aieVHZMlw%0A+F7IiBZwxZcjTcXNGqaSZePmYfTeK7jYnHtPN3hSVYSdjEnJPweaNpTG8YEfW30MjTByX%0A+k4kl8s6Ne1YKM9spIFYo4w40iWRAqQm2GWlw7IZ2NwiBl4EfOYBL%2BgA%2BRyBoc0TM%2F%2F64%0A+T9Yhjffl1mp%2BcSDSAVcqrXfNs84%2FFwZqzyBSkvtledaLVGi23AJ6%2BY8bBBtN9ugYp4Tx%0A+HZvMwbFr0fHQFesJtfBwNCvXy3gk16illqbLFDHBw8CqZjMXBbL%2FOQwAX0zVzcSI1bEq+nmsw%3D%3D%0D%0AX-Received%3A+by+10.50.131.137+with+SMTP+id+om9mr381819igb.1.1368728752881%3B%0A+Thu%2C+16+May+2013+11%3A25%3A52+-0700+%28PDT%29%0D%0AReturn-Path%3A+%3Cjames%40opennorth.ca%3E%0D%0AReceived%3A+from+%5B192.168.0.105%5D+%28%5B69.165.208.137%5D%29+by+mx.google.com+with%0A+ESMTPSA+id+d9sm5269077igr.4.2013.05.16.11.25.50+for%0A+%3Cfoo%2Bbar%40multimail.mailgun.org%3E+%28version%3DTLSv1+cipher%3DRC4-SHA%0A+bits%3D128%2F128%29%3B+Thu%2C+16+May+2013+11%3A25%3A51+-0700+%28PDT%29%0D%0AFrom%3A+James+McKinney+%3Cjames%40opennorth.ca%3E%0D%0AContent-Type%3A+text%2Fplain%0D%0AContent-Transfer-Encoding%3A+7bit%0D%0ASubject%3A+%0D%0ADate%3A+Thu%2C+16+May+2013+14%3A25%3A49+-0400%0D%0AMessage-Id%3A+%3CDD2D5E91-DC27-4DB1-8E9E-DC5767D35B53%40opennorth.ca%3E%0D%0ATo%3A+foo%2Bbar%40multimail.mailgun.org%0D%0AMime-Version%3A+1.0+%28Apple+Message+framework+v1283%29%0D%0AX-Mailer%3A+Apple+Mail+%282.1283%29%0D%0AX-Gm-Message-State%3A+ALoCoQlaZGqu6QdEEydVPntY6%2FUZJzH7yUT7oE7uV%2FEvFn%2FXSZ4zMOT9owx5X3BXokYI9AyXtQiM%0D%0AX-Mailgun-Sflag%3A+No%0D%0AX-Mailgun-Sscore%3A+0.0%0D%0AX-Mailgun-Spf%3A+Neutral%0D%0AX-Mailgun-Incoming%3A+Yes%0D%0A%0D%0A
@@ -0,0 +1,13 @@
1
+ HTTP/1.1 200 OK
2
+ Content-Length: 7699
3
+ Content-Type: application/x-www-form-urlencoded
4
+ X-Request-Start: 1368728764084
5
+ X-Forwarded-Proto: http
6
+ X-Forwarded-Port: 80
7
+ X-Forwarded-For: 198.61.253.117
8
+ User-Agent: Python-urllib/2.7
9
+ Host: rackbin.herokuapp.com
10
+ Connection: close
11
+ Version: HTTP/1.1
12
+
13
+ recipient=foo%2Bbar%40multimail.mailgun.org&sender=james%40opennorth.ca&subject=&from=James+McKinney+%3Cjames%40opennorth.ca%3E&Received=by+luna.mailgun.net+with+SMTP+mgrt+8768977185541%3B+Thu%2C+16+May+2013+18%3A26%3A03+%2B0000&X-Envelope-From=%3Cjames%40opennorth.ca%3E&Received=from+mail-ia0-f174.google.com+%28mail-ia0-f174.google.com+%5B209.85.210.174%5D%29+by+mxa.mailgun.org+with+ESMTP+id+519524b4.60f61f0-in1%3B+Thu%2C+16+May+2013+18%3A25%3A56+-0000+%28UTC%29&Received=by+mail-ia0-f174.google.com+with+SMTP+id+r13so1992106iar.19+for+%3Cfoo%2Bbar%40multimail.mailgun.org%3E%3B+Thu%2C+16+May+2013+11%3A25%3A55+-0700+%28PDT%29&X-Google-Dkim-Signature=v%3D1%3B+a%3Drsa-sha256%3B+c%3Drelaxed%2Frelaxed%3B+d%3Dgoogle.com%3B+s%3D20120113%3B+h%3Dfrom%3Acontent-type%3Acontent-transfer-encoding%3Asubject%3Adate%3Amessage-id+%3Ato%3Amime-version%3Ax-mailer%3Ax-gm-message-state%3B+bh%3Did84uDPa9SMZAVd%2Bg2pYg3Hl9aPfnapoGlOygxrIuV4%3D%3B+b%3DKtPiOX7uzBJtnhdXzQDnhDooMHIiDmSO9L%2BYACP2GuyIZqyeG2jbrAtvfrN4ty0l8x+yKsLweIaf1HfciEbfgO7LNU5GcTozZT%2B%2B2VYOzEwDXLSLB8ei5oWJlACiR3u8C26%2BA3z+L4%2Fx9ODWtS2bnbkVlEYdpBgT2ZGZU4TCT7V5QinbE3UR2lbKQ6e098yn2cT3Ri4PxdYC+tg0boJ9sASbn7vyUZCbFcrts1UnG0fAP21CuTw%2BEtsT8saEArMnbwgubsYaD9lAwfXtx+iK7h4s9Vfjx%2BeMABLFigI9iI37Zt5MD1zKNnjoNW2HOdkx3ErYLEIjcBQXP5hNqCtBpc+mALg%3D%3D&X-Received=by+10.50.128.44+with+SMTP+id+nl12mr386515igb.0.1368728755786%3B+Thu%2C+16+May+2013+11%3A25%3A55+-0700+%28PDT%29&Return-Path=%3Cjames%40opennorth.ca%3E&Received=from+%5B192.168.0.105%5D+%28%5B69.165.208.137%5D%29+by+mx.google.com+with+ESMTPSA+id+d9sm5269077igr.4.2013.05.16.11.25.53+for+%3Cfoo%2Bbar%40multimail.mailgun.org%3E+%28version%3DTLSv1+cipher%3DRC4-SHA+bits%3D128%2F128%29%3B+Thu%2C+16+May+2013+11%3A25%3A54+-0700+%28PDT%29&From=James+McKinney+%3Cjames%40opennorth.ca%3E&Content-Type=text%2Fplain%3B+charset%3D%22us-ascii%22&Content-Transfer-Encoding=7bit&Subject=&Date=Thu%2C+16+May+2013+14%3A25%3A53+-0400&Message-Id=%3C471C0153-45E9-409E-8BE0-C11DCECE8527%40opennorth.ca%3E&To=foo%2Bbar%40multimail.mailgun.org&Mime-Version=1.0+%28Apple+Message+framework+v1283%29&X-Mailer=Apple+Mail+%282.1283%29&X-Gm-Message-State=ALoCoQkHRHyVSpySptrwaD7DCna5bmlrZ5MZLbx9a0a2liuD1YqXkZhOAkyNmQStTxrRGUAqqweM&X-Mailgun-Sflag=No&X-Mailgun-Sscore=0.0&X-Mailgun-Spf=Neutral&X-Mailgun-Incoming=Yes&message-headers=%5B%5B%22Received%22%2C+%22by+luna.mailgun.net+with+SMTP+mgrt+8768977185541%3B+Thu%2C+16+May+2013+18%3A26%3A03+%2B0000%22%5D%2C+%5B%22X-Envelope-From%22%2C+%22%3Cjames%40opennorth.ca%3E%22%5D%2C+%5B%22Received%22%2C+%22from+mail-ia0-f174.google.com+%28mail-ia0-f174.google.com+%5B209.85.210.174%5D%29+by+mxa.mailgun.org+with+ESMTP+id+519524b4.60f61f0-in1%3B+Thu%2C+16+May+2013+18%3A25%3A56+-0000+%28UTC%29%22%5D%2C+%5B%22Received%22%2C+%22by+mail-ia0-f174.google.com+with+SMTP+id+r13so1992106iar.19+for+%3Cfoo%2Bbar%40multimail.mailgun.org%3E%3B+Thu%2C+16+May+2013+11%3A25%3A55+-0700+%28PDT%29%22%5D%2C+%5B%22X-Google-Dkim-Signature%22%2C+%22v%3D1%3B+a%3Drsa-sha256%3B+c%3Drelaxed%2Frelaxed%3B+d%3Dgoogle.com%3B+s%3D20120113%3B+h%3Dfrom%3Acontent-type%3Acontent-transfer-encoding%3Asubject%3Adate%3Amessage-id+%3Ato%3Amime-version%3Ax-mailer%3Ax-gm-message-state%3B+bh%3Did84uDPa9SMZAVd%2Bg2pYg3Hl9aPfnapoGlOygxrIuV4%3D%3B+b%3DKtPiOX7uzBJtnhdXzQDnhDooMHIiDmSO9L%2BYACP2GuyIZqyeG2jbrAtvfrN4ty0l8x+yKsLweIaf1HfciEbfgO7LNU5GcTozZT%2B%2B2VYOzEwDXLSLB8ei5oWJlACiR3u8C26%2BA3z+L4%2Fx9ODWtS2bnbkVlEYdpBgT2ZGZU4TCT7V5QinbE3UR2lbKQ6e098yn2cT3Ri4PxdYC+tg0boJ9sASbn7vyUZCbFcrts1UnG0fAP21CuTw%2BEtsT8saEArMnbwgubsYaD9lAwfXtx+iK7h4s9Vfjx%2BeMABLFigI9iI37Zt5MD1zKNnjoNW2HOdkx3ErYLEIjcBQXP5hNqCtBpc+mALg%3D%3D%22%5D%2C+%5B%22X-Received%22%2C+%22by+10.50.128.44+with+SMTP+id+nl12mr386515igb.0.1368728755786%3B+Thu%2C+16+May+2013+11%3A25%3A55+-0700+%28PDT%29%22%5D%2C+%5B%22Return-Path%22%2C+%22%3Cjames%40opennorth.ca%3E%22%5D%2C+%5B%22Received%22%2C+%22from+%5B192.168.0.105%5D+%28%5B69.165.208.137%5D%29+by+mx.google.com+with+ESMTPSA+id+d9sm5269077igr.4.2013.05.16.11.25.53+for+%3Cfoo%2Bbar%40multimail.mailgun.org%3E+%28version%3DTLSv1+cipher%3DRC4-SHA+bits%3D128%2F128%29%3B+Thu%2C+16+May+2013+11%3A25%3A54+-0700+%28PDT%29%22%5D%2C+%5B%22From%22%2C+%22James+McKinney+%3Cjames%40opennorth.ca%3E%22%5D%2C+%5B%22Content-Type%22%2C+%22text%2Fplain%3B+charset%3D%5C%22us-ascii%5C%22%22%5D%2C+%5B%22Content-Transfer-Encoding%22%2C+%227bit%22%5D%2C+%5B%22Subject%22%2C+%22%22%5D%2C+%5B%22Date%22%2C+%22Thu%2C+16+May+2013+14%3A25%3A53+-0400%22%5D%2C+%5B%22Message-Id%22%2C+%22%3C471C0153-45E9-409E-8BE0-C11DCECE8527%40opennorth.ca%3E%22%5D%2C+%5B%22To%22%2C+%22foo%2Bbar%40multimail.mailgun.org%22%5D%2C+%5B%22Mime-Version%22%2C+%221.0+%28Apple+Message+framework+v1283%29%22%5D%2C+%5B%22X-Mailer%22%2C+%22Apple+Mail+%282.1283%29%22%5D%2C+%5B%22X-Gm-Message-State%22%2C+%22ALoCoQkHRHyVSpySptrwaD7DCna5bmlrZ5MZLbx9a0a2liuD1YqXkZhOAkyNmQStTxrRGUAqqweM%22%5D%2C+%5B%22X-Mailgun-Sflag%22%2C+%22No%22%5D%2C+%5B%22X-Mailgun-Sscore%22%2C+%220.0%22%5D%2C+%5B%22X-Mailgun-Spf%22%2C+%22Neutral%22%5D%2C+%5B%22X-Mailgun-Incoming%22%2C+%22Yes%22%5D%5D&timestamp=1368728763&token=9f4o7ro45ugsca3i48h4zg4itiixh0vh7qz8rpnuda3bdyc181&signature=53acdf9dd008679a3b33780b9693efa5ea659da67f48d78d2ecc28a1235e2c67&body-mime=Received%3A+by+luna.mailgun.net+with+SMTP+mgrt+8768977185541%3B+Thu%2C+16+May+2013%0A+18%3A26%3A03+%2B0000%0D%0AX-Envelope-From%3A+%3Cjames%40opennorth.ca%3E%0D%0AReceived%3A+from+mail-ia0-f174.google.com+%28mail-ia0-f174.google.com%0A+%5B209.85.210.174%5D%29+by+mxa.mailgun.org+with+ESMTP+id+519524b4.60f61f0-in1%3B%0A+Thu%2C+16+May+2013+18%3A25%3A56+-0000+%28UTC%29%0D%0AReceived%3A+by+mail-ia0-f174.google.com+with+SMTP+id+r13so1992106iar.19+for%0A+%3Cfoo%2Bbar%40multimail.mailgun.org%3E%3B+Thu%2C+16+May+2013+11%3A25%3A55+-0700+%28PDT%29%0D%0AX-Google-Dkim-Signature%3A+v%3D1%3B+a%3Drsa-sha256%3B+c%3Drelaxed%2Frelaxed%3B+d%3Dgoogle.com%3B%0A+s%3D20120113%3B%0A+h%3Dfrom%3Acontent-type%3Acontent-transfer-encoding%3Asubject%3Adate%3Amessage-id%0A+%3Ato%3Amime-version%3Ax-mailer%3Ax-gm-message-state%3B%0A+bh%3Did84uDPa9SMZAVd%2Bg2pYg3Hl9aPfnapoGlOygxrIuV4%3D%3B%0A+b%3DKtPiOX7uzBJtnhdXzQDnhDooMHIiDmSO9L%2BYACP2GuyIZqyeG2jbrAtvfrN4ty0l8x%0A+yKsLweIaf1HfciEbfgO7LNU5GcTozZT%2B%2B2VYOzEwDXLSLB8ei5oWJlACiR3u8C26%2BA3z%0A+L4%2Fx9ODWtS2bnbkVlEYdpBgT2ZGZU4TCT7V5QinbE3UR2lbKQ6e098yn2cT3Ri4PxdYC%0A+tg0boJ9sASbn7vyUZCbFcrts1UnG0fAP21CuTw%2BEtsT8saEArMnbwgubsYaD9lAwfXtx%0A+iK7h4s9Vfjx%2BeMABLFigI9iI37Zt5MD1zKNnjoNW2HOdkx3ErYLEIjcBQXP5hNqCtBpc+mALg%3D%3D%0D%0AX-Received%3A+by+10.50.128.44+with+SMTP+id+nl12mr386515igb.0.1368728755786%3B%0A+Thu%2C+16+May+2013+11%3A25%3A55+-0700+%28PDT%29%0D%0AReturn-Path%3A+%3Cjames%40opennorth.ca%3E%0D%0AReceived%3A+from+%5B192.168.0.105%5D+%28%5B69.165.208.137%5D%29+by+mx.google.com+with%0A+ESMTPSA+id+d9sm5269077igr.4.2013.05.16.11.25.53+for%0A+%3Cfoo%2Bbar%40multimail.mailgun.org%3E+%28version%3DTLSv1+cipher%3DRC4-SHA%0A+bits%3D128%2F128%29%3B+Thu%2C+16+May+2013+11%3A25%3A54+-0700+%28PDT%29%0D%0AFrom%3A+James+McKinney+%3Cjames%40opennorth.ca%3E%0D%0AContent-Type%3A+text%2Fplain%3B+charset%3D%22us-ascii%22%0D%0AContent-Transfer-Encoding%3A+7bit%0D%0ASubject%3A+%0D%0ADate%3A+Thu%2C+16+May+2013+14%3A25%3A53+-0400%0D%0AMessage-Id%3A+%3C471C0153-45E9-409E-8BE0-C11DCECE8527%40opennorth.ca%3E%0D%0ATo%3A+foo%2Bbar%40multimail.mailgun.org%0D%0AMime-Version%3A+1.0+%28Apple+Message+framework+v1283%29%0D%0AX-Mailer%3A+Apple+Mail+%282.1283%29%0D%0AX-Gm-Message-State%3A+ALoCoQkHRHyVSpySptrwaD7DCna5bmlrZ5MZLbx9a0a2liuD1YqXkZhOAkyNmQStTxrRGUAqqweM%0D%0AX-Mailgun-Sflag%3A+No%0D%0AX-Mailgun-Sscore%3A+0.0%0D%0AX-Mailgun-Spf%3A+Neutral%0D%0AX-Mailgun-Incoming%3A+Yes%0D%0A%0D%0AXJS%2AC4JDBQADN1.NSBN3%2A2IDNEN%2AGTUBE-STANDARD-ANTI-UBE-TEST-EMAIL%2AC.34X
@@ -0,0 +1,13 @@
1
+ HTTP/1.1 200 OK
2
+ Content-Length: 11133
3
+ Content-Type: application/x-www-form-urlencoded
4
+ X-Request-Start: 1368728697065
5
+ X-Forwarded-Proto: http
6
+ X-Forwarded-Port: 80
7
+ X-Forwarded-For: 198.61.253.119
8
+ User-Agent: Python-urllib/2.7
9
+ Host: rackbin.herokuapp.com
10
+ Connection: close
11
+ Version: HTTP/1.1
12
+
13
+ recipient=foo%2Bbar%40multimail.mailgun.org&sender=james%40opennorth.ca&subject=Test&from=James+McKinney+%3Cjames%40opennorth.ca%3E&Received=by+luna.mailgun.net+with+SMTP+mgrt+8736253172409%3B+Thu%2C+16+May+2013+18%3A24%3A56+%2B0000&X-Envelope-From=%3Cjames%40opennorth.ca%3E&Received=from+mail-ia0-f181.google.com+%28mail-ia0-f181.google.com+%5B209.85.210.181%5D%29+by+mxa.mailgun.org+with+ESMTP+id+51952470.5508670-in1%3B+Thu%2C+16+May+2013+18%3A24%3A48+-0000+%28UTC%29&Received=by+mail-ia0-f181.google.com+with+SMTP+id+y25so3791913iay.40+for+%3Cfoo%2Bbar%40multimail.mailgun.org%3E%3B+Thu%2C+16+May+2013+11%3A24%3A48+-0700+%28PDT%29&X-Google-Dkim-Signature=v%3D1%3B+a%3Drsa-sha256%3B+c%3Drelaxed%2Frelaxed%3B+d%3Dgoogle.com%3B+s%3D20120113%3B+h%3Dx-received%3Afrom%3Acontent-type%3Asubject%3Adate%3Amessage-id%3Ato+%3Amime-version%3Ax-mailer%3Ax-gm-message-state%3B+bh%3DnHFddTyry8jWu92HPsWcxea8gMgaxJXAbq%2BmcjOcjM0%3D%3B+b%3Do2rCiZFjV6gjurnIHGtUiavMLKk7AcyjPR0Ysa2DUZrkfErwzAzQCJVI1330GkxoiG+6pj3vrAI80wyk8PwQy5Lp0K3Jy%2BY0%2FiZxDav4hZIRWjmbuIeDfuAv9FcxWEfWMutD6af+GKMjc3DwgRsLkDx0u%2BWMgaH6FQ%2B%2FkU84YlYB%2B%2BN5PnAtv8f40PjicGVc0BPEbRAi64sW+e62zpoeMSHwF4oFX5WLn%2B5fKghT3IzOyoSACGhMa8AI3dFRxIfBL1NdTDqTIj%2Fkv%2BmWO+FseRRSKUck5BOGlmXNIyEGTN1xv%2Bt78lAcVuGTmf2Ky3gZsyMjn3y1U6Yer6ofitLOdb+%2Bamw%3D%3D&X-Received=by+10.42.30.8+with+SMTP+id+t8mr23963282icc.43.1368728688269%3B+Thu%2C+16+May+2013+11%3A24%3A48+-0700+%28PDT%29&Return-Path=%3Cjames%40opennorth.ca%3E&Received=from+%5B192.168.0.105%5D+%28%5B69.165.208.137%5D%29+by+mx.google.com+with+ESMTPSA+id+o10sm5288167igh.2.2013.05.16.11.24.46+for+%3Cfoo%2Bbar%40multimail.mailgun.org%3E+%28version%3DTLSv1+cipher%3DRC4-SHA+bits%3D128%2F128%29%3B+Thu%2C+16+May+2013+11%3A24%3A46+-0700+%28PDT%29&From=James+McKinney+%3Cjames%40opennorth.ca%3E&Content-Type=multipart%2Falternative%3B+boundary%3D%22Apple-Mail%3D_38D81264-10EE-42AE-A4F5-12897E2F7C54%22&Subject=Test&Date=Mon%2C+15+Apr+2013+20%3A20%3A12+-0400&Message-Id=%3C99CF7D8C-FCD4-443F-8E04-69C4E470D18F%40opennorth.ca%3E&To=foo%2Bbar%40multimail.mailgun.org&Mime-Version=1.0+%28Apple+Message+framework+v1283%29&X-Mailer=Apple+Mail+%282.1283%29&X-Gm-Message-State=ALoCoQm%2FbhpTykjTryk%2ByHHQD2%2F%2ByEZqxOzTReRuZT8pwCujwlA21ICpGD8h3oL8BMMWyRVAjku4&X-Mailgun-Sflag=No&X-Mailgun-Sscore=0.0&X-Mailgun-Spf=Neutral&X-Mailgun-Incoming=Yes&message-headers=%5B%5B%22Received%22%2C+%22by+luna.mailgun.net+with+SMTP+mgrt+8736253172409%3B+Thu%2C+16+May+2013+18%3A24%3A56+%2B0000%22%5D%2C+%5B%22X-Envelope-From%22%2C+%22%3Cjames%40opennorth.ca%3E%22%5D%2C+%5B%22Received%22%2C+%22from+mail-ia0-f181.google.com+%28mail-ia0-f181.google.com+%5B209.85.210.181%5D%29+by+mxa.mailgun.org+with+ESMTP+id+51952470.5508670-in1%3B+Thu%2C+16+May+2013+18%3A24%3A48+-0000+%28UTC%29%22%5D%2C+%5B%22Received%22%2C+%22by+mail-ia0-f181.google.com+with+SMTP+id+y25so3791913iay.40+for+%3Cfoo%2Bbar%40multimail.mailgun.org%3E%3B+Thu%2C+16+May+2013+11%3A24%3A48+-0700+%28PDT%29%22%5D%2C+%5B%22X-Google-Dkim-Signature%22%2C+%22v%3D1%3B+a%3Drsa-sha256%3B+c%3Drelaxed%2Frelaxed%3B+d%3Dgoogle.com%3B+s%3D20120113%3B+h%3Dx-received%3Afrom%3Acontent-type%3Asubject%3Adate%3Amessage-id%3Ato+%3Amime-version%3Ax-mailer%3Ax-gm-message-state%3B+bh%3DnHFddTyry8jWu92HPsWcxea8gMgaxJXAbq%2BmcjOcjM0%3D%3B+b%3Do2rCiZFjV6gjurnIHGtUiavMLKk7AcyjPR0Ysa2DUZrkfErwzAzQCJVI1330GkxoiG+6pj3vrAI80wyk8PwQy5Lp0K3Jy%2BY0%2FiZxDav4hZIRWjmbuIeDfuAv9FcxWEfWMutD6af+GKMjc3DwgRsLkDx0u%2BWMgaH6FQ%2B%2FkU84YlYB%2B%2BN5PnAtv8f40PjicGVc0BPEbRAi64sW+e62zpoeMSHwF4oFX5WLn%2B5fKghT3IzOyoSACGhMa8AI3dFRxIfBL1NdTDqTIj%2Fkv%2BmWO+FseRRSKUck5BOGlmXNIyEGTN1xv%2Bt78lAcVuGTmf2Ky3gZsyMjn3y1U6Yer6ofitLOdb+%2Bamw%3D%3D%22%5D%2C+%5B%22X-Received%22%2C+%22by+10.42.30.8+with+SMTP+id+t8mr23963282icc.43.1368728688269%3B+Thu%2C+16+May+2013+11%3A24%3A48+-0700+%28PDT%29%22%5D%2C+%5B%22Return-Path%22%2C+%22%3Cjames%40opennorth.ca%3E%22%5D%2C+%5B%22Received%22%2C+%22from+%5B192.168.0.105%5D+%28%5B69.165.208.137%5D%29+by+mx.google.com+with+ESMTPSA+id+o10sm5288167igh.2.2013.05.16.11.24.46+for+%3Cfoo%2Bbar%40multimail.mailgun.org%3E+%28version%3DTLSv1+cipher%3DRC4-SHA+bits%3D128%2F128%29%3B+Thu%2C+16+May+2013+11%3A24%3A46+-0700+%28PDT%29%22%5D%2C+%5B%22From%22%2C+%22James+McKinney+%3Cjames%40opennorth.ca%3E%22%5D%2C+%5B%22Content-Type%22%2C+%22multipart%2Falternative%3B+boundary%3D%5C%22Apple-Mail%3D_38D81264-10EE-42AE-A4F5-12897E2F7C54%5C%22%22%5D%2C+%5B%22Subject%22%2C+%22Test%22%5D%2C+%5B%22Date%22%2C+%22Mon%2C+15+Apr+2013+20%3A20%3A12+-0400%22%5D%2C+%5B%22Message-Id%22%2C+%22%3C99CF7D8C-FCD4-443F-8E04-69C4E470D18F%40opennorth.ca%3E%22%5D%2C+%5B%22To%22%2C+%22foo%2Bbar%40multimail.mailgun.org%22%5D%2C+%5B%22Mime-Version%22%2C+%221.0+%28Apple+Message+framework+v1283%29%22%5D%2C+%5B%22X-Mailer%22%2C+%22Apple+Mail+%282.1283%29%22%5D%2C+%5B%22X-Gm-Message-State%22%2C+%22ALoCoQm%2FbhpTykjTryk%2ByHHQD2%2F%2ByEZqxOzTReRuZT8pwCujwlA21ICpGD8h3oL8BMMWyRVAjku4%22%5D%2C+%5B%22X-Mailgun-Sflag%22%2C+%22No%22%5D%2C+%5B%22X-Mailgun-Sscore%22%2C+%220.0%22%5D%2C+%5B%22X-Mailgun-Spf%22%2C+%22Neutral%22%5D%2C+%5B%22X-Mailgun-Incoming%22%2C+%22Yes%22%5D%5D&timestamp=1366071615&token=5o56tmpwd3dnwthehwclemd-i-7u2gv9vb3u745ywj67d0mc87&signature=bc2ab6c1080d52f2a06928b93f21e86c2d28c548e2ef64354f8ba1a95bb53cd6&body-mime=Received%3A+by+luna.mailgun.net+with+SMTP+mgrt+8736253172409%3B+Thu%2C+16+May+2013%0A+18%3A24%3A56+%2B0000%0D%0AX-Envelope-From%3A+%3Cjames%40opennorth.ca%3E%0D%0AReceived%3A+from+mail-ia0-f181.google.com+%28mail-ia0-f181.google.com%0A+%5B209.85.210.181%5D%29+by+mxa.mailgun.org+with+ESMTP+id+51952470.5508670-in1%3B%0A+Thu%2C+16+May+2013+18%3A24%3A48+-0000+%28UTC%29%0D%0AReceived%3A+by+mail-ia0-f181.google.com+with+SMTP+id+y25so3791913iay.40+for%0A+%3Cfoo%2Bbar%40multimail.mailgun.org%3E%3B+Thu%2C+16+May+2013+11%3A24%3A48+-0700+%28PDT%29%0D%0AX-Google-Dkim-Signature%3A+v%3D1%3B+a%3Drsa-sha256%3B+c%3Drelaxed%2Frelaxed%3B+d%3Dgoogle.com%3B%0A+s%3D20120113%3B+h%3Dx-received%3Afrom%3Acontent-type%3Asubject%3Adate%3Amessage-id%3Ato%0A+%3Amime-version%3Ax-mailer%3Ax-gm-message-state%3B%0A+bh%3DnHFddTyry8jWu92HPsWcxea8gMgaxJXAbq%2BmcjOcjM0%3D%3B%0A+b%3Do2rCiZFjV6gjurnIHGtUiavMLKk7AcyjPR0Ysa2DUZrkfErwzAzQCJVI1330GkxoiG%0A+6pj3vrAI80wyk8PwQy5Lp0K3Jy%2BY0%2FiZxDav4hZIRWjmbuIeDfuAv9FcxWEfWMutD6af%0A+GKMjc3DwgRsLkDx0u%2BWMgaH6FQ%2B%2FkU84YlYB%2B%2BN5PnAtv8f40PjicGVc0BPEbRAi64sW%0A+e62zpoeMSHwF4oFX5WLn%2B5fKghT3IzOyoSACGhMa8AI3dFRxIfBL1NdTDqTIj%2Fkv%2BmWO%0A+FseRRSKUck5BOGlmXNIyEGTN1xv%2Bt78lAcVuGTmf2Ky3gZsyMjn3y1U6Yer6ofitLOdb+%2Bamw%3D%3D%0D%0AX-Received%3A+by+10.42.30.8+with+SMTP+id+t8mr23963282icc.43.1368728688269%3B%0A+Thu%2C+16+May+2013+11%3A24%3A48+-0700+%28PDT%29%0D%0AReturn-Path%3A+%3Cjames%40opennorth.ca%3E%0D%0AReceived%3A+from+%5B192.168.0.105%5D+%28%5B69.165.208.137%5D%29+by+mx.google.com+with%0A+ESMTPSA+id+o10sm5288167igh.2.2013.05.16.11.24.46+for%0A+%3Cfoo%2Bbar%40multimail.mailgun.org%3E+%28version%3DTLSv1+cipher%3DRC4-SHA%0A+bits%3D128%2F128%29%3B+Thu%2C+16+May+2013+11%3A24%3A46+-0700+%28PDT%29%0D%0AFrom%3A+James+McKinney+%3Cjames%40opennorth.ca%3E%0D%0AContent-Type%3A+multipart%2Falternative%3B+boundary%3D%22Apple-Mail%3D_38D81264-10EE-42AE-A4F5-12897E2F7C54%22%0D%0ASubject%3A+Test%0D%0ADate%3A+Mon%2C+15+Apr+2013+20%3A20%3A12+-0400%0D%0AMessage-Id%3A+%3C99CF7D8C-FCD4-443F-8E04-69C4E470D18F%40opennorth.ca%3E%0D%0ATo%3A+foo%2Bbar%40multimail.mailgun.org%0D%0AMime-Version%3A+1.0+%28Apple+Message+framework+v1283%29%0D%0AX-Mailer%3A+Apple+Mail+%282.1283%29%0D%0AX-Gm-Message-State%3A+ALoCoQm%2FbhpTykjTryk%2ByHHQD2%2F%2ByEZqxOzTReRuZT8pwCujwlA21ICpGD8h3oL8BMMWyRVAjku4%0D%0AX-Mailgun-Sflag%3A+No%0D%0AX-Mailgun-Sscore%3A+0.0%0D%0AX-Mailgun-Spf%3A+Neutral%0D%0AX-Mailgun-Incoming%3A+Yes%0D%0A%0D%0A--Apple-Mail%3D_38D81264-10EE-42AE-A4F5-12897E2F7C54%0D%0AContent-Transfer-Encoding%3A+7bit%0D%0AContent-Type%3A+text%2Fplain%3B%0D%0A%09charset%3Dus-ascii%0D%0A%0D%0Abold+text%0D%0A%0D%0A%0D%0A%0D%0Asome+more+bold+text%0D%0A%0D%0A%0D%0A%0D%0Asome+italic+text%0D%0A%0D%0A%3E+multiline%0D%0A%3E+quoted%0D%0A%3E+text%0D%0A%0D%0A%0D%0A--%0D%0ASignature+block%0D%0A--Apple-Mail%3D_38D81264-10EE-42AE-A4F5-12897E2F7C54%0D%0AContent-Type%3A+multipart%2Fmixed%3B%0D%0A%09boundary%3D%22Apple-Mail%3D_7A3447DB-E6A4-47CF-B623-0F2038F9E60B%22%0D%0A%0D%0A%0D%0A--Apple-Mail%3D_7A3447DB-E6A4-47CF-B623-0F2038F9E60B%0D%0AContent-Transfer-Encoding%3A+7bit%0D%0AContent-Type%3A+text%2Fhtml%3B%0D%0A%09charset%3Dus-ascii%0D%0A%0D%0A%3Chtml%3E%3Chead%3E%3C%2Fhead%3E%3Cbody+style%3D%22word-wrap%3A+break-word%3B+-webkit-nbsp-mode%3A+space%3B+-webkit-line-break%3A+after-white-space%3B+%22%3E%3Cb%3Ebold+text%3C%2Fb%3E%3Cdiv%3E%3Cbr%3E%3C%2Fdiv%3E%3Cdiv%3E%3C%2Fdiv%3E%3C%2Fbody%3E%3C%2Fhtml%3E%0D%0A--Apple-Mail%3D_7A3447DB-E6A4-47CF-B623-0F2038F9E60B%0D%0AContent-Disposition%3A+attachment%3B%0D%0A%09filename%3Dfoo.txt%0D%0AContent-Type%3A+text%2Fplain%3B%0D%0A%09x-unix-mode%3D0644%3B%0D%0A%09name%3D%22foo.txt%22%0D%0AContent-Transfer-Encoding%3A+7bit%0D%0A%0D%0ALorem+ipsum+dolor+sit+amet%2C+consectetur+adipiscing+elit.%0D%0A%0D%0A--Apple-Mail%3D_7A3447DB-E6A4-47CF-B623-0F2038F9E60B%0D%0AContent-Transfer-Encoding%3A+7bit%0D%0AContent-Type%3A+text%2Fhtml%3B%0D%0A%09charset%3Dus-ascii%0D%0A%0D%0A%3Chtml%3E%3Cbody+style%3D%22word-wrap%3A+break-word%3B+-webkit-nbsp-mode%3A+space%3B+-webkit-line-break%3A+after-white-space%3B+%22%3E%3Chead%3E%3C%2Fhead%3E%3Cbr%3E%3Cdiv%3E%3C%2Fdiv%3E%3Cdiv%3E%3Cbr%3E%3C%2Fdiv%3E%3Cdiv%3E%3Cb%3Esome+more+bold+text%3C%2Fb%3E%3C%2Fdiv%3E%3Cdiv%3E%3Cb%3E%3Cbr%3E%3C%2Fb%3E%3C%2Fdiv%3E%3Cdiv%3E%3Cb%3E%3C%2Fb%3E%3C%2Fdiv%3E%3C%2Fbody%3E%3C%2Fhtml%3E%0D%0A--Apple-Mail%3D_7A3447DB-E6A4-47CF-B623-0F2038F9E60B%0D%0AContent-Disposition%3A+attachment%3B%0D%0A%09filename%3Dbar.txt%0D%0AContent-Type%3A+text%2Fplain%3B%0D%0A%09x-unix-mode%3D0644%3B%0D%0A%09name%3D%22bar.txt%22%0D%0AContent-Transfer-Encoding%3A+7bit%0D%0A%0D%0ANam+accumsan+euismod+eros+et+rhoncus.%0D%0A%0D%0A--Apple-Mail%3D_7A3447DB-E6A4-47CF-B623-0F2038F9E60B%0D%0AContent-Transfer-Encoding%3A+7bit%0D%0AContent-Type%3A+text%2Fhtml%3B%0D%0A%09charset%3Dus-ascii%0D%0A%0D%0A%3Chtml%3E%3Chead%3E%3C%2Fhead%3E%3Cbody+style%3D%22word-wrap%3A+break-word%3B+-webkit-nbsp-mode%3A+space%3B+-webkit-line-break%3A+after-white-space%3B+%22%3E%3Cbr%3E%3Cdiv%3E%3Cb%3E%3C%2Fb%3E%3C%2Fdiv%3E%3Cdiv%3E%3Cb%3E%3Cspan+class%3D%22Apple-style-span%22+style%3D%22font-weight%3A+normal%3B+%22%3E%3Cbr%3E%3C%2Fspan%3E%3C%2Fb%3E%3C%2Fdiv%3E%3Cdiv%3E%3Cb%3E%3Cspan+class%3D%22Apple-style-span%22+style%3D%22font-weight%3A+normal%3B+%22%3E%3Ci%3Esome+italic+text%3C%2Fi%3E%3C%2Fspan%3E%3C%2Fb%3E%3C%2Fdiv%3E%3Cdiv%3E%3Cb%3E%3Cspan+class%3D%22Apple-style-span%22+style%3D%22font-weight%3A+normal%3B+%22%3E%3Cbr%3E%3C%2Fspan%3E%3C%2Fb%3E%3C%2Fdiv%3E%3Cdiv%3E%3Cblockquote+type%3D%22cite%22%3Emultiline%3C%2Fblockquote%3E%3Cblockquote+type%3D%22cite%22%3Equoted%3C%2Fblockquote%3E%3Cblockquote+type%3D%22cite%22%3Etext%3C%2Fblockquote%3E%3C%2Fdiv%3E%3Cdiv%3E%3Cbr%3E%3C%2Fdiv%3E%3Cdiv%3E--%3C%2Fdiv%3E%3Cdiv%3ESignature+block%3C%2Fdiv%3E%3C%2Fbody%3E%3C%2Fhtml%3E%0D%0A--Apple-Mail%3D_7A3447DB-E6A4-47CF-B623-0F2038F9E60B--%0D%0A%0D%0A--Apple-Mail%3D_38D81264-10EE-42AE-A4F5-12897E2F7C54--%0D%0A
@@ -0,0 +1,15 @@
1
+ HTTP/1.1 200 OK
2
+ Content-Length: 5617
3
+ Content-Type: application/x-www-form-urlencoded
4
+ X-Request-Start: 1369936696755
5
+ X-Mandrill-Signature: xxx
6
+ X-Forwarded-Proto: http
7
+ X-Forwarded-Port: 80
8
+ X-Forwarded-For: 54.214.68.124
9
+ User-Agent: Mandrill-Webhook/1.0
10
+ Host: rackbin.herokuapp.com
11
+ Connection: close
12
+ Accept: */*
13
+ Version: HTTP/1.1
14
+
15
+ mandrill_events=%5B%7B%22event%22%3A%22inbound%22%2C%22ts%22%3A1369936696%2C%22msg%22%3A%7B%22raw_msg%22%3A%22Received%3A+from+mail-ob0-f171.google.com+%28mail-ob0-f171.google.com+%5B209.85.214.171%5D%29%5Cn%5Ctby+ip-10-249-27-209+%28Postfix%29+with+ESMTPS+id+66C5FE1C0A4%5Cn%5Ctfor+%3Cfoo%2Bbar%40govkit.org%3E%3B+Thu%2C+30+May+2013+17%3A58%3A10+%2B0000+%28UTC%29%5CnReceived%3A+by+mail-ob0-f171.google.com+with+SMTP+id+dn14so1210143obc.30%5Cn++++++++for+%3Cfoo%2Bbar%40govkit.org%3E%3B+Thu%2C+30+May+2013+10%3A58%3A09+-0700+%28PDT%29%5CnX-Google-DKIM-Signature%3A+v%3D1%3B+a%3Drsa-sha256%3B+c%3Drelaxed%5C%2Frelaxed%3B%5Cn++++++++d%3Dgoogle.com%3B+s%3D20120113%3B%5Cn++++++++h%3Dfrom%3Acontent-type%3Acontent-transfer-encoding%3Asubject%3Adate%3Amessage-id%5Cn+++++++++%3Ato%3Amime-version%3Ax-mailer%3Ax-gm-message-state%3B%5Cn++++++++bh%3D47DEQpj8HBSa%2B%5C%2FTImW%2B5JCeuQeRkm5NMpJWZG3hSuFU%3D%3B%5Cn++++++++b%3DSI%5C%2FNChu8mdE7mo4NG4gR74brC4En4M26tu7iKicblvmWWfdqFxRskFnIy1UmifC4lj%5Cn+++++++++atcYSI8WYN4LkckUwNf1maqQqBx%2B2M%5C%2FCkSHpMtpqV2uhfd0bsP6Xr2U27Lq0Qc9UxhL1%5Cn+++++++++7gSdYaVUm53VN5cBUngV2zm%2BF5QIq4uIUFxWjmL%2B3CZKvo6CtIoZS0zMihEIfbB87tTw%5Cn+++++++++erhxwulc%5C%2FiA%5C%2FDlYhbftvmtMCPkAuJafUhabdg7vSHWw0l3R7CN1zcUpnNUdEZzwK9GsN%5Cn+++++++++B0WL3gbjWzk727mlk9k6ejKt5Z9whBeaJ8OVKMIZOn7nhdbiplOzXarSEwmhll7eDXUg%5Cn+++++++++fyQg%3D%3D%5CnX-Received%3A+by+10.60.37.133+with+SMTP+id+y5mr4562147oej.123.1369936689131%3B%5Cn++++++++Thu%2C+30+May+2013+10%3A58%3A09+-0700+%28PDT%29%5CnReceived%3A+from+%5B192.168.0.102%5D+%28%5B69.165.208.137%5D%29%5Cn++++++++by+mx.google.com+with+ESMTPSA+id+hv3sm43172948obb.7.2013.05.30.10.58.06%5Cn++++++++for+%3Cfoo%2Bbar%40govkit.org%3E%5Cn++++++++%28version%3DTLSv1+cipher%3DRC4-SHA+bits%3D128%5C%2F128%29%3B%5Cn++++++++Thu%2C+30+May+2013+10%3A58%3A07+-0700+%28PDT%29%5CnFrom%3A+James+McKinney+%3Cjames%40opennorth.ca%3E%5CnContent-Type%3A+text%5C%2Fplain%5CnContent-Transfer-Encoding%3A+7bit%5CnSubject%3A+%5CnDate%3A+Thu%2C+30+May+2013+13%3A58%3A05+-0400%5CnMessage-Id%3A+%3C5B2DAE74-CE00-4A73-B7C6-5AE4C2EAD5FE%40opennorth.ca%3E%5CnTo%3A+foo%2Bbar%40govkit.org%5CnMime-Version%3A+1.0+%28Apple+Message+framework+v1283%29%5CnX-Mailer%3A+Apple+Mail+%282.1283%29%5CnX-Gm-Message-State%3A+ALoCoQn70NOfOklBLwZZN9Xsgep5nMg6jpgOCNHvteto9%5C%2FjHIOYSq71BfRxC3H7CsevGw6ZhSS9h%22%2C%22headers%22%3A%7B%22Received%22%3A%5B%22from+mail-ob0-f171.google.com+%28mail-ob0-f171.google.com+%5B209.85.214.171%5D%29+by+ip-10-249-27-209+%28Postfix%29+with+ESMTPS+id+66C5FE1C0A4+for+%3Cfoo%2Bbar%40govkit.org%3E%3B+Thu%2C+30+May+2013+17%3A58%3A10+%2B0000+%28UTC%29%22%2C%22by+mail-ob0-f171.google.com+with+SMTP+id+dn14so1210143obc.30+for+%3Cfoo%2Bbar%40govkit.org%3E%3B+Thu%2C+30+May+2013+10%3A58%3A09+-0700+%28PDT%29%22%2C%22from+%5B192.168.0.102%5D+%28%5B69.165.208.137%5D%29+by+mx.google.com+with+ESMTPSA+id+hv3sm43172948obb.7.2013.05.30.10.58.06+for+%3Cfoo%2Bbar%40govkit.org%3E+%28version%3DTLSv1+cipher%3DRC4-SHA+bits%3D128%5C%2F128%29%3B+Thu%2C+30+May+2013+10%3A58%3A07+-0700+%28PDT%29%22%5D%2C%22X-Google-Dkim-Signature%22%3A%22v%3D1%3B+a%3Drsa-sha256%3B+c%3Drelaxed%5C%2Frelaxed%3B+d%3Dgoogle.com%3B+s%3D20120113%3B+h%3Dfrom%3Acontent-type%3Acontent-transfer-encoding%3Asubject%3Adate%3Amessage-id+%3Ato%3Amime-version%3Ax-mailer%3Ax-gm-message-state%3B+bh%3D47DEQpj8HBSa%2B%5C%2FTImW%2B5JCeuQeRkm5NMpJWZG3hSuFU%3D%3B+b%3DSI%5C%2FNChu8mdE7mo4NG4gR74brC4En4M26tu7iKicblvmWWfdqFxRskFnIy1UmifC4lj+atcYSI8WYN4LkckUwNf1maqQqBx%2B2M%5C%2FCkSHpMtpqV2uhfd0bsP6Xr2U27Lq0Qc9UxhL1+7gSdYaVUm53VN5cBUngV2zm%2BF5QIq4uIUFxWjmL%2B3CZKvo6CtIoZS0zMihEIfbB87tTw+erhxwulc%5C%2FiA%5C%2FDlYhbftvmtMCPkAuJafUhabdg7vSHWw0l3R7CN1zcUpnNUdEZzwK9GsN+B0WL3gbjWzk727mlk9k6ejKt5Z9whBeaJ8OVKMIZOn7nhdbiplOzXarSEwmhll7eDXUg+fyQg%3D%3D%22%2C%22X-Received%22%3A%22by+10.60.37.133+with+SMTP+id+y5mr4562147oej.123.1369936689131%3B+Thu%2C+30+May+2013+10%3A58%3A09+-0700+%28PDT%29%22%2C%22From%22%3A%22James+McKinney+%3Cjames%40opennorth.ca%3E%22%2C%22Content-Type%22%3A%22text%5C%2Fplain%22%2C%22Content-Transfer-Encoding%22%3A%227bit%22%2C%22Subject%22%3A%22%22%2C%22Date%22%3A%22Thu%2C+30+May+2013+13%3A58%3A05+-0400%22%2C%22Message-Id%22%3A%22%3C5B2DAE74-CE00-4A73-B7C6-5AE4C2EAD5FE%40opennorth.ca%3E%22%2C%22To%22%3A%22foo%2Bbar%40govkit.org%22%2C%22Mime-Version%22%3A%221.0+%28Apple+Message+framework+v1283%29%22%2C%22X-Mailer%22%3A%22Apple+Mail+%282.1283%29%22%2C%22X-Gm-Message-State%22%3A%22ALoCoQn70NOfOklBLwZZN9Xsgep5nMg6jpgOCNHvteto9%5C%2FjHIOYSq71BfRxC3H7CsevGw6ZhSS9h%22%7D%2C%22text%22%3Anull%2C%22text_flowed%22%3Afalse%2C%22from_email%22%3A%22james%40opennorth.ca%22%2C%22from_name%22%3A%22James+McKinney%22%2C%22to%22%3A%5B%5B%22foo%2Bbar%40govkit.org%22%2Cnull%5D%5D%2C%22subject%22%3A%22%22%2C%22spam_report%22%3A%7B%22score%22%3A1.6%2C%22matched_rules%22%3A%5B%7B%22name%22%3A%22RCVD_IN_DNSWL_LOW%22%2C%22score%22%3A-0.7%2C%22description%22%3A%22RBL%3A+Sender+listed+at+http%3A%5C%2F%5C%2Fwww.dnswl.org%5C%2F%2C+low%22%7D%2C%7B%22name%22%3Anull%2C%22score%22%3A0%2C%22description%22%3Anull%7D%2C%7B%22name%22%3A%22listed%22%2C%22score%22%3A0%2C%22description%22%3A%22in+list.dnswl.org%5D%22%7D%2C%7B%22name%22%3A%22EMPTY_MESSAGE%22%2C%22score%22%3A2.3%2C%22description%22%3A%22Message+appears+to+have+no+textual+parts+and+no%22%7D%2C%7B%22name%22%3A%22text%22%2C%22score%22%3A0%2C%22description%22%3Anull%7D%5D%7D%2C%22dkim%22%3A%7B%22signed%22%3Afalse%2C%22valid%22%3Afalse%7D%2C%22spf%22%3A%7B%22result%22%3A%22pass%22%2C%22detail%22%3A%22sender+SPF+authorized%22%7D%2C%22email%22%3A%22foo%2Bbar%40govkit.org%22%2C%22tags%22%3A%5B%5D%2C%22sender%22%3Anull%2C%22template%22%3Anull%7D%7D%5D