incoming 0.1.4 → 0.1.5
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.
- data/README.md +32 -0
- data/lib/incoming.rb +1 -1
- data/lib/incoming/strategies/mailgun.rb +11 -6
- data/lib/incoming/strategies/postmark.rb +0 -4
- data/lib/incoming/strategies/sendgrid.rb +8 -7
- data/lib/incoming/strategy.rb +24 -4
- metadata +5 -37
data/README.md
CHANGED
@@ -117,6 +117,38 @@ result = EmailReceiver.receive(req) # => Got message from whoever@wherever.com w
|
|
117
117
|
# /etc/mail/aliases
|
118
118
|
http_post: "|http_post -s 6d7e5337a0cd69f52c3fcf9f5af438b1 http://www.example.com/emails"
|
119
119
|
```
|
120
|
+
## Qmail example:
|
121
|
+
|
122
|
+
```ruby
|
123
|
+
class EmailReceiver < Incoming::Strategies::HTTPPost
|
124
|
+
setup :secret => '6d7e5337a0cd69f52c3fcf9f5af438b1'
|
125
|
+
|
126
|
+
def receive(mail)
|
127
|
+
puts %(Got message from #{mail.to.first} with subject "#{mail.subject}")
|
128
|
+
end
|
129
|
+
end
|
130
|
+
|
131
|
+
req = Rack::Request.new(env)
|
132
|
+
result = EmailReceiver.receive(req) # => Got message from whoever@wherever.com with subject "hello world"
|
133
|
+
```
|
134
|
+
|
135
|
+
To setup a *global* incoming email alias:
|
136
|
+
|
137
|
+
```
|
138
|
+
# /var/qmail/alias/.qmail-whoever - mails to whoever@ will be delivered to this alias.
|
139
|
+
|http_post -s 6d7e5337a0cd69f52c3fcf9f5af438b1 http://www.example.com/emails
|
140
|
+
```
|
141
|
+
|
142
|
+
Domain-specific incoming aliases can be set as follows:
|
143
|
+
|
144
|
+
```
|
145
|
+
#/var/qmail/control/virtualdomains
|
146
|
+
example.com:example
|
147
|
+
|
148
|
+
#~example/.qmail-whoever
|
149
|
+
|http_post -s 6d7e5337a0cd69f52c3fcf9f5af438b1 http://www.example.com/emails
|
150
|
+
```
|
151
|
+
Now mails to `whoever@example.com` will be posted to the corresponding URL above. To post all mails for `example.com`, just add the above line to `~example/.qmail-default`.
|
120
152
|
|
121
153
|
## Example Rails controller
|
122
154
|
|
data/lib/incoming.rb
CHANGED
@@ -41,11 +41,17 @@ module Incoming
|
|
41
41
|
html_content = params[ self.class.default_options[:stripped] ? 'stripped-html' : 'body-html' ]
|
42
42
|
text_content = params[ self.class.default_options[:stripped] ? 'stripped-text' : 'body-plain' ]
|
43
43
|
|
44
|
+
if self.class.default_options[:stripped] && text_content.to_s == ''
|
45
|
+
html_content = params['body-html']
|
46
|
+
text_content = params['body-plain']
|
47
|
+
end
|
48
|
+
|
49
|
+
attachments = 1.upto(params['attachment-count'].to_i).map do |num|
|
50
|
+
attachment_from_params(params["attachment-#{num}"])
|
51
|
+
end
|
52
|
+
|
44
53
|
@message = Mail.new do
|
45
54
|
headers Hash[JSON.parse(params['message-headers'])]
|
46
|
-
from params['from']
|
47
|
-
to params['recipient']
|
48
|
-
subject params['subject']
|
49
55
|
|
50
56
|
body text_content
|
51
57
|
|
@@ -54,9 +60,8 @@ module Incoming
|
|
54
60
|
body html_content
|
55
61
|
end if html_content
|
56
62
|
|
57
|
-
|
58
|
-
attachment
|
59
|
-
add_file(:filename => attachment.original_filename, :content => attachment.read)
|
63
|
+
attachments.each do |attachment|
|
64
|
+
add_file(attachment)
|
60
65
|
end
|
61
66
|
end
|
62
67
|
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'json'
|
2
|
+
|
1
3
|
module Incoming
|
2
4
|
module Strategies
|
3
5
|
class SendGrid
|
@@ -5,16 +7,16 @@ module Incoming
|
|
5
7
|
|
6
8
|
def initialize(request)
|
7
9
|
params = request.params.dup
|
8
|
-
envelope = JSON.parse(params['envelope'])
|
9
10
|
|
10
11
|
# TODO: Properly handle encodings
|
11
12
|
# encodings = JSON.parse(params['charsets'])
|
12
13
|
|
14
|
+
attachments = 1.upto(params['attachments'].to_i).map do |num|
|
15
|
+
attachment_from_params(params["attachment#{num}"])
|
16
|
+
end
|
17
|
+
|
13
18
|
@message = Mail.new do
|
14
19
|
header params['headers']
|
15
|
-
from params['from']
|
16
|
-
to envelope['to'].first
|
17
|
-
subject params['subject']
|
18
20
|
|
19
21
|
body params['text']
|
20
22
|
|
@@ -23,9 +25,8 @@ module Incoming
|
|
23
25
|
body params['html']
|
24
26
|
end if params['html']
|
25
27
|
|
26
|
-
|
27
|
-
attachment
|
28
|
-
add_file(:filename => attachment.original_filename, :content => attachment.read)
|
28
|
+
attachments.each do |attachment|
|
29
|
+
add_file(attachment)
|
29
30
|
end
|
30
31
|
end
|
31
32
|
end
|
data/lib/incoming/strategy.rb
CHANGED
@@ -72,9 +72,7 @@ module Incoming
|
|
72
72
|
# Public: Translates arguments into a Mail::Message object
|
73
73
|
def initialize(*args) ; end
|
74
74
|
|
75
|
-
|
76
|
-
|
77
|
-
# Protected: Evaluates message and performs appropriate action.
|
75
|
+
# Public: Evaluates message and performs appropriate action.
|
78
76
|
# Override in subclass
|
79
77
|
#
|
80
78
|
# mail - A Mail::Message object
|
@@ -84,7 +82,7 @@ module Incoming
|
|
84
82
|
raise NotImplementedError.new('You must implement #receive')
|
85
83
|
end
|
86
84
|
|
87
|
-
#
|
85
|
+
# Public: Authenticates request before performing #receive
|
88
86
|
#
|
89
87
|
# Examples:
|
90
88
|
#
|
@@ -102,5 +100,27 @@ module Incoming
|
|
102
100
|
def authenticate
|
103
101
|
true
|
104
102
|
end
|
103
|
+
|
104
|
+
protected
|
105
|
+
|
106
|
+
# Protected: Normalize file from params
|
107
|
+
#
|
108
|
+
# uploaded_file_or_hash - ActionController::UploadedFile,
|
109
|
+
# ActionDispatch::Http::UploadedFile, or Hash
|
110
|
+
#
|
111
|
+
# Returns Hash for Mail::Message#add_file
|
112
|
+
def attachment_from_params(uploaded_file_or_hash)
|
113
|
+
filename, content = if Hash === uploaded_file_or_hash
|
114
|
+
[uploaded_file_or_hash['filename'], uploaded_file_or_hash['tempfile'].read]
|
115
|
+
else
|
116
|
+
[uploaded_file_or_hash.original_filename, uploaded_file_or_hash.read]
|
117
|
+
end
|
118
|
+
|
119
|
+
{
|
120
|
+
:filename => filename,
|
121
|
+
:content => content
|
122
|
+
}
|
123
|
+
end
|
124
|
+
|
105
125
|
end
|
106
126
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: incoming
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.5
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-
|
12
|
+
date: 2013-05-23 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: mail
|
@@ -75,38 +75,6 @@ dependencies:
|
|
75
75
|
- - ! '>='
|
76
76
|
- !ruby/object:Gem::Version
|
77
77
|
version: '0'
|
78
|
-
- !ruby/object:Gem::Dependency
|
79
|
-
name: guard
|
80
|
-
requirement: !ruby/object:Gem::Requirement
|
81
|
-
none: false
|
82
|
-
requirements:
|
83
|
-
- - ! '>='
|
84
|
-
- !ruby/object:Gem::Version
|
85
|
-
version: '0'
|
86
|
-
type: :development
|
87
|
-
prerelease: false
|
88
|
-
version_requirements: !ruby/object:Gem::Requirement
|
89
|
-
none: false
|
90
|
-
requirements:
|
91
|
-
- - ! '>='
|
92
|
-
- !ruby/object:Gem::Version
|
93
|
-
version: '0'
|
94
|
-
- !ruby/object:Gem::Dependency
|
95
|
-
name: guard-rspec
|
96
|
-
requirement: !ruby/object:Gem::Requirement
|
97
|
-
none: false
|
98
|
-
requirements:
|
99
|
-
- - ! '>='
|
100
|
-
- !ruby/object:Gem::Version
|
101
|
-
version: '0'
|
102
|
-
type: :development
|
103
|
-
prerelease: false
|
104
|
-
version_requirements: !ruby/object:Gem::Requirement
|
105
|
-
none: false
|
106
|
-
requirements:
|
107
|
-
- - ! '>='
|
108
|
-
- !ruby/object:Gem::Version
|
109
|
-
version: '0'
|
110
78
|
description: Incoming! standardizes various mail parse apis, making it a snap to receive
|
111
79
|
emails through HTTP post hooks.
|
112
80
|
email:
|
@@ -141,7 +109,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
141
109
|
version: '0'
|
142
110
|
segments:
|
143
111
|
- 0
|
144
|
-
hash:
|
112
|
+
hash: 1004414202407084554
|
145
113
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
146
114
|
none: false
|
147
115
|
requirements:
|
@@ -150,10 +118,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
150
118
|
version: '0'
|
151
119
|
segments:
|
152
120
|
- 0
|
153
|
-
hash:
|
121
|
+
hash: 1004414202407084554
|
154
122
|
requirements: []
|
155
123
|
rubyforge_project:
|
156
|
-
rubygems_version: 1.8.
|
124
|
+
rubygems_version: 1.8.23
|
157
125
|
signing_key:
|
158
126
|
specification_version: 3
|
159
127
|
summary: Incoming! helps you receive email in your Rack apps.
|