email_sender 1.1.0 → 1.2.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.
- data/README.rdoc +2 -2
- data/VERSION +1 -1
- data/lib/email_sender.rb +23 -10
- metadata +3 -3
data/README.rdoc
CHANGED
@@ -10,9 +10,9 @@ It supports the well-known encryption and authentication methods, and you can us
|
|
10
10
|
|
11
11
|
== Usage
|
12
12
|
|
13
|
-
You
|
13
|
+
You can specify the connection parameters to SMTP server at initialization:
|
14
14
|
|
15
|
-
# simple
|
15
|
+
# simple connection
|
16
16
|
mailer = EmailSender.new(server: "smtp.mail.com", from: "Sender Name <sender@mail.com>")
|
17
17
|
|
18
18
|
# encripted and authenticated connection
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.
|
1
|
+
1.2.0
|
data/lib/email_sender.rb
CHANGED
@@ -33,7 +33,7 @@ class EmailSender
|
|
33
33
|
# Major version number
|
34
34
|
VERSION_MAJOR = 1
|
35
35
|
# Minor version number
|
36
|
-
VERSION_MINOR =
|
36
|
+
VERSION_MINOR = 2
|
37
37
|
# Tiny version number
|
38
38
|
VERSION_TINY = 0
|
39
39
|
# Version number
|
@@ -44,7 +44,7 @@ class EmailSender
|
|
44
44
|
ATTACHMENT_READ_CACHE = 116736 # multiple to 57 #:nodoc:
|
45
45
|
|
46
46
|
Settings = Struct.new(:server, :port, :domain, :esmtp, :enctype, :authtype,
|
47
|
-
:username, :password, :from_addr, :to_addrs, :cc_addrs, :bcc_addrs) #:nodoc:
|
47
|
+
:username, :password, :from_addr, :reply_addr, :to_addrs, :cc_addrs, :bcc_addrs) #:nodoc:
|
48
48
|
|
49
49
|
# Create a new object and initialize connection parameters.
|
50
50
|
# +-----------------------------------------------------------------------------------+
|
@@ -61,6 +61,7 @@ class EmailSender
|
|
61
61
|
# |:username |<string> |nil |
|
62
62
|
# |:password |<string> |nil |
|
63
63
|
# |:from |<string> | |
|
64
|
+
# |:reply |<string> |nil |
|
64
65
|
# |:to |<string>, <array of string> |[] |
|
65
66
|
# |:cc |<string>, <array of string> |[] |
|
66
67
|
# |:bcc |<string>, <array of string> |[] |
|
@@ -74,10 +75,11 @@ class EmailSender
|
|
74
75
|
# Update the connection parameters.
|
75
76
|
# See the ::new() method for initialization parameters.
|
76
77
|
def renew(params={})
|
77
|
-
server, from = params[:server], params[:from]
|
78
|
+
server, from, reply = params[:server], params[:from], params[:reply]
|
78
79
|
if server and from
|
79
80
|
settings = Settings.new
|
80
81
|
settings.from_addr = parse_addr(from)
|
82
|
+
settings.reply_addr = parse_addr(reply) if reply
|
81
83
|
settings.to_addrs = parse_addrs(*params[:to])
|
82
84
|
settings.cc_addrs = parse_addrs(*params[:cc])
|
83
85
|
settings.bcc_addrs = parse_addrs(*params[:bcc])
|
@@ -111,6 +113,7 @@ class EmailSender
|
|
111
113
|
# |:username |<string> |-> from address |
|
112
114
|
# |:password |<string> | |
|
113
115
|
# |:from |<string> |-> username parameter |
|
116
|
+
# |:reply |<string> |nil |
|
114
117
|
# |:to |<string>, <array of string> |[] |
|
115
118
|
# |:cc |<string>, <array of string> |[] |
|
116
119
|
# |:bcc |<string>, <array of string> |[] |
|
@@ -215,21 +218,26 @@ class EmailSender
|
|
215
218
|
boundary = "boundary0_#{random_id}"
|
216
219
|
stream.puts("Message-ID: <#{message_id}>")
|
217
220
|
stream.puts(now.strftime('Date: %a, %d %b %Y %H:%M:%S %z'))
|
218
|
-
stream.puts("From:
|
219
|
-
"
|
221
|
+
stream.puts("From: #{from_name ? \
|
222
|
+
"=?#{check_charset(from_name)}?B?#{[from_name].pack('m0')}?= <#{from_addr}>" : from_addr}")
|
223
|
+
if settings.reply_addr
|
224
|
+
reply_addr, reply_name = settings.reply_addr
|
225
|
+
stream.puts("Reply-To: #{reply_name ? \
|
226
|
+
"=?#{check_charset(reply_name)}?B?#{[reply_name].pack('m0')}?= <#{reply_addr}>" : reply_addr}")
|
227
|
+
end
|
220
228
|
to_str = ''
|
221
229
|
to_addrs.each do |addr, name|
|
222
|
-
to = name ? "
|
230
|
+
to = name ? "=?#{check_charset(name)}?B?#{[name].pack('m0')}?= <#{addr}>" : addr
|
223
231
|
to_str << (to_str.empty? ? "To: #{to}" : ",\n\t#{to}")
|
224
232
|
end
|
225
233
|
stream.puts(to_str) unless to_str.empty?
|
226
234
|
cc_str = ''
|
227
235
|
cc_addrs.each do |addr, name|
|
228
|
-
cc = name ? "
|
236
|
+
cc = name ? "=?#{check_charset(name)}?B?#{[name].pack('m0')}?= <#{addr}>" : addr
|
229
237
|
cc_str << (cc_str.empty? ? "CC: #{cc}" : ",\n\t#{cc}")
|
230
238
|
end
|
231
239
|
stream.puts(cc_str) unless cc_str.empty?
|
232
|
-
stream.puts("Subject:
|
240
|
+
stream.puts("Subject: =?#{check_charset(subject)}?B?#{[subject].pack('m0')}?=")
|
233
241
|
stream.puts("MIME-Version: 1.0")
|
234
242
|
unless attachment.empty?
|
235
243
|
stream.puts("Content-Type: multipart/mixed; boundary=\"#{boundary}\"")
|
@@ -237,7 +245,7 @@ class EmailSender
|
|
237
245
|
stream.puts("This is a multi-part message in MIME format.")
|
238
246
|
stream.puts("--#{boundary}")
|
239
247
|
end
|
240
|
-
stream.puts("Content-Type: #{conttype}; charset=#{content
|
248
|
+
stream.puts("Content-Type: #{conttype}; charset=#{check_charset(content)}")
|
241
249
|
stream.puts("Content-Transfer-Encoding: base64")
|
242
250
|
stream.puts
|
243
251
|
stream.print([content].pack('m57'))
|
@@ -245,7 +253,7 @@ class EmailSender
|
|
245
253
|
attachment.each do |file|
|
246
254
|
file = file.encode(Encoding::UTF_8)
|
247
255
|
basename = File.basename(file)
|
248
|
-
filename = basename
|
256
|
+
filename = "=?#{check_charset(basename)}?B?#{[basename].pack('m0')}?="
|
249
257
|
stream.puts("--#{boundary}")
|
250
258
|
stream.puts("Content-Type: application/octet-stream; name=\"#{filename}\"")
|
251
259
|
stream.puts("Content-Transfer-Encoding: base64")
|
@@ -263,12 +271,17 @@ class EmailSender
|
|
263
271
|
end
|
264
272
|
|
265
273
|
private
|
274
|
+
def check_charset(str)
|
275
|
+
str.ascii_only? ? 'us-ascii' : 'utf-8'
|
276
|
+
end
|
277
|
+
|
266
278
|
def parse_addr(str)
|
267
279
|
str = str.encode(Encoding::UTF_8)
|
268
280
|
str.strip!
|
269
281
|
addr = str.scan(/\A(.*?)\s*<([^<]*?)>\z/).first
|
270
282
|
addr ? addr.reverse! : [str, nil]
|
271
283
|
end
|
284
|
+
|
272
285
|
def parse_addrs(*strs)
|
273
286
|
addrs = {}
|
274
287
|
strs.each do |str|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: email_sender
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.2.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,12 +9,12 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2013-04-15 00:00:00.000000000 Z
|
13
13
|
dependencies: []
|
14
14
|
description: ! 'EmailSender is an easy to use library to send email based on Net::SMTP.
|
15
15
|
|
16
16
|
It supports the well-known encryption and authentication methods, and you can use
|
17
|
-
it very easily with
|
17
|
+
it very easily with Gmail account.'
|
18
18
|
email: bakonyi.peter@gmail.com
|
19
19
|
executables: []
|
20
20
|
extensions: []
|