mailfactory 1.2.3 → 1.3.0
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/mailfactory.rb +40 -6
- data/tests/test_mailfactory.rb +1 -1
- metadata +4 -3
data/lib/mailfactory.rb
CHANGED
@@ -50,7 +50,7 @@ end
|
|
50
50
|
|
51
51
|
# An easy class for creating a mail message
|
52
52
|
class MailFactory
|
53
|
-
|
53
|
+
|
54
54
|
def initialize()
|
55
55
|
@headers = Array.new()
|
56
56
|
@attachments = Array.new()
|
@@ -58,11 +58,15 @@ class MailFactory
|
|
58
58
|
@bodyboundary = generate_boundary()
|
59
59
|
@html = nil
|
60
60
|
@text = nil
|
61
|
+
@charset = 'utf-8'
|
61
62
|
end
|
62
63
|
|
63
64
|
|
64
65
|
# adds a header to the bottom of the headers
|
65
66
|
def add_header(header, value)
|
67
|
+
value = quote_if_necessary(value, @charset) if header == 'subject'
|
68
|
+
value = quote_address_if_necessary(value, @charset) if header == 'from'
|
69
|
+
value = quote_address_if_necessary(value, @charset) if header == 'to'
|
66
70
|
@headers << "#{header}: #{value}"
|
67
71
|
end
|
68
72
|
|
@@ -104,7 +108,7 @@ class MailFactory
|
|
104
108
|
# sets the HTML body of the message. Only the body of the
|
105
109
|
# html should be provided
|
106
110
|
def html=(newhtml)
|
107
|
-
@html = "<html>\n<head>\n<meta content=\"text/html;charset
|
111
|
+
@html = "<html>\n<head>\n<meta content=\"text/html;charset=#{@charset}\" http-equiv=\"Content-Type\">\n</head>\n<body bgcolor=\"#ffffff\" text=\"#000000\">\n#{newhtml}\n</body>\n</html>"
|
108
112
|
end
|
109
113
|
|
110
114
|
|
@@ -327,11 +331,11 @@ protected
|
|
327
331
|
|
328
332
|
if(@attachments.length > 0)
|
329
333
|
# text part
|
330
|
-
body << "#{buildbodyboundary(
|
334
|
+
body << "#{buildbodyboundary("text/plain; charset=#{@charset}; format=flowed", 'quoted-printable')}\r\n\r\n#{quote_text_if_necessary(@text)}"
|
331
335
|
|
332
336
|
# html part if one is provided
|
333
337
|
if @html
|
334
|
-
body << "#{buildbodyboundary(
|
338
|
+
body << "#{buildbodyboundary("text/html; charset=#{@charset}", 'quoted-printable')}\r\n\r\n#{quote_text_if_necessary(@html)}"
|
335
339
|
end
|
336
340
|
|
337
341
|
body << "--#{@bodyboundary}--"
|
@@ -345,10 +349,10 @@ protected
|
|
345
349
|
end
|
346
350
|
else
|
347
351
|
# text part
|
348
|
-
body << "#{buildbodyboundary(
|
352
|
+
body << "#{buildbodyboundary("text/plain; charset=#{@charset}; format=flowed", 'quoted-printable')}\r\n\r\n#{quote_text_if_necessary(@text)}"
|
349
353
|
|
350
354
|
# html part
|
351
|
-
body << "#{buildbodyboundary(
|
355
|
+
body << "#{buildbodyboundary("text/html; charset=#{@charset}", 'quoted-printable')}\r\n\r\n#{quote_text_if_necessary(@html)}"
|
352
356
|
|
353
357
|
body << "--#{@bodyboundary}--"
|
354
358
|
end
|
@@ -389,5 +393,35 @@ protected
|
|
389
393
|
return(enc)
|
390
394
|
end
|
391
395
|
|
396
|
+
def quote_text_if_necessary(text)
|
397
|
+
text = text.gsub( /[^a-z ]/i ) { quote_char($&) }.
|
398
|
+
gsub( / /, "_" )
|
399
|
+
text
|
400
|
+
end
|
401
|
+
|
402
|
+
def quote_if_necessary(text, charset)
|
403
|
+
text = text.gsub( /[^a-z ]/i ) { quote_char($&) }.
|
404
|
+
gsub( / /, "_" )
|
405
|
+
"=?#{charset}?Q?#{text}?="
|
406
|
+
end
|
407
|
+
|
408
|
+
def quote_address_if_necessary(address, charset)
|
409
|
+
if Array === address
|
410
|
+
address.map { |a| quote_address_if_necessary(a, charset) }
|
411
|
+
elsif address =~ /^(\S.*)\s+(<.*>)$/
|
412
|
+
address = $2
|
413
|
+
phrase = quote_if_necessary($1.gsub(/^['"](.*)['"]$/, '\1'), charset)
|
414
|
+
"\"#{phrase}\" #{address}"
|
415
|
+
else
|
416
|
+
address
|
417
|
+
end
|
418
|
+
end
|
419
|
+
|
420
|
+
def quote_char(character)
|
421
|
+
result = ""
|
422
|
+
character.each_byte { |b| result << "=%02x" % b }
|
423
|
+
result
|
424
|
+
end
|
425
|
+
|
392
426
|
end
|
393
427
|
|
data/tests/test_mailfactory.rb
CHANGED
@@ -98,7 +98,7 @@ class TC_MailFactory < Test::Unit::TestCase
|
|
98
98
|
@mail.subject = "Test Subject"
|
99
99
|
}
|
100
100
|
|
101
|
-
assert_equal(@mail.subject,
|
101
|
+
assert_equal("=?utf-8?Q?Test_Subject?=", @mail.subject.to_s, "subject does not equal what it was set to")
|
102
102
|
|
103
103
|
assert_nothing_raised("exception raised while setting subject=") {
|
104
104
|
@mail.subject = "A Different Subject"
|
metadata
CHANGED
@@ -1,10 +1,10 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
|
-
rubygems_version: 0.
|
2
|
+
rubygems_version: 0.9.4
|
3
3
|
specification_version: 1
|
4
4
|
name: mailfactory
|
5
5
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 1.
|
7
|
-
date:
|
6
|
+
version: 1.3.0
|
7
|
+
date: 2008-04-13 00:00:00 +01:00
|
8
8
|
summary: MailFactory is a pure-ruby MIME mail generator
|
9
9
|
require_paths:
|
10
10
|
- lib
|
@@ -25,6 +25,7 @@ required_ruby_version: !ruby/object:Gem::Version::Requirement
|
|
25
25
|
platform: ruby
|
26
26
|
signing_key:
|
27
27
|
cert_chain:
|
28
|
+
post_install_message:
|
28
29
|
authors:
|
29
30
|
- David Powers
|
30
31
|
files:
|