pony 1.10 → 1.11
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 +4 -4
- data/README.md +274 -0
- data/Rakefile +11 -1
- data/lib/pony.rb +47 -20
- data/pony.gemspec +3 -2
- data/spec/pony_spec.rb +7 -5
- metadata +17 -3
- data/README.rdoc +0 -276
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3174f77ea35e6999224137e7bfa6267bdada8642
|
4
|
+
data.tar.gz: eca13df1efe9e87982f83f09cbf12df3022db9cf
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d1945679fe5266a6973539300fabb181eea9d8abc69ec4bad21841d0df52fc244ef430c73a09a7c8952a0b1c0c9591f13724216c4bfeabd5266b4fbff3b14c76
|
7
|
+
data.tar.gz: 7d3f7bcd9ef86f858271d850f364fb8837ec861a16b2214941b89df9d6d2531e53c4da569e43ce1bc48a86da9f2337d7a1b10f75e9ca472eab70ba9a3c60f89f
|
data/README.md
ADDED
@@ -0,0 +1,274 @@
|
|
1
|
+
# Pony, the express way to send email in Ruby #
|
2
|
+
|
3
|
+
## Overview ##
|
4
|
+
|
5
|
+
Ruby no longer has to be jealous of PHP's mail() function, which can send an email in a single command.
|
6
|
+
|
7
|
+
Pony.mail(:to => 'you@example.com', :from => 'me@example.com', :subject => 'hi', :body => 'Hello there.')
|
8
|
+
Pony.mail(:to => 'you@example.com', :html_body => '<h1>Hello there!</h1>', :body => "In case you can't read html, Hello there.")
|
9
|
+
Pony.mail(:to => 'you@example.com', :cc => 'him@example.com', :from => 'me@example.com', :subject => 'hi', :body => 'Howsit!')
|
10
|
+
|
11
|
+
Any option key may be omitted except for ```:to```. See List Of Options section for the complete list.
|
12
|
+
|
13
|
+
## Transport ##
|
14
|
+
|
15
|
+
Pony uses ```/usr/sbin/sendmail``` to send mail if it is available, otherwise it uses SMTP to localhost.
|
16
|
+
|
17
|
+
This can be over-ridden if you specify a via option:
|
18
|
+
|
19
|
+
Pony.mail(:to => 'you@example.com', :via => :smtp) # sends via SMTP
|
20
|
+
Pony.mail(:to => 'you@example.com', :via => :sendmail) # sends via sendmail
|
21
|
+
|
22
|
+
You can also specify options for SMTP:
|
23
|
+
|
24
|
+
Pony.mail({
|
25
|
+
:to => 'you@example.com',
|
26
|
+
:via => :smtp,
|
27
|
+
:via_options => {
|
28
|
+
:address => 'smtp.yourserver.com',
|
29
|
+
:port => '25',
|
30
|
+
:user_name => 'user',
|
31
|
+
:password => 'password',
|
32
|
+
:authentication => :plain, # :plain, :login, :cram_md5, no auth by default
|
33
|
+
:domain => "localhost.localdomain" # the HELO domain provided by the client to the server
|
34
|
+
}
|
35
|
+
})
|
36
|
+
|
37
|
+
Gmail example (with TLS/SSL)
|
38
|
+
|
39
|
+
Pony.mail({
|
40
|
+
:to => 'you@example.com',
|
41
|
+
:via => :smtp,
|
42
|
+
:via_options => {
|
43
|
+
:address => 'smtp.gmail.com',
|
44
|
+
:port => '587',
|
45
|
+
:enable_starttls_auto => true,
|
46
|
+
:user_name => 'user',
|
47
|
+
:password => 'password',
|
48
|
+
:authentication => :plain, # :plain, :login, :cram_md5, no auth by default
|
49
|
+
:domain => "localhost.localdomain" # the HELO domain provided by the client to the server
|
50
|
+
}
|
51
|
+
})
|
52
|
+
|
53
|
+
And options for Sendmail:
|
54
|
+
|
55
|
+
Pony.mail({
|
56
|
+
:to => 'you@example.com',
|
57
|
+
:via => :sendmail,
|
58
|
+
:via_options => {
|
59
|
+
:location => '/path/to/sendmail', # defaults to 'which sendmail' or '/usr/sbin/sendmail' if 'which' fails
|
60
|
+
:arguments => '-t' # -t and -i are the defaults
|
61
|
+
}
|
62
|
+
})
|
63
|
+
|
64
|
+
If you're using ssmtp, set ```:arguments => ''```.
|
65
|
+
|
66
|
+
## Attachments ##
|
67
|
+
|
68
|
+
You can attach a file or two with the :attachments option:
|
69
|
+
|
70
|
+
Pony.mail(..., :attachments => {"foo.zip" => File.read("path/to/foo.zip"), "hello.txt" => "hello!"})
|
71
|
+
|
72
|
+
Note: An attachment's mime-type is set based on the filename (as dictated by the ruby gem mime-types). So 'foo.pdf' has a mime-type of 'application/pdf'
|
73
|
+
|
74
|
+
## Custom Headers ##
|
75
|
+
|
76
|
+
Pony allows you to specify custom mail headers
|
77
|
+
|
78
|
+
Pony.mail(
|
79
|
+
:to => 'me@example.com',
|
80
|
+
:headers => { "List-ID" => "...", "X-My-Custom-Header" => "what a cool custom header" }
|
81
|
+
)
|
82
|
+
|
83
|
+
Add additional options for headers in each part of letter (text, html)
|
84
|
+
|
85
|
+
Pony.mail(
|
86
|
+
:body => 'test',
|
87
|
+
:html_body => 'What do you know, Joe?',
|
88
|
+
:attachments => {"foo.txt" => "content of foo.txt"},
|
89
|
+
:body_part_header => { content_disposition: "inline" }
|
90
|
+
)
|
91
|
+
|
92
|
+
This will add option ```'Content-Disposition: inline'``` for text part header of letter.
|
93
|
+
|
94
|
+
Also you can add additional options for html part of latter, e.g.:
|
95
|
+
|
96
|
+
:html_body_part_header => { content_disposition: "inline" }
|
97
|
+
|
98
|
+
|
99
|
+
## List Of Options ##
|
100
|
+
|
101
|
+
You can get a list of options from Pony directly:
|
102
|
+
|
103
|
+
Pony.permissable_options
|
104
|
+
|
105
|
+
Options passed pretty much directly to Mail
|
106
|
+
|
107
|
+
attachments # see Attachments section
|
108
|
+
bcc
|
109
|
+
body # the plain text body
|
110
|
+
body_part_header # see Custom headers section
|
111
|
+
cc
|
112
|
+
charset # In case you need to send in utf-8 or similar
|
113
|
+
content_type
|
114
|
+
from
|
115
|
+
headers # see Custom headers section
|
116
|
+
html_body # for sending html-formatted email
|
117
|
+
html_body_part_header # see Custom headers section
|
118
|
+
message_id
|
119
|
+
reply_to
|
120
|
+
sender # Sets "envelope from" (and the Sender header)
|
121
|
+
smtp_envelope_to
|
122
|
+
subject
|
123
|
+
text_part_charset # for multipart messages, set the charset of the text part
|
124
|
+
to
|
125
|
+
|
126
|
+
Other options
|
127
|
+
via # :smtp or :sendmail, see Transport section
|
128
|
+
via_options # specify transport options, see Transport section
|
129
|
+
|
130
|
+
### Default Options ###
|
131
|
+
|
132
|
+
Default options can be set so that they don't have to be repeated. The default options you set will be overriden by any options you pass in to Pony.mail()
|
133
|
+
|
134
|
+
Pony.options = { :from => 'noreply@example.com', :via => :smtp, :via_options => { :host => 'smtp.yourserver.com' } }
|
135
|
+
Pony.mail(:to => 'foo@bar') # Sends mail to foo@bar from noreply@example.com using smtp
|
136
|
+
Pony.mail(:from => 'pony@example.com', :to => 'foo@bar') # Sends mail to foo@bar from pony@example.com using smtp
|
137
|
+
|
138
|
+
|
139
|
+
### Override Options ###
|
140
|
+
|
141
|
+
Override options can be set so that the override value is always be used, even if a different value is passed in to Pony.options() or Pony.mail(). This can be used to configure a development or staging environment.
|
142
|
+
|
143
|
+
Pony.override_options = { :to => 'test@example.com' }
|
144
|
+
Pony.mail(:to => 'foo@bar') # Sends mail to test@example.com instead of foo@bar
|
145
|
+
|
146
|
+
## Testing/Debugging Aids ##
|
147
|
+
|
148
|
+
[](https://travis-ci.org/benprew/pony)
|
149
|
+
|
150
|
+
### Subject prefix ###
|
151
|
+
|
152
|
+
Prepends a string to the subject line. This is used to identify email sent from a specific environment.
|
153
|
+
|
154
|
+
Pony.subject_prefix('Prefix:')
|
155
|
+
|
156
|
+
### Append options to body ###
|
157
|
+
|
158
|
+
Append the options passd into Pony.mail to the body of the email. Useful for debugging.
|
159
|
+
|
160
|
+
Pony.append_inputs
|
161
|
+
|
162
|
+
## Help ##
|
163
|
+
|
164
|
+
If you need help using Pony, or it looks like you've found a bug,
|
165
|
+
email ponyrb@googlegroups.com. The full forum is
|
166
|
+
https://groups.google.com/forum/#!forum/ponyrb
|
167
|
+
|
168
|
+
### Meta ###
|
169
|
+
|
170
|
+
* Released under the [MIT License](http://www.opensource.org/licenses/mit-license.php)
|
171
|
+
* [Homepage](http://github.com/benprew/pony)
|
172
|
+
* Mailing List: ponyrb@googlegroups.com
|
173
|
+
|
174
|
+
## Authors ##
|
175
|
+
* Adam Wiggins [@adamwiggins](https://github.com/adamwiggins)
|
176
|
+
* Ben Prew [@benprew](https://github.com/benprew)
|
177
|
+
* Cameron Matheson [@cmatheson](https://github.com/cmatheson)
|
178
|
+
* Carl Hörberg [@carlhoerberg](https://github.com/carlhoerberg)
|
179
|
+
* Daniel Lopes [@danielvlopes](https://github.com/danielvlopes)
|
180
|
+
* Doug Hammond [@dslh](https://github.com/dslh)
|
181
|
+
* Hiroshi Saito [@hiroshi](https://github.com/hiroshi)
|
182
|
+
* Kalin Harvey
|
183
|
+
* MIKAMI Yoshiyuki [@yoshuki](https://github.com/yoshuki)
|
184
|
+
* Mathieu Martin [@webmat](https://github.com/webmat)
|
185
|
+
* Michael Durrant [@durrantm](https://github.com/durrantm)
|
186
|
+
* Neil Middleton [@neilmiddleton](https://github.com/neilmiddleton)
|
187
|
+
* Neil Mock [@neilmock](https://github.com/neilmock)
|
188
|
+
* Nickolas Means [@nmeans](https://github.com/nmeans)
|
189
|
+
* Othmane Benkirane [@anaothmane](https://github.com/anaothmane)
|
190
|
+
* Rich Meyers [@richmeyers](https://github.com/richmeyers)
|
191
|
+
* Roman Franko [@roman-franko](https://github.com/roman-franko)
|
192
|
+
* Ryan Malecky [@rmalecky](https://github.com/rmalecky)
|
193
|
+
* Seamus Abshere [@seamusabshere](https://github.com/seamusabshere)
|
194
|
+
* Stephen Celis [@stephencelis](https://github.com/stephencelis)
|
195
|
+
* arunthampi [@arunthampi](https://github.com/arunthampi)
|
196
|
+
* rick [@rick](https://github.com/rick)
|
197
|
+
* rohit [@rohit](https://github.com/rohit)
|
198
|
+
|
199
|
+
## Changelog ##
|
200
|
+
|
201
|
+
#### 1.11 ####
|
202
|
+
* Improved handling of mails with both text and html bodies and attachments
|
203
|
+
|
204
|
+
#### 1.10 ####
|
205
|
+
* Add ```subject_prefix```, ```append_options``` and ```override_options```
|
206
|
+
|
207
|
+
#### 1.9 ####
|
208
|
+
* Allow options to be queried from the gem
|
209
|
+
|
210
|
+
#### 1.8 ####
|
211
|
+
* Add additional options for headers in each part of letter
|
212
|
+
|
213
|
+
#### 1.7 ####
|
214
|
+
* Better default content_type with attachments
|
215
|
+
|
216
|
+
#### 1.6 ####
|
217
|
+
* Unknown options are passed directly to mail to handle. Remove deprecated syntax
|
218
|
+
|
219
|
+
#### 1.5.1 ####
|
220
|
+
* Loosen mail dependency to >= 2.0 instead of > 2.0
|
221
|
+
|
222
|
+
#### 1.5 ####
|
223
|
+
* Specify content-id of attachments as filename@hostname
|
224
|
+
|
225
|
+
#### 1.4.1 ####
|
226
|
+
* Update gemfile
|
227
|
+
|
228
|
+
#### 1.4 ####
|
229
|
+
* Updated docs
|
230
|
+
|
231
|
+
#### 1.3 ####
|
232
|
+
* Add new option ```:text_part_charset```, which allows you to specify the charset for the text portion
|
233
|
+
|
234
|
+
#### 1.2 ####
|
235
|
+
* Remove limitations on :via, and let mail handle it (this means you can say things like :via => test)
|
236
|
+
* Add reply-to option and a bundler file
|
237
|
+
|
238
|
+
#### 1.1 ####
|
239
|
+
* Add default options
|
240
|
+
|
241
|
+
#### 1.0 ####
|
242
|
+
* Convert to using Mail as the mail-generation backend, instead of TMail
|
243
|
+
|
244
|
+
#### 0.9.1 ####
|
245
|
+
* provide the ability to set custom mail headers with something like:
|
246
|
+
Pony.mail(:headers => {"List-ID" => "..."})
|
247
|
+
* provide the ability to set the Message-Id from Pony.mail
|
248
|
+
|
249
|
+
#### 0.9 ####
|
250
|
+
* merge in kalin's fixes to use tmail.destinations instead of trying to parse tmail.to, tmail.cc and tmail.bcc. New specs to test functionality
|
251
|
+
|
252
|
+
#### 0.8 ####
|
253
|
+
* Fix bug that was allowing nil :bcc and :cc options to be passed to smtp
|
254
|
+
|
255
|
+
#### 0.7 ####
|
256
|
+
* Pass :cc and :bcc options to sendmail appropriately
|
257
|
+
|
258
|
+
#### 0.6 ####
|
259
|
+
* Add :bcc capability
|
260
|
+
* Add :charset capability
|
261
|
+
* Add complete list of options to readme
|
262
|
+
* fix bug: readme examples
|
263
|
+
|
264
|
+
#### 0.5 ####
|
265
|
+
* default location of sendmail to /usr/sbin/sendmail if sendmail not in path
|
266
|
+
* fix bug: README not showing password option (listed as pass)
|
267
|
+
|
268
|
+
#### 0.4.1 ####
|
269
|
+
* Add :cc capability
|
270
|
+
* fix bug: resolve body not displaying when attachments sent
|
271
|
+
|
272
|
+
#### 0.4 ####
|
273
|
+
* Implemented file attachments option
|
274
|
+
* use TLS if :tls => true
|
data/Rakefile
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
require 'rake'
|
2
2
|
require 'rspec/core/rake_task'
|
3
|
+
require 'json'
|
4
|
+
require 'uri'
|
3
5
|
|
4
6
|
desc "Run all specs"
|
5
7
|
RSpec::Core::RakeTask.new(:test)
|
@@ -27,7 +29,15 @@ task :uninstall => [ :clean ] do
|
|
27
29
|
end
|
28
30
|
|
29
31
|
task :authors do
|
30
|
-
|
32
|
+
token = `cat ~/.github_token`.chomp
|
33
|
+
authors = `git log |grep Author |cut -f 1 -d'<' |cut -f2 -d':' |sort -u`
|
34
|
+
authors.split(/\n/).each do |a|
|
35
|
+
print "* #{a} "
|
36
|
+
ainfo = JSON.parse `curl -u #{token}:x-oauth-basic --silent https://api.github.com/search/users?q=#{URI.encode a}`
|
37
|
+
puts ainfo unless ainfo['total_count']
|
38
|
+
(puts; next) unless ainfo && ainfo['total_count'] > 0
|
39
|
+
puts "[@#{ainfo['items'][0]['login']}](#{ainfo['items'][0]['html_url']})"
|
40
|
+
end
|
31
41
|
end
|
32
42
|
|
33
43
|
CLEAN.include [ 'pkg', '*.gem', '.config' ]
|
data/lib/pony.rb
CHANGED
@@ -222,29 +222,30 @@ module Pony
|
|
222
222
|
m.send(k, v)
|
223
223
|
end
|
224
224
|
|
225
|
-
|
226
|
-
|
227
|
-
|
228
|
-
|
229
|
-
|
230
|
-
|
231
|
-
|
232
|
-
|
233
|
-
|
225
|
+
# Automatic handling of multipart messages in the underlying
|
226
|
+
# mail library works pretty well for the most part, but in
|
227
|
+
# the case where we have attachments AND text AND html bodies
|
228
|
+
# we need to explicitly define a second multipart/alternative
|
229
|
+
# boundary to encapsulate the body-parts within the
|
230
|
+
# multipart/mixed boundary that will be created automatically.
|
231
|
+
if options[:attachments] && options[:html_body] && options[:body]
|
232
|
+
part(:content_type => 'multipart/alternative') do |p|
|
233
|
+
p.html_part = Pony.build_html_part(options)
|
234
|
+
p.text_part = Pony.build_text_part(options)
|
235
|
+
end
|
236
|
+
|
237
|
+
# Otherwise if there is more than one part we still need to
|
238
|
+
# ensure that they are all declared to be separate.
|
239
|
+
elsif options[:html_body] || options[:attachments]
|
240
|
+
if options[:html_body]
|
241
|
+
m.html_part = Pony.build_html_part(options)
|
234
242
|
end
|
235
|
-
end
|
236
243
|
|
237
|
-
|
238
|
-
|
239
|
-
if options[:body] && (options[:html_body] || options[:attachments])
|
240
|
-
text_part do
|
241
|
-
body options[:body]
|
242
|
-
if options[:body_part_header] && options[:body_part_header].is_a?(Hash)
|
243
|
-
options[:body_part_header].each do |k,v|
|
244
|
-
header[k] = v
|
245
|
-
end
|
246
|
-
end
|
244
|
+
if options[:body]
|
245
|
+
m.text_part = Pony.build_text_part(options)
|
247
246
|
end
|
247
|
+
|
248
|
+
# If all we have is a text body, we don't need to worry about parts.
|
248
249
|
elsif options[:body]
|
249
250
|
body options[:body]
|
250
251
|
end
|
@@ -267,6 +268,30 @@ module Pony
|
|
267
268
|
mail
|
268
269
|
end
|
269
270
|
|
271
|
+
def self.build_html_part(options)
|
272
|
+
Mail::Part.new(:content_type => 'text/html;charset=UTF-8') do
|
273
|
+
content_transfer_encoding 'quoted-printable'
|
274
|
+
body Mail::Encodings::QuotedPrintable.encode(options[:html_body])
|
275
|
+
if options[:html_body_part_header] && options[:html_body_part_header].is_a?(Hash)
|
276
|
+
options[:html_body_part_header].each do |k,v|
|
277
|
+
header[k] = v
|
278
|
+
end
|
279
|
+
end
|
280
|
+
end
|
281
|
+
end
|
282
|
+
|
283
|
+
def self.build_text_part(options)
|
284
|
+
Mail::Part.new(:content_type => 'text/plain') do
|
285
|
+
content_type options[:charset] if options[:charset]
|
286
|
+
body options[:body]
|
287
|
+
if options[:body_part_header] && options[:body_part_header].is_a?(Hash)
|
288
|
+
options[:body_part_header].each do |k,v|
|
289
|
+
header[k] = v
|
290
|
+
end
|
291
|
+
end
|
292
|
+
end
|
293
|
+
end
|
294
|
+
|
270
295
|
def self.set_content_type(mail, user_content_type)
|
271
296
|
params = mail.content_type_parameters || {}
|
272
297
|
content_type = case
|
@@ -288,6 +313,8 @@ module Pony
|
|
288
313
|
|
289
314
|
def self.add_attachments(mail, attachments)
|
290
315
|
attachments.each do |name, body|
|
316
|
+
name = name.gsub /\s+/, ' '
|
317
|
+
|
291
318
|
# mime-types wants to send these as "quoted-printable"
|
292
319
|
if name =~ /\.xlsx$/
|
293
320
|
mail.attachments[name] = {
|
data/pony.gemspec
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |s|
|
4
4
|
s.name = 'pony'
|
5
|
-
s.version = "1.
|
5
|
+
s.version = "1.11"
|
6
6
|
|
7
7
|
s.summary = "Send email in one command: Pony.mail(:to => 'someone@example.com', :body => 'hello')"
|
8
8
|
s.description = s.summary
|
@@ -11,9 +11,10 @@ Gem::Specification.new do |s|
|
|
11
11
|
s.homepage = 'http://github.com/benprew/pony'
|
12
12
|
s.license = 'MIT'
|
13
13
|
|
14
|
-
s.files = ["README.
|
14
|
+
s.files = ["README.md", "Rakefile", "pony.gemspec" ] + Dir.glob("{lib,spec}/**/*")
|
15
15
|
s.rdoc_options = ["--inline-source", "--charset=UTF-8"]
|
16
16
|
s.require_paths = ["lib"]
|
17
17
|
s.add_runtime_dependency 'mail', '>= 2.0'
|
18
18
|
s.add_development_dependency "rspec", ">= 2.14"
|
19
|
+
s.add_development_dependency "rake", ">= 10"
|
19
20
|
end
|
data/spec/pony_spec.rb
CHANGED
@@ -310,11 +310,13 @@ describe Pony do
|
|
310
310
|
)
|
311
311
|
end
|
312
312
|
|
313
|
-
it { expect(mail.parts.length).to eq
|
313
|
+
it { expect(mail.parts.length).to eq 2 }
|
314
|
+
it { expect(mail.parts[0].parts.length).to eq 2 }
|
314
315
|
it { expect(mail.content_type.to_s).to include( 'multipart/mixed' ) }
|
315
|
-
it { expect(mail.parts[0].to_s).to include( '
|
316
|
+
it { expect(mail.parts[0].content_type.to_s).to include( 'multipart/alternative' ) }
|
317
|
+
it { expect(mail.parts[0].parts[0].to_s).to include( 'Content-Type: text/html' ) }
|
318
|
+
it { expect(mail.parts[0].parts[1].to_s).to include( 'Content-Type: text/plain' ) }
|
316
319
|
it { expect(mail.parts[1].to_s).to include( 'Content-Type: text/plain' ) }
|
317
|
-
it { expect(mail.parts[2].to_s).to include( 'Content-Type: text/plain' ) }
|
318
320
|
end
|
319
321
|
end
|
320
322
|
|
@@ -329,8 +331,8 @@ describe Pony do
|
|
329
331
|
)
|
330
332
|
end
|
331
333
|
|
332
|
-
it { expect(mail.parts[0].to_s).to include( 'inline' ) }
|
333
|
-
it { expect(mail.parts[1].to_s).to include( 'inline' ) }
|
334
|
+
it { expect(mail.parts[0].parts[0].to_s).to include( 'inline' ) }
|
335
|
+
it { expect(mail.parts[0].parts[1].to_s).to include( 'inline' ) }
|
334
336
|
|
335
337
|
context "when parts aren't present" do
|
336
338
|
subject(:mail) do
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pony
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: '1.
|
4
|
+
version: '1.11'
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Adam Wiggins
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2014-
|
12
|
+
date: 2014-09-11 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: mail
|
@@ -39,6 +39,20 @@ dependencies:
|
|
39
39
|
- - ">="
|
40
40
|
- !ruby/object:Gem::Version
|
41
41
|
version: '2.14'
|
42
|
+
- !ruby/object:Gem::Dependency
|
43
|
+
name: rake
|
44
|
+
requirement: !ruby/object:Gem::Requirement
|
45
|
+
requirements:
|
46
|
+
- - ">="
|
47
|
+
- !ruby/object:Gem::Version
|
48
|
+
version: '10'
|
49
|
+
type: :development
|
50
|
+
prerelease: false
|
51
|
+
version_requirements: !ruby/object:Gem::Requirement
|
52
|
+
requirements:
|
53
|
+
- - ">="
|
54
|
+
- !ruby/object:Gem::Version
|
55
|
+
version: '10'
|
42
56
|
description: 'Send email in one command: Pony.mail(:to => ''someone@example.com'',
|
43
57
|
:body => ''hello'')'
|
44
58
|
email: ben@throwingbones.com
|
@@ -46,7 +60,7 @@ executables: []
|
|
46
60
|
extensions: []
|
47
61
|
extra_rdoc_files: []
|
48
62
|
files:
|
49
|
-
- README.
|
63
|
+
- README.md
|
50
64
|
- Rakefile
|
51
65
|
- lib/pony.rb
|
52
66
|
- pony.gemspec
|
data/README.rdoc
DELETED
@@ -1,276 +0,0 @@
|
|
1
|
-
= Pony, the express way to send email in Ruby
|
2
|
-
|
3
|
-
== Overview
|
4
|
-
|
5
|
-
Ruby no longer has to be jealous of PHP's mail() function, which can send an email in a single command.
|
6
|
-
|
7
|
-
Pony.mail(:to => 'you@example.com', :from => 'me@example.com', :subject => 'hi', :body => 'Hello there.')
|
8
|
-
Pony.mail(:to => 'you@example.com', :html_body => '<h1>Hello there!</h1>', :body => "In case you can't read html, Hello there.")
|
9
|
-
Pony.mail(:to => 'you@example.com', :cc => 'him@example.com', :from => 'me@example.com', :subject => 'hi', :body => 'Howsit!')
|
10
|
-
|
11
|
-
Any option key may be omitted except for :to. For a complete list of options, see List Of Options section below.
|
12
|
-
|
13
|
-
|
14
|
-
== Transport
|
15
|
-
|
16
|
-
Pony uses /usr/sbin/sendmail to send mail if it is available, otherwise it uses SMTP to localhost.
|
17
|
-
|
18
|
-
This can be over-ridden if you specify a via option:
|
19
|
-
|
20
|
-
Pony.mail(:to => 'you@example.com', :via => :smtp) # sends via SMTP
|
21
|
-
|
22
|
-
Pony.mail(:to => 'you@example.com', :via => :sendmail) # sends via sendmail
|
23
|
-
|
24
|
-
You can also specify options for SMTP:
|
25
|
-
|
26
|
-
Pony.mail({
|
27
|
-
:to => 'you@example.com',
|
28
|
-
:via => :smtp,
|
29
|
-
:via_options => {
|
30
|
-
:address => 'smtp.yourserver.com',
|
31
|
-
:port => '25',
|
32
|
-
:user_name => 'user',
|
33
|
-
:password => 'password',
|
34
|
-
:authentication => :plain, # :plain, :login, :cram_md5, no auth by default
|
35
|
-
:domain => "localhost.localdomain" # the HELO domain provided by the client to the server
|
36
|
-
}
|
37
|
-
})
|
38
|
-
|
39
|
-
Gmail example (with TLS/SSL)
|
40
|
-
|
41
|
-
Pony.mail({
|
42
|
-
:to => 'you@example.com',
|
43
|
-
:via => :smtp,
|
44
|
-
:via_options => {
|
45
|
-
:address => 'smtp.gmail.com',
|
46
|
-
:port => '587',
|
47
|
-
:enable_starttls_auto => true,
|
48
|
-
:user_name => 'user',
|
49
|
-
:password => 'password',
|
50
|
-
:authentication => :plain, # :plain, :login, :cram_md5, no auth by default
|
51
|
-
:domain => "localhost.localdomain" # the HELO domain provided by the client to the server
|
52
|
-
}
|
53
|
-
})
|
54
|
-
|
55
|
-
And options for Sendmail:
|
56
|
-
|
57
|
-
Pony.mail({
|
58
|
-
:to => 'you@example.com',
|
59
|
-
:via => :sendmail,
|
60
|
-
:via_options => {
|
61
|
-
:location => '/path/to/sendmail', # defaults to 'which sendmail' or '/usr/sbin/sendmail' if 'which' fails
|
62
|
-
:arguments => '-t' # -t and -i are the defaults
|
63
|
-
}
|
64
|
-
})
|
65
|
-
|
66
|
-
If you're using <tt>ssmtp</tt>, set <tt>:arguments => ''</tt>.
|
67
|
-
|
68
|
-
== Attachments
|
69
|
-
|
70
|
-
You can attach a file or two with the :attachments option:
|
71
|
-
|
72
|
-
Pony.mail(..., :attachments => {"foo.zip" => File.read("path/to/foo.zip"), "hello.txt" => "hello!"})
|
73
|
-
|
74
|
-
Note: An attachment's mime-type is set based on the filename (as dictated by the ruby gem mime-types). So 'foo.pdf' has a mime-type of 'application/pdf'
|
75
|
-
|
76
|
-
== Custom Headers
|
77
|
-
|
78
|
-
Pony allows you to specify custom mail headers
|
79
|
-
Pony.mail(
|
80
|
-
:to => 'me@example.com',
|
81
|
-
:headers => { "List-ID" => "...", "X-My-Custom-Header" => "what a cool custom header" }
|
82
|
-
)
|
83
|
-
|
84
|
-
Add additional options for headers in each part of letter (text, html)
|
85
|
-
Pony.mail(
|
86
|
-
:body => 'test',
|
87
|
-
:html_body => 'What do you know, Joe?',
|
88
|
-
:attachments => {"foo.txt" => "content of foo.txt"},
|
89
|
-
:body_part_header => { content_disposition: "inline" }
|
90
|
-
)
|
91
|
-
|
92
|
-
This will add option 'Content-Disposition: inline' for text part header of letter.
|
93
|
-
|
94
|
-
Also you can add additional options for html part of latter, e.g.:
|
95
|
-
:html_body_part_header => { content_disposition: "inline" }
|
96
|
-
|
97
|
-
|
98
|
-
== List Of Options
|
99
|
-
|
100
|
-
You can get a list of options from Pony directly:
|
101
|
-
|
102
|
-
Pony.permissable_options
|
103
|
-
|
104
|
-
Options passed pretty much directly to Mail
|
105
|
-
|
106
|
-
to
|
107
|
-
cc
|
108
|
-
bcc
|
109
|
-
from
|
110
|
-
body # the plain text body
|
111
|
-
html_body # for sending html-formatted email
|
112
|
-
subject
|
113
|
-
content_type
|
114
|
-
charset # In case you need to send in utf-8 or similar
|
115
|
-
text_part_charset # for multipart messages, set the charset of the text part
|
116
|
-
attachments # see Attachments section above
|
117
|
-
headers # see Custom headers section above
|
118
|
-
body_part_header # see Custom headers section above
|
119
|
-
html_body_part_header # see Custom headers section above
|
120
|
-
message_id
|
121
|
-
sender # Sets "envelope from" (and the Sender header)
|
122
|
-
reply_to
|
123
|
-
smtp_envelope_to
|
124
|
-
|
125
|
-
Other options
|
126
|
-
via # :smtp or :sendmail, see Transport section above
|
127
|
-
via_options # specify transport options, see Transport section above
|
128
|
-
|
129
|
-
== Set default options
|
130
|
-
|
131
|
-
Default options can be set so that they don't have to be repeated. The default options you set will be overriden by any options you pass in to Pony.mail()
|
132
|
-
|
133
|
-
Pony.options = { :from => 'noreply@example.com', :via => :smtp, :via_options => { :host => 'smtp.yourserver.com' } }
|
134
|
-
Pony.mail(:to => 'foo@bar') # Sends mail to foo@bar from noreply@example.com using smtp
|
135
|
-
Pony.mail(:from => 'pony@example.com', :to => 'foo@bar') # Sends mail to foo@bar from pony@example.com using smtp
|
136
|
-
|
137
|
-
|
138
|
-
== Set override options
|
139
|
-
|
140
|
-
Override options can be set so that the override value is always be used, even if a different value is passed in to Pony.options() or Pony.mail(). This can be used to configure a development or staging environment.
|
141
|
-
|
142
|
-
Pony.override_options = { :to => 'test@example.com' }
|
143
|
-
Pony.mail(:to => 'foo@bar') # Sends mail to test@example.com instead of foo@bar
|
144
|
-
|
145
|
-
== Set subject prefix
|
146
|
-
|
147
|
-
Prepends a string to the subject line. This is used to identify email sent from a specific environment.
|
148
|
-
|
149
|
-
Pony.subject_prefix('Prefix:')
|
150
|
-
|
151
|
-
== Append options to body
|
152
|
-
|
153
|
-
Append the options passd into Pony.mail to the body of the email. Useful for debugging.
|
154
|
-
|
155
|
-
Pony.append_inputs
|
156
|
-
|
157
|
-
== Help
|
158
|
-
|
159
|
-
If you need help using Pony, or it looks like you've found a bug,
|
160
|
-
email ponyrb@googlegroups.com. The full forum is
|
161
|
-
https://groups.google.com/forum/#!forum/ponyrb
|
162
|
-
|
163
|
-
== External Dependencies
|
164
|
-
|
165
|
-
mail > 2.0
|
166
|
-
|
167
|
-
Note: these requirements are specified in the gemspec as well. Also, you may need smtp_tls if you want to send via tls/ssl and are using ruby < 1.8.7
|
168
|
-
|
169
|
-
== Meta
|
170
|
-
|
171
|
-
Maintained by Ben Prew
|
172
|
-
|
173
|
-
Written by Adam Wiggins
|
174
|
-
|
175
|
-
Patches contributed by:
|
176
|
-
* Adam Wiggins
|
177
|
-
* Ben Prew
|
178
|
-
* Cameron Matheson
|
179
|
-
* Carl Hörberg
|
180
|
-
* Daniel Lopes
|
181
|
-
* Hiroshi Saito
|
182
|
-
* Kalin Harvey
|
183
|
-
* MIKAMI Yoshiyuki
|
184
|
-
* Mathieu Martin
|
185
|
-
* Michael Durrant
|
186
|
-
* Neil Middleton
|
187
|
-
* Neil Mock
|
188
|
-
* Nickolas Means
|
189
|
-
* Othmane Benkirane
|
190
|
-
* Rich Meyers
|
191
|
-
* Roman Franko
|
192
|
-
* Ryan Malecky
|
193
|
-
* Seamus Abshere
|
194
|
-
* Stephen Celis
|
195
|
-
* arunthampi
|
196
|
-
* rick
|
197
|
-
* rohit
|
198
|
-
|
199
|
-
Released under the MIT License: http://www.opensource.org/licenses/mit-license.php
|
200
|
-
|
201
|
-
homepage: http://github.com/benprew/pony
|
202
|
-
mailing list: ponyrb@googlegroups.com
|
203
|
-
|
204
|
-
|
205
|
-
== Releases
|
206
|
-
1.10
|
207
|
-
* Add subject_prefix, append_options and override_options
|
208
|
-
|
209
|
-
1.9
|
210
|
-
* Allow options to be queried from the gem
|
211
|
-
|
212
|
-
1.8
|
213
|
-
* Add additional options for headers in each part of letter
|
214
|
-
|
215
|
-
1.7
|
216
|
-
* Better default content_type with attachments
|
217
|
-
|
218
|
-
1.6
|
219
|
-
* Unknown options are passed directly to mail to handle. Remove deprecated syntax
|
220
|
-
|
221
|
-
1.5.1
|
222
|
-
* Loosen mail dependency to >= 2.0 instead of > 2.0
|
223
|
-
|
224
|
-
1.5
|
225
|
-
* Specify content-id of attachments as filename@hostname
|
226
|
-
|
227
|
-
1.4.1
|
228
|
-
* Update gemfile
|
229
|
-
|
230
|
-
1.4
|
231
|
-
* Updated docs
|
232
|
-
|
233
|
-
1.3
|
234
|
-
* Add new option :text_part_charset, which allows you to specify the charset for the text portion
|
235
|
-
|
236
|
-
1.2
|
237
|
-
* Remove limitations on :via, and let mail handle it (this means you can say things like :via => test)
|
238
|
-
* Add reply-to option and a bundler file
|
239
|
-
|
240
|
-
1.1
|
241
|
-
* Add default options
|
242
|
-
|
243
|
-
1.0
|
244
|
-
* Convert to using Mail as the mail-generation backend, instead of TMail
|
245
|
-
|
246
|
-
0.9.1
|
247
|
-
* provide the ability to set custom mail headers with something like:
|
248
|
-
Pony.mail(:headers => {"List-ID" => "..."})
|
249
|
-
* provide the ability to set the Message-Id from Pony.mail
|
250
|
-
|
251
|
-
0.9
|
252
|
-
* merge in kalin's fixes to use tmail.destinations instead of trying to parse tmail.to, tmail.cc and tmail.bcc. New specs to test functionality
|
253
|
-
|
254
|
-
0.8
|
255
|
-
* Fix bug that was allowing nil :bcc and :cc options to be passed to smtp
|
256
|
-
|
257
|
-
0.7
|
258
|
-
* Pass :cc and :bcc options to sendmail appropriately
|
259
|
-
|
260
|
-
0.6
|
261
|
-
* Add :bcc capability
|
262
|
-
* Add :charset capability
|
263
|
-
* Add complete list of options to readme
|
264
|
-
* fix bug: readme examples
|
265
|
-
|
266
|
-
0.5
|
267
|
-
* default location of sendmail to /usr/sbin/sendmail if sendmail not in path
|
268
|
-
* fix bug: README not showing password option (listed as pass)
|
269
|
-
|
270
|
-
0.4.1
|
271
|
-
* Add :cc capability
|
272
|
-
* fix bug: resolve body not displaying when attachments sent
|
273
|
-
|
274
|
-
0.4
|
275
|
-
* Implemented file attachments option
|
276
|
-
* use TLS if :tls => true
|