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.
Files changed (4) hide show
  1. data/README.rdoc +2 -2
  2. data/VERSION +1 -1
  3. data/lib/email_sender.rb +23 -10
  4. metadata +3 -3
@@ -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 need specified the connection parameters to SMTP server on initialization:
13
+ You can specify the connection parameters to SMTP server at initialization:
14
14
 
15
- # simple unsafe connection
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.0
1
+ 1.2.0
@@ -33,7 +33,7 @@ class EmailSender
33
33
  # Major version number
34
34
  VERSION_MAJOR = 1
35
35
  # Minor version number
36
- VERSION_MINOR = 1
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: " << (from_name ? (from_name.ascii_only? ? "#{from_name} <#{from_addr}>" :
219
- "=?utf-8?B?#{[from_name].pack('m0')}?= <#{from_addr}>") : from_addr))
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 ? "#{name.ascii_only? ? name : "=?utf-8?B?#{[name].pack('m0')}?="} <#{addr}>" : addr
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 ? "#{name.ascii_only? ? name : "=?utf-8?B?#{[name].pack('m0')}?="} <#{addr}>" : addr
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: " << (subject.ascii_only? ? subject : "=?utf-8?B?#{[subject].pack('m0')}?="))
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.ascii_only? ? 'us-ascii' : 'utf-8'}")
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.ascii_only? ? basename : "=?utf-8?B?#{[basename].pack('m0')}?="
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.1.0
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: 2012-12-27 00:00:00.000000000 Z
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 GMail account.'
17
+ it very easily with Gmail account.'
18
18
  email: bakonyi.peter@gmail.com
19
19
  executables: []
20
20
  extensions: []