email_sender 1.1.0 → 1.2.0
Sign up to get free protection for your applications and to get access to all the features.
- 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: []
|