incoming 0.1.6 → 0.1.7

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 1342785e330570e8dead5676e9f6bfbbfc5e7c71
4
- data.tar.gz: 131181e9b82a02b6fa5532cd57d1a00c1e77382a
3
+ metadata.gz: 669e826d514d7f60c2f0b573d05e06b5c787bd58
4
+ data.tar.gz: 69297a42708e49dcc34dfbb8c9e7564c98fca255
5
5
  SHA512:
6
- metadata.gz: bedd0840a7fd2cb6ac7fa8e8f8737b041f4e8ee2cd320fa84225ce7a16c08b1ce2f614a2a18e1429785c97a121f263ad75dd54da7738b3c3fa24c01fe5220122
7
- data.tar.gz: cab1511a00c240863aabef46d66d721393b168d4b4316350f481c02eeb803bcb172072f5f45f12033f694ca9116c21e47ef45d7e2baf12009991135b9e6c1003
6
+ metadata.gz: fffdd521a873011ce3a2c63086b9a90428a366b6eb0e902692d1c58c10d15a200f6b1329bcb5c270dc0d7ad8fb93f30e2fa30c4298c2faf218a892b16ed12b56
7
+ data.tar.gz: b74dd6dd56b1a0dacc49807b38da6fbe5747045d7ea28703574eee4ea0f827e8275154141ff724520501a06aa6eb94a781c9968ec69de29543b4202d930ca18c
data/README.md CHANGED
@@ -7,11 +7,12 @@ Incoming! receives a `Rack::Request` and hands you a [`Mail::Message`](https://g
7
7
  like `ActionMailer::Base.receive` does with a raw email. We currently
8
8
  support the following services:
9
9
 
10
- 1. SendGrid
11
- 2. Mailgun
12
- 3. Postmark
13
- 4. CloudMailin
14
- 5. Any mail server capable of routing messages to a system command
10
+ * SendGrid
11
+ * Mailgun
12
+ * Postmark
13
+ * CloudMailin
14
+ * Mandrill
15
+ * Any mail server capable of routing messages to a system command
15
16
 
16
17
  Brought to you by :zap: **Honeybadger.io**, painless [Rails exception tracking](https://www.honeybadger.io/).
17
18
 
@@ -31,12 +32,12 @@ Brought to you by :zap: **Honeybadger.io**, painless [Rails exception tracking](
31
32
  3. Implement an HTTP endpoint to receive HTTP post hooks, and pass the
32
33
  request to your receiver. (see examples below)
33
34
 
34
- ## SendGrid example:
35
+ ## SendGrid example
35
36
 
36
37
  ```ruby
37
38
  class EmailReceiver < Incoming::Strategies::SendGrid
38
39
  def receive(mail)
39
- puts %(Got message from #{mail.to.first} with subject "#{mail.subject}")
40
+ %(Got message from #{mail.to.first} with subject "#{mail.subject}")
40
41
  end
41
42
  end
42
43
 
@@ -46,14 +47,14 @@ result = EmailReceiver.receive(req) # => Got message from whoever@wherever.com w
46
47
 
47
48
  [Sendgrid API reference](http://sendgrid.com/docs/API_Reference/Webhooks/parse.html)
48
49
 
49
- ## Mailgun example:
50
+ ## Mailgun example
50
51
 
51
52
  ```ruby
52
53
  class EmailReceiver < Incoming::Strategies::Mailgun
53
54
  setup :api_key => 'asdf'
54
55
 
55
56
  def receive(mail)
56
- puts %(Got message from #{mail.to.first} with subject "#{mail.subject}")
57
+ %(Got message from #{mail.to.first} with subject "#{mail.subject}")
57
58
  end
58
59
  end
59
60
 
@@ -63,12 +64,12 @@ result = EmailReceiver.receive(req) # => Got message from whoever@wherever.com w
63
64
 
64
65
  [Mailgun API reference](http://documentation.mailgun.net/user_manual.html#receiving-messages)
65
66
 
66
- ## Postmark example:
67
+ ## Postmark example
67
68
 
68
69
  ```ruby
69
70
  class EmailReceiver < Incoming::Strategies::Postmark
70
71
  def receive(mail)
71
- puts %(Got message from #{mail.to.first} with subject "#{mail.subject}")
72
+ %(Got message from #{mail.to.first} with subject "#{mail.subject}")
72
73
  end
73
74
  end
74
75
 
@@ -78,14 +79,14 @@ result = EmailReceiver.receive(req) # => Got message from whoever@wherever.com w
78
79
 
79
80
  [Postmark API reference](http://developer.postmarkapp.com/developer-inbound.html)
80
81
 
81
- ## CloudMailin example:
82
+ ## CloudMailin example
82
83
 
83
84
  Use the Raw Format when setting up your address target.
84
85
 
85
86
  ```ruby
86
87
  class EmailReceiver < Incoming::Strategies::CloudMailin
87
88
  def receive(mail)
88
- puts %(Got message from #{mail.to.first} with subject "#{mail.subject}")
89
+ %(Got message from #{mail.to.first} with subject "#{mail.subject}")
89
90
  end
90
91
  end
91
92
 
@@ -95,14 +96,35 @@ result = EmailReceiver.receive(req) # => Got message from whoever@wherever.com w
95
96
 
96
97
  [CloudMailin API reference](http://docs.cloudmailin.com/http_post_formats/)
97
98
 
98
- ## Postfix example:
99
+ ## Mandrill example
100
+
101
+ Mandrill is capable of sending multiple events in a single webhook, so
102
+ the Mandrill strategy works a bit differently than the others. Namely,
103
+ the `.receive` method returns an Array of return values from your
104
+ `#receive` method for each inbound event in the payload. Otherwise, the
105
+ implementation is the same:
106
+
107
+ ```ruby
108
+ class EmailReceiver < Incoming::Strategies::Mandrill
109
+ def receive(mail)
110
+ %(Got message from #{mail.to.first} with subject "#{mail.subject}")
111
+ end
112
+ end
113
+
114
+ req = Rack::Request.new(env)
115
+ result = EmailReceiver.receive(req) # => ['Got message from whoever@wherever.com with subject "hello world"', '...']
116
+ ```
117
+
118
+ [Mandrill API reference](http://help.mandrill.com/entries/22092308-What-is-the-format-of-inbound-email-webhooks-)
119
+
120
+ ## Postfix example
99
121
 
100
122
  ```ruby
101
123
  class EmailReceiver < Incoming::Strategies::HTTPPost
102
124
  setup :secret => '6d7e5337a0cd69f52c3fcf9f5af438b1'
103
125
 
104
126
  def receive(mail)
105
- puts %(Got message from #{mail.to.first} with subject "#{mail.subject}")
127
+ %(Got message from #{mail.to.first} with subject "#{mail.subject}")
106
128
  end
107
129
  end
108
130
 
@@ -124,7 +146,7 @@ class EmailReceiver < Incoming::Strategies::HTTPPost
124
146
  setup :secret => '6d7e5337a0cd69f52c3fcf9f5af438b1'
125
147
 
126
148
  def receive(mail)
127
- puts %(Got message from #{mail.to.first} with subject "#{mail.subject}")
149
+ %(Got message from #{mail.to.first} with subject "#{mail.subject}")
128
150
  end
129
151
  end
130
152
 
@@ -2,9 +2,10 @@ require 'mail'
2
2
  require 'incoming/strategy'
3
3
 
4
4
  module Incoming
5
- VERSION = '0.1.6'
5
+ VERSION = '0.1.7'
6
6
 
7
7
  module Strategies
8
+ autoload :Mandrill, 'incoming/strategies/mandrill'
8
9
  autoload :SendGrid, 'incoming/strategies/sendgrid'
9
10
  autoload :Mailgun, 'incoming/strategies/mailgun'
10
11
  autoload :Postmark, 'incoming/strategies/postmark'
@@ -0,0 +1,22 @@
1
+ require 'json'
2
+
3
+ module Incoming
4
+ module Strategies
5
+ class Mandrill
6
+ include Incoming::Strategy
7
+
8
+ def self.receive(request)
9
+ JSON.parse(request.params['mandrill_events']).map do |event|
10
+ next unless event['event'] == 'inbound'
11
+ result = super(event['msg'])
12
+ yield(result) if block_given?
13
+ result
14
+ end.compact
15
+ end
16
+
17
+ def initialize(msg)
18
+ @message = Mail.new(msg['raw_msg'])
19
+ end
20
+ end
21
+ end
22
+ end
@@ -9,7 +9,7 @@ module Incoming
9
9
  params = request.params.dup
10
10
 
11
11
  # TODO: Properly handle encodings
12
- # encodings = JSON.parse(params['charsets'])
12
+ encodings = JSON.parse(params['charsets'])
13
13
 
14
14
  attachments = 1.upto(params['attachments'].to_i).map do |num|
15
15
  attachment_from_params(params["attachment#{num}"])
@@ -17,12 +17,19 @@ module Incoming
17
17
 
18
18
  @message = Mail.new do
19
19
  header params['headers']
20
-
21
- body params['text']
20
+ if encodings['text'].blank?
21
+ body params['text']
22
+ else
23
+ body params['text'].force_encoding(encodings['text']).encode('UTF-8')
24
+ end
22
25
 
23
26
  html_part do
24
27
  content_type 'text/html; charset=UTF-8'
25
- body params['html']
28
+ if encodings['html'].blank?
29
+ body params['html']
30
+ else
31
+ body params['html'].force_encoding(encodings['html']).encode('UTF-8')
32
+ end
26
33
  end if params['html']
27
34
 
28
35
  attachments.each do |attachment|
metadata CHANGED
@@ -1,69 +1,69 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: incoming
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.6
4
+ version: 0.1.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Joshua Wood
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-12-27 00:00:00.000000000 Z
11
+ date: 2014-04-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rack
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - '>='
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
19
  version: '0'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - '>='
24
+ - - ">="
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: mail
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ~>
31
+ - - "~>"
32
32
  - !ruby/object:Gem::Version
33
33
  version: '2.4'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - ~>
38
+ - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: '2.4'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rake
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - '>='
45
+ - - ">="
46
46
  - !ruby/object:Gem::Version
47
47
  version: '0'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - '>='
52
+ - - ">="
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: rspec
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - '>='
59
+ - - ">="
60
60
  - !ruby/object:Gem::Version
61
61
  version: '0'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - '>='
66
+ - - ">="
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
69
  description: Incoming! standardizes various mail parse apis, making it a snap to receive
@@ -75,17 +75,18 @@ executables:
75
75
  extensions: []
76
76
  extra_rdoc_files: []
77
77
  files:
78
+ - MIT-LICENSE
79
+ - README.md
80
+ - Rakefile
81
+ - bin/http_post
82
+ - lib/incoming.rb
78
83
  - lib/incoming/strategies/cloudmailin.rb
79
84
  - lib/incoming/strategies/http_post.rb
80
85
  - lib/incoming/strategies/mailgun.rb
86
+ - lib/incoming/strategies/mandrill.rb
81
87
  - lib/incoming/strategies/postmark.rb
82
88
  - lib/incoming/strategies/sendgrid.rb
83
89
  - lib/incoming/strategy.rb
84
- - lib/incoming.rb
85
- - MIT-LICENSE
86
- - Rakefile
87
- - README.md
88
- - bin/http_post
89
90
  homepage: https://github.com/honeybadger-io/incoming
90
91
  licenses: []
91
92
  metadata: {}
@@ -95,17 +96,17 @@ require_paths:
95
96
  - lib
96
97
  required_ruby_version: !ruby/object:Gem::Requirement
97
98
  requirements:
98
- - - '>='
99
+ - - ">="
99
100
  - !ruby/object:Gem::Version
100
101
  version: '0'
101
102
  required_rubygems_version: !ruby/object:Gem::Requirement
102
103
  requirements:
103
- - - '>='
104
+ - - ">="
104
105
  - !ruby/object:Gem::Version
105
106
  version: '0'
106
107
  requirements: []
107
108
  rubyforge_project:
108
- rubygems_version: 2.1.5
109
+ rubygems_version: 2.2.0
109
110
  signing_key:
110
111
  specification_version: 4
111
112
  summary: Incoming! helps you receive email in your Rack apps.