mail 2.2.14 → 2.2.15
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.
Potentially problematic release.
This version of mail might be problematic. Click here for more details.
- data/CHANGELOG.rdoc +5 -0
- data/lib/VERSION +1 -1
- data/lib/mail.rb +2 -0
- data/lib/mail/core_extensions/shellwords.rb +55 -0
- data/lib/mail/fields/content_type_field.rb +1 -1
- data/lib/mail/mail.rb +7 -7
- data/lib/mail/network/delivery_methods/sendmail.rb +15 -15
- metadata +11 -4
data/CHANGELOG.rdoc
CHANGED
@@ -1,3 +1,8 @@
|
|
1
|
+
== Wed 26 Jan 2011 02:23:09 UTC Mikel Lindsaar <[email protected]>
|
2
|
+
|
3
|
+
* Update addresses passed into sendmail to escape them (Andy Lindeman)
|
4
|
+
* Version bump to 2.2.15 and gem release
|
5
|
+
|
1
6
|
== Mon 3 Jan 2011 12:48:59 UTC Mikel Lindsaar <[email protected]>
|
2
7
|
|
3
8
|
* Update field_spec to handle encodings, closes issues 44 and 120 (Luis Lopez)
|
data/lib/VERSION
CHANGED
data/lib/mail.rb
CHANGED
@@ -2,6 +2,7 @@
|
|
2
2
|
module Mail # :doc:
|
3
3
|
|
4
4
|
require 'date'
|
5
|
+
require 'shellwords'
|
5
6
|
|
6
7
|
require 'active_support'
|
7
8
|
require 'active_support/core_ext/class/attribute_accessors'
|
@@ -33,6 +34,7 @@ module Mail # :doc:
|
|
33
34
|
|
34
35
|
require 'mail/core_extensions/nil'
|
35
36
|
require 'mail/core_extensions/string'
|
37
|
+
require 'mail/core_extensions/shellwords' unless String.new.respond_to?(:shellescape)
|
36
38
|
require 'mail/core_extensions/smtp' if RUBY_VERSION < '1.9.3'
|
37
39
|
|
38
40
|
require 'mail/patterns'
|
@@ -0,0 +1,55 @@
|
|
1
|
+
# The following is imported from ruby 1.9.2 shellwords.rb
|
2
|
+
#
|
3
|
+
module Shellwords
|
4
|
+
# Escapes a string so that it can be safely used in a Bourne shell
|
5
|
+
# command line.
|
6
|
+
#
|
7
|
+
# Note that a resulted string should be used unquoted and is not
|
8
|
+
# intended for use in double quotes nor in single quotes.
|
9
|
+
#
|
10
|
+
# open("| grep #{Shellwords.escape(pattern)} file") { |pipe|
|
11
|
+
# # ...
|
12
|
+
# }
|
13
|
+
#
|
14
|
+
# +String#shellescape+ is a shorthand for this function.
|
15
|
+
#
|
16
|
+
# open("| grep #{pattern.shellescape} file") { |pipe|
|
17
|
+
# # ...
|
18
|
+
# }
|
19
|
+
#
|
20
|
+
def shellescape(str)
|
21
|
+
# An empty argument will be skipped, so return empty quotes.
|
22
|
+
return "''" if str.empty?
|
23
|
+
|
24
|
+
str = str.dup
|
25
|
+
|
26
|
+
# Process as a single byte sequence because not all shell
|
27
|
+
# implementations are multibyte aware.
|
28
|
+
str.gsub!(/([^A-Za-z0-9_\-.,:\/@\n])/n, "\\\\\\1")
|
29
|
+
|
30
|
+
# A LF cannot be escaped with a backslash because a backslash + LF
|
31
|
+
# combo is regarded as line continuation and simply ignored.
|
32
|
+
str.gsub!(/\n/, "'\n'")
|
33
|
+
|
34
|
+
return str
|
35
|
+
end
|
36
|
+
|
37
|
+
module_function :shellescape
|
38
|
+
|
39
|
+
class << self
|
40
|
+
alias escape shellescape
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
44
|
+
|
45
|
+
class String
|
46
|
+
# call-seq:
|
47
|
+
# str.shellescape => string
|
48
|
+
#
|
49
|
+
# Escapes +str+ so that it can be safely used in a Bourne shell
|
50
|
+
# command line. See +Shellwords::shellescape+ for details.
|
51
|
+
#
|
52
|
+
def shellescape
|
53
|
+
Shellwords.escape(self)
|
54
|
+
end
|
55
|
+
end
|
data/lib/mail/mail.rb
CHANGED
@@ -10,11 +10,11 @@ module Mail
|
|
10
10
|
#
|
11
11
|
# Creating via a string:
|
12
12
|
#
|
13
|
-
# string =
|
14
|
-
# string <<
|
15
|
-
# string <<
|
16
|
-
# string <<
|
17
|
-
# string <<
|
13
|
+
# string = "To: [email protected]\r\n"
|
14
|
+
# string << "From: [email protected]\r\n"
|
15
|
+
# string << "Subject: This is an email\r\n"
|
16
|
+
# string << "\r\n"
|
17
|
+
# string << "This is the body"
|
18
18
|
# Mail.new(string)
|
19
19
|
#
|
20
20
|
# Or creating via a block:
|
@@ -30,8 +30,8 @@ module Mail
|
|
30
30
|
#
|
31
31
|
# message = Mail.new({:to => '[email protected]',
|
32
32
|
# 'from' => '[email protected]',
|
33
|
-
#
|
34
|
-
#
|
33
|
+
# :subject => 'This is an email',
|
34
|
+
# :body => 'This is the body' })
|
35
35
|
#
|
36
36
|
# Note, the hash keys can be strings or symbols, the passed in object
|
37
37
|
# does not need to be a hash, it just needs to respond to :each_pair
|
@@ -1,57 +1,57 @@
|
|
1
1
|
module Mail
|
2
2
|
# A delivery method implementation which sends via sendmail.
|
3
|
-
#
|
3
|
+
#
|
4
4
|
# To use this, first find out where the sendmail binary is on your computer,
|
5
5
|
# if you are on a mac or unix box, it is usually in /usr/sbin/sendmail, this will
|
6
6
|
# be your sendmail location.
|
7
|
-
#
|
7
|
+
#
|
8
8
|
# Mail.defaults do
|
9
9
|
# delivery_method :sendmail
|
10
10
|
# end
|
11
|
-
#
|
11
|
+
#
|
12
12
|
# Or if your sendmail binary is not at '/usr/sbin/sendmail'
|
13
|
-
#
|
13
|
+
#
|
14
14
|
# Mail.defaults do
|
15
15
|
# delivery_method :sendmail, :location => '/absolute/path/to/your/sendmail'
|
16
16
|
# end
|
17
|
-
#
|
17
|
+
#
|
18
18
|
# Then just deliver the email as normal:
|
19
|
-
#
|
19
|
+
#
|
20
20
|
# Mail.deliver do
|
21
21
|
# to '[email protected]'
|
22
22
|
# from '[email protected]'
|
23
23
|
# subject 'testing sendmail'
|
24
24
|
# body 'testing sendmail'
|
25
25
|
# end
|
26
|
-
#
|
26
|
+
#
|
27
27
|
# Or by calling deliver on a Mail message
|
28
|
-
#
|
28
|
+
#
|
29
29
|
# mail = Mail.new do
|
30
30
|
# to '[email protected]'
|
31
31
|
# from '[email protected]'
|
32
32
|
# subject 'testing sendmail'
|
33
33
|
# body 'testing sendmail'
|
34
34
|
# end
|
35
|
-
#
|
35
|
+
#
|
36
36
|
# mail.deliver!
|
37
37
|
class Sendmail
|
38
|
-
|
38
|
+
|
39
39
|
def initialize(values)
|
40
40
|
self.settings = { :location => '/usr/sbin/sendmail',
|
41
41
|
:arguments => '-i -t' }.merge(values)
|
42
42
|
end
|
43
|
-
|
43
|
+
|
44
44
|
attr_accessor :settings
|
45
45
|
|
46
46
|
def deliver!(mail)
|
47
47
|
envelope_from = mail.return_path || mail.sender || mail.from_addrs.first
|
48
|
-
return_path = "-f \"#{envelope_from}\"" if envelope_from
|
48
|
+
return_path = "-f \"#{envelope_from.to_s.shellescape}\"" if envelope_from
|
49
49
|
|
50
50
|
arguments = [settings[:arguments], return_path].compact.join(" ")
|
51
|
-
|
52
|
-
Sendmail.call(settings[:location], arguments, mail.destinations.join(" "), mail)
|
51
|
+
|
52
|
+
Sendmail.call(settings[:location], arguments, mail.destinations.collect(&:shellescape).join(" "), mail)
|
53
53
|
end
|
54
|
-
|
54
|
+
|
55
55
|
def Sendmail.call(path, arguments, destinations, mail)
|
56
56
|
IO.popen("#{path} #{arguments} #{destinations}", "w+") do |io|
|
57
57
|
io.puts mail.encoded.to_lf
|
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 2
|
7
7
|
- 2
|
8
|
-
-
|
9
|
-
version: 2.2.
|
8
|
+
- 15
|
9
|
+
version: 2.2.15
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Mikel Lindsaar
|
@@ -14,13 +14,14 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2011-01-
|
17
|
+
date: 2011-01-26 00:00:00 +11:00
|
18
18
|
default_executable:
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
21
21
|
name: activesupport
|
22
22
|
prerelease: false
|
23
23
|
requirement: &id001 !ruby/object:Gem::Requirement
|
24
|
+
none: false
|
24
25
|
requirements:
|
25
26
|
- - ">="
|
26
27
|
- !ruby/object:Gem::Version
|
@@ -35,6 +36,7 @@ dependencies:
|
|
35
36
|
name: mime-types
|
36
37
|
prerelease: false
|
37
38
|
requirement: &id002 !ruby/object:Gem::Requirement
|
39
|
+
none: false
|
38
40
|
requirements:
|
39
41
|
- - ~>
|
40
42
|
- !ruby/object:Gem::Version
|
@@ -48,6 +50,7 @@ dependencies:
|
|
48
50
|
name: treetop
|
49
51
|
prerelease: false
|
50
52
|
requirement: &id003 !ruby/object:Gem::Requirement
|
53
|
+
none: false
|
51
54
|
requirements:
|
52
55
|
- - ~>
|
53
56
|
- !ruby/object:Gem::Version
|
@@ -62,6 +65,7 @@ dependencies:
|
|
62
65
|
name: i18n
|
63
66
|
prerelease: false
|
64
67
|
requirement: &id004 !ruby/object:Gem::Requirement
|
68
|
+
none: false
|
65
69
|
requirements:
|
66
70
|
- - ">="
|
67
71
|
- !ruby/object:Gem::Version
|
@@ -90,6 +94,7 @@ files:
|
|
90
94
|
- lib/mail/body.rb
|
91
95
|
- lib/mail/configuration.rb
|
92
96
|
- lib/mail/core_extensions/nil.rb
|
97
|
+
- lib/mail/core_extensions/shellwords.rb
|
93
98
|
- lib/mail/core_extensions/smtp.rb
|
94
99
|
- lib/mail/core_extensions/string.rb
|
95
100
|
- lib/mail/elements/address.rb
|
@@ -216,6 +221,7 @@ rdoc_options: []
|
|
216
221
|
require_paths:
|
217
222
|
- lib
|
218
223
|
required_ruby_version: !ruby/object:Gem::Requirement
|
224
|
+
none: false
|
219
225
|
requirements:
|
220
226
|
- - ">="
|
221
227
|
- !ruby/object:Gem::Version
|
@@ -223,6 +229,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
223
229
|
- 0
|
224
230
|
version: "0"
|
225
231
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
232
|
+
none: false
|
226
233
|
requirements:
|
227
234
|
- - ">="
|
228
235
|
- !ruby/object:Gem::Version
|
@@ -232,7 +239,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
232
239
|
requirements: []
|
233
240
|
|
234
241
|
rubyforge_project:
|
235
|
-
rubygems_version: 1.3.
|
242
|
+
rubygems_version: 1.3.7
|
236
243
|
signing_key:
|
237
244
|
specification_version: 3
|
238
245
|
summary: Mail provides a nice Ruby DSL for making, sending and reading emails.
|