actionmailer 2.0.5 → 2.1.0
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of actionmailer might be problematic. Click here for more details.
- data/CHANGELOG +2 -5
- data/MIT-LICENSE +1 -1
- data/README +14 -10
- data/Rakefile +3 -4
- data/lib/action_mailer.rb +1 -1
- data/lib/action_mailer/adv_attr_accessor.rb +1 -1
- data/lib/action_mailer/base.rb +140 -100
- data/lib/action_mailer/helpers.rb +7 -7
- data/lib/action_mailer/part.rb +2 -2
- data/lib/action_mailer/quoting.rb +3 -1
- data/lib/action_mailer/test_case.rb +14 -22
- data/lib/action_mailer/vendor.rb +2 -2
- data/lib/action_mailer/vendor/text-format-0.6.3/text/format.rb +0 -0
- data/lib/action_mailer/vendor/{tmail-1.2.1 → tmail-1.2.3}/tmail.rb +1 -0
- data/lib/action_mailer/vendor/tmail-1.2.3/tmail/address.rb +426 -0
- data/lib/action_mailer/vendor/{tmail-1.2.1 → tmail-1.2.3}/tmail/attachments.rb +2 -3
- data/lib/action_mailer/vendor/{tmail-1.2.1 → tmail-1.2.3}/tmail/base64.rb +4 -10
- data/lib/action_mailer/vendor/{tmail-1.2.1 → tmail-1.2.3}/tmail/compat.rb +8 -6
- data/lib/action_mailer/vendor/{tmail-1.2.1 → tmail-1.2.3}/tmail/config.rb +2 -6
- data/lib/action_mailer/vendor/{tmail-1.2.1 → tmail-1.2.3}/tmail/core_extensions.rb +14 -18
- data/lib/action_mailer/vendor/{tmail-1.2.1 → tmail-1.2.3}/tmail/encode.rb +77 -19
- data/lib/action_mailer/vendor/{tmail-1.2.1 → tmail-1.2.3}/tmail/header.rb +7 -10
- data/lib/action_mailer/vendor/tmail-1.2.3/tmail/index.rb +9 -0
- data/lib/action_mailer/vendor/{tmail-1.2.1 → tmail-1.2.3}/tmail/interface.rb +20 -13
- data/lib/action_mailer/vendor/{tmail-1.2.1 → tmail-1.2.3}/tmail/loader.rb +2 -0
- data/lib/action_mailer/vendor/{tmail-1.2.1 → tmail-1.2.3}/tmail/mail.rb +97 -26
- data/lib/action_mailer/vendor/{tmail-1.2.1 → tmail-1.2.3}/tmail/mailbox.rb +70 -10
- data/lib/action_mailer/vendor/tmail-1.2.3/tmail/main.rb +6 -0
- data/lib/action_mailer/vendor/{tmail-1.2.1 → tmail-1.2.3}/tmail/mbox.rb +2 -0
- data/lib/action_mailer/vendor/{tmail-1.2.1 → tmail-1.2.3}/tmail/net.rb +16 -15
- data/lib/action_mailer/vendor/{tmail-1.2.1 → tmail-1.2.3}/tmail/obsolete.rb +7 -12
- data/lib/action_mailer/vendor/{tmail-1.2.1 → tmail-1.2.3}/tmail/parser.rb +1 -0
- data/lib/action_mailer/vendor/{tmail-1.2.1 → tmail-1.2.3}/tmail/port.rb +0 -0
- data/lib/action_mailer/vendor/{tmail-1.2.1 → tmail-1.2.3}/tmail/quoting.rb +0 -0
- data/lib/action_mailer/vendor/tmail-1.2.3/tmail/require_arch.rb +58 -0
- data/lib/action_mailer/vendor/{tmail-1.2.1 → tmail-1.2.3}/tmail/scanner.rb +3 -1
- data/lib/action_mailer/vendor/{tmail-1.2.1 → tmail-1.2.3}/tmail/scanner_r.rb +15 -15
- data/lib/action_mailer/vendor/{tmail-1.2.1 → tmail-1.2.3}/tmail/stringio.rb +1 -0
- data/lib/action_mailer/vendor/{tmail-1.2.1 → tmail-1.2.3}/tmail/utils.rb +89 -32
- data/lib/action_mailer/vendor/{tmail-1.2.1 → tmail-1.2.3}/tmail/version.rb +4 -3
- data/lib/action_mailer/version.rb +2 -2
- data/test/delivery_method_test.rb +1 -1
- data/test/mail_helper_test.rb +1 -1
- data/test/mail_render_test.rb +1 -1
- data/test/mail_service_test.rb +48 -9
- data/test/quoting_test.rb +19 -32
- data/test/test_helper_test.rb +3 -9
- data/test/tmail_test.rb +1 -1
- data/test/url_test.rb +2 -2
- metadata +33 -53
- data/lib/action_mailer/vendor/tmail-1.2.1/tmail/Makefile +0 -19
- data/lib/action_mailer/vendor/tmail-1.2.1/tmail/address.rb +0 -245
- data/lib/action_mailer/vendor/tmail-1.2.1/tmail/facade.rb +0 -552
- data/lib/action_mailer/vendor/tmail-1.2.1/tmail/info.rb +0 -35
- data/lib/action_mailer/vendor/tmail-1.2.1/tmail/parser.y +0 -381
- data/lib/action_mailer/vendor/tmail-1.2.1/tmail/tmail.rb +0 -1
- data/test/fixtures/first_mailer/share.rhtml +0 -0
- data/test/fixtures/helper_mailer/use_example_helper.rhtml +0 -0
- data/test/fixtures/helper_mailer/use_helper.rhtml +0 -0
- data/test/fixtures/helper_mailer/use_helper_method.rhtml +0 -0
- data/test/fixtures/helper_mailer/use_mail_helper.rhtml +0 -0
- data/test/fixtures/path.with.dots/funky_path_mailer/multipart_with_template_path_with_dots.rhtml +0 -0
- data/test/fixtures/path.with.dots/multipart_with_template_path_with_dots.rhtml +0 -0
- data/test/fixtures/raw_base64_decoded_string +0 -0
- data/test/fixtures/raw_base64_encoded_string +0 -1
- data/test/fixtures/second_mailer/share.rhtml +0 -0
- data/test/fixtures/templates/signed_up.rhtml +0 -0
- data/test/fixtures/test_mailer/implicitly_multipart_example.ignored.rhtml +0 -0
- data/test/fixtures/test_mailer/implicitly_multipart_example.text.html.rhtml +0 -0
- data/test/fixtures/test_mailer/implicitly_multipart_example.text.plain.rhtml +0 -0
- data/test/fixtures/test_mailer/implicitly_multipart_example.text.yaml.rhtml +0 -0
- data/test/fixtures/test_mailer/signed_up.rhtml +0 -0
- data/test/fixtures/test_mailer/signed_up_with_url.rhtml +0 -0
File without changes
|
File without changes
|
@@ -0,0 +1,58 @@
|
|
1
|
+
#:stopdoc:
|
2
|
+
require 'rbconfig'
|
3
|
+
|
4
|
+
# Attempts to require anative extension.
|
5
|
+
# Falls back to pure-ruby version, if it fails.
|
6
|
+
#
|
7
|
+
# This uses Config::CONFIG['arch'] from rbconfig.
|
8
|
+
|
9
|
+
def require_arch(fname)
|
10
|
+
arch = Config::CONFIG['arch']
|
11
|
+
begin
|
12
|
+
path = File.join("tmail", arch, fname)
|
13
|
+
require path
|
14
|
+
rescue LoadError => e
|
15
|
+
# try pre-built Windows binaries
|
16
|
+
if arch =~ /mswin/
|
17
|
+
require File.join("tmail", 'mswin32', fname)
|
18
|
+
else
|
19
|
+
raise e
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
|
25
|
+
# def require_arch(fname)
|
26
|
+
# dext = Config::CONFIG['DLEXT']
|
27
|
+
# begin
|
28
|
+
# if File.extname(fname) == dext
|
29
|
+
# path = fname
|
30
|
+
# else
|
31
|
+
# path = File.join("tmail","#{fname}.#{dext}")
|
32
|
+
# end
|
33
|
+
# require path
|
34
|
+
# rescue LoadError => e
|
35
|
+
# begin
|
36
|
+
# arch = Config::CONFIG['arch']
|
37
|
+
# path = File.join("tmail", arch, "#{fname}.#{dext}")
|
38
|
+
# require path
|
39
|
+
# rescue LoadError
|
40
|
+
# case path
|
41
|
+
# when /i686/
|
42
|
+
# path.sub!('i686', 'i586')
|
43
|
+
# when /i586/
|
44
|
+
# path.sub!('i586', 'i486')
|
45
|
+
# when /i486/
|
46
|
+
# path.sub!('i486', 'i386')
|
47
|
+
# else
|
48
|
+
# begin
|
49
|
+
# require fname + '.rb'
|
50
|
+
# rescue LoadError
|
51
|
+
# raise e
|
52
|
+
# end
|
53
|
+
# end
|
54
|
+
# retry
|
55
|
+
# end
|
56
|
+
# end
|
57
|
+
# end
|
58
|
+
#:startdoc:
|
@@ -28,7 +28,8 @@
|
|
28
28
|
# Note: Originally licensed under LGPL v2+. Using MIT license for Rails
|
29
29
|
# with permission of Minero Aoki.
|
30
30
|
#++
|
31
|
-
|
31
|
+
#:stopdoc:
|
32
|
+
#require 'tmail/require_arch'
|
32
33
|
require 'tmail/utils'
|
33
34
|
require 'tmail/config'
|
34
35
|
|
@@ -45,3 +46,4 @@ module TMail
|
|
45
46
|
Scanner = TMailScanner
|
46
47
|
end
|
47
48
|
end
|
49
|
+
#:stopdoc:
|
@@ -1,4 +1,3 @@
|
|
1
|
-
#
|
2
1
|
# scanner_r.rb
|
3
2
|
#
|
4
3
|
#--
|
@@ -26,14 +25,14 @@
|
|
26
25
|
# Note: Originally licensed under LGPL v2+. Using MIT license for Rails
|
27
26
|
# with permission of Minero Aoki.
|
28
27
|
#++
|
29
|
-
|
28
|
+
#:stopdoc:
|
30
29
|
require 'tmail/config'
|
31
30
|
|
32
31
|
module TMail
|
33
32
|
|
34
33
|
class TMailScanner
|
35
34
|
|
36
|
-
Version = '
|
35
|
+
Version = '1.2.3'
|
37
36
|
Version.freeze
|
38
37
|
|
39
38
|
MIME_HEADERS = {
|
@@ -49,9 +48,9 @@ module TMail
|
|
49
48
|
tokenchars = alnum + Regexp.quote(tokensyms)
|
50
49
|
iso2022str = '\e(?!\(B)..(?:[^\e]+|\e(?!\(B)..)*\e\(B'
|
51
50
|
|
52
|
-
eucstr =
|
53
|
-
sjisstr =
|
54
|
-
utf8str =
|
51
|
+
eucstr = "(?:[\xa1-\xfe][\xa1-\xfe])+"
|
52
|
+
sjisstr = "(?:[\x81-\x9f\xe0-\xef][\x40-\x7e\x80-\xfc])+"
|
53
|
+
utf8str = "(?:[\xc0-\xdf][\x80-\xbf]|[\xe0-\xef][\x80-\xbf][\x80-\xbf])+"
|
55
54
|
|
56
55
|
quoted_with_iso2022 = /\A(?:[^\\\e"]+|#{iso2022str})+/n
|
57
56
|
domlit_with_iso2022 = /\A(?:[^\\\e\]]+|#{iso2022str})+/n
|
@@ -105,7 +104,7 @@ module TMail
|
|
105
104
|
@received = (scantype == :RECEIVED)
|
106
105
|
@is_mime_header = MIME_HEADERS[scantype]
|
107
106
|
|
108
|
-
atom, token, @quoted_re, @domlit_re, @comment_re = PATTERN_TABLE[
|
107
|
+
atom, token, @quoted_re, @domlit_re, @comment_re = PATTERN_TABLE[TMail.KCODE]
|
109
108
|
@word_re = (MIME_HEADERS[scantype] ? token : atom)
|
110
109
|
end
|
111
110
|
|
@@ -145,34 +144,34 @@ module TMail
|
|
145
144
|
|
146
145
|
if s = readstr(@word_re)
|
147
146
|
if @is_mime_header
|
148
|
-
yield :TOKEN, s
|
147
|
+
yield [:TOKEN, s]
|
149
148
|
else
|
150
149
|
# atom
|
151
150
|
if /\A\d+\z/ === s
|
152
|
-
yield :DIGIT, s
|
151
|
+
yield [:DIGIT, s]
|
153
152
|
elsif @received
|
154
|
-
yield RECV_TOKEN[s.downcase] || :ATOM, s
|
153
|
+
yield [RECV_TOKEN[s.downcase] || :ATOM, s]
|
155
154
|
else
|
156
|
-
yield :ATOM, s
|
155
|
+
yield [:ATOM, s]
|
157
156
|
end
|
158
157
|
end
|
159
158
|
|
160
159
|
elsif skip(/\A"/)
|
161
|
-
yield :QUOTED, scan_quoted_word()
|
160
|
+
yield [:QUOTED, scan_quoted_word()]
|
162
161
|
|
163
162
|
elsif skip(/\A\[/)
|
164
|
-
yield :DOMLIT, scan_domain_literal()
|
163
|
+
yield [:DOMLIT, scan_domain_literal()]
|
165
164
|
|
166
165
|
elsif skip(/\A\(/)
|
167
166
|
@comments.push scan_comment()
|
168
167
|
|
169
168
|
else
|
170
169
|
c = readchar()
|
171
|
-
yield c, c
|
170
|
+
yield [c, c]
|
172
171
|
end
|
173
172
|
end
|
174
173
|
|
175
|
-
yield false, '$'
|
174
|
+
yield [false, '$']
|
176
175
|
end
|
177
176
|
|
178
177
|
def scan_quoted_word
|
@@ -259,3 +258,4 @@ module TMail
|
|
259
258
|
end
|
260
259
|
|
261
260
|
end # module TMail
|
261
|
+
#:startdoc:
|
@@ -1,8 +1,3 @@
|
|
1
|
-
=begin rdoc
|
2
|
-
|
3
|
-
= General Purpose TMail Utilities
|
4
|
-
|
5
|
-
=end
|
6
1
|
#--
|
7
2
|
# Copyright (c) 1998-2003 Minero Aoki <aamine@loveruby.net>
|
8
3
|
#
|
@@ -29,21 +24,73 @@
|
|
29
24
|
# with permission of Minero Aoki.
|
30
25
|
#++
|
31
26
|
|
27
|
+
# = TMail - The EMail Swiss Army Knife for Ruby
|
28
|
+
#
|
29
|
+
# The TMail library provides you with a very complete way to handle and manipulate EMails
|
30
|
+
# from within your Ruby programs.
|
31
|
+
#
|
32
|
+
# Used as the backbone for email handling by the Ruby on Rails and Nitro web frameworks as
|
33
|
+
# well as a bunch of other Ruby apps including the Ruby-Talk mailing list to newsgroup email
|
34
|
+
# gateway, it is a proven and reliable email handler that won't let you down.
|
35
|
+
#
|
36
|
+
# Originally created by Minero Aoki, TMail has been recently picked up by Mikel Lindsaar and
|
37
|
+
# is being actively maintained. Numerous backlogged bug fixes have been applied as well as
|
38
|
+
# Ruby 1.9 compatibility and a swath of documentation to boot.
|
39
|
+
#
|
40
|
+
# TMail allows you to treat an email totally as an object and allow you to get on with your
|
41
|
+
# own programming without having to worry about crafting the perfect email address validation
|
42
|
+
# parser, or assembling an email from all it's component parts.
|
43
|
+
#
|
44
|
+
# TMail handles the most complex part of the email - the header. It generates and parses
|
45
|
+
# headers and provides you with instant access to their innards through simple and logically
|
46
|
+
# named accessor and setter methods.
|
47
|
+
#
|
48
|
+
# TMail also provides a wrapper to Net/SMTP as well as Unix Mailbox handling methods to
|
49
|
+
# directly read emails from your unix mailbox, parse them and use them.
|
50
|
+
#
|
51
|
+
# Following is the comprehensive list of methods to access TMail::Mail objects. You can also
|
52
|
+
# check out TMail::Mail, TMail::Address and TMail::Headers for other lists.
|
32
53
|
module TMail
|
33
54
|
|
55
|
+
# Provides an exception to throw on errors in Syntax within TMail's parsers
|
34
56
|
class SyntaxError < StandardError; end
|
35
57
|
|
36
|
-
|
58
|
+
# Provides a new email boundary to separate parts of the email. This is a random
|
59
|
+
# string based off the current time, so should be fairly unique.
|
60
|
+
#
|
61
|
+
# For Example:
|
62
|
+
#
|
63
|
+
# TMail.new_boundary
|
64
|
+
# #=> "mimepart_47bf656968207_25a8fbb80114"
|
65
|
+
# TMail.new_boundary
|
66
|
+
# #=> "mimepart_47bf66051de4_25a8fbb80240"
|
37
67
|
def TMail.new_boundary
|
38
68
|
'mimepart_' + random_tag
|
39
69
|
end
|
40
70
|
|
71
|
+
# Provides a new email message ID. You can use this to generate unique email message
|
72
|
+
# id's for your email so you can track them.
|
73
|
+
#
|
74
|
+
# Optionally takes a fully qualified domain name (default to the current hostname
|
75
|
+
# returned by Socket.gethostname) that will be appended to the message ID.
|
76
|
+
#
|
77
|
+
# For Example:
|
78
|
+
#
|
79
|
+
# email.message_id = TMail.new_message_id
|
80
|
+
# #=> "<47bf66845380e_25a8fbb80332@baci.local.tmail>"
|
81
|
+
# email.to_s
|
82
|
+
# #=> "Message-Id: <47bf668b633f1_25a8fbb80475@baci.local.tmail>\n\n"
|
83
|
+
# email.message_id = TMail.new_message_id("lindsaar.net")
|
84
|
+
# #=> "<47bf668b633f1_25a8fbb80475@lindsaar.net.tmail>"
|
85
|
+
# email.to_s
|
86
|
+
# #=> "Message-Id: <47bf668b633f1_25a8fbb80475@lindsaar.net.tmail>\n\n"
|
41
87
|
def TMail.new_message_id( fqdn = nil )
|
42
88
|
fqdn ||= ::Socket.gethostname
|
43
89
|
"<#{random_tag()}@#{fqdn}.tmail>"
|
44
90
|
end
|
45
91
|
|
46
|
-
|
92
|
+
#:stopdoc:
|
93
|
+
def TMail.random_tag #:nodoc:
|
47
94
|
@uniq += 1
|
48
95
|
t = Time.now
|
49
96
|
sprintf('%x%x_%x%x%d%x',
|
@@ -54,50 +101,55 @@ module TMail
|
|
54
101
|
|
55
102
|
@uniq = 0
|
56
103
|
|
104
|
+
#:startdoc:
|
105
|
+
|
106
|
+
# Text Utils provides a namespace to define TOKENs, ATOMs, PHRASEs and CONTROL characters that
|
107
|
+
# are OK per RFC 2822.
|
108
|
+
#
|
109
|
+
# It also provides methods you can call to determine if a string is safe
|
57
110
|
module TextUtils
|
58
|
-
# Defines characters per RFC that are OK for TOKENs, ATOMs, PHRASEs and CONTROL characters.
|
59
111
|
|
60
|
-
aspecial =
|
61
|
-
tspecial =
|
62
|
-
lwsp =
|
63
|
-
control =
|
112
|
+
aspecial = %Q|()<>[]:;.\\,"|
|
113
|
+
tspecial = %Q|()<>[];:\\,"/?=|
|
114
|
+
lwsp = %Q| \t\r\n|
|
115
|
+
control = %Q|\x00-\x1f\x7f-\xff|
|
64
116
|
|
117
|
+
CONTROL_CHAR = /[#{control}]/n
|
65
118
|
ATOM_UNSAFE = /[#{Regexp.quote aspecial}#{control}#{lwsp}]/n
|
66
119
|
PHRASE_UNSAFE = /[#{Regexp.quote aspecial}#{control}]/n
|
67
120
|
TOKEN_UNSAFE = /[#{Regexp.quote tspecial}#{control}#{lwsp}]/n
|
68
|
-
|
69
|
-
|
121
|
+
|
122
|
+
# Returns true if the string supplied is free from characters not allowed as an ATOM
|
70
123
|
def atom_safe?( str )
|
71
|
-
# Returns true if the string supplied is free from characters not allowed as an ATOM
|
72
124
|
not ATOM_UNSAFE === str
|
73
125
|
end
|
74
126
|
|
127
|
+
# If the string supplied has ATOM unsafe characters in it, will return the string quoted
|
128
|
+
# in double quotes, otherwise returns the string unmodified
|
75
129
|
def quote_atom( str )
|
76
|
-
# If the string supplied has ATOM unsafe characters in it, will return the string quoted
|
77
|
-
# in double quotes, otherwise returns the string unmodified
|
78
130
|
(ATOM_UNSAFE === str) ? dquote(str) : str
|
79
131
|
end
|
80
132
|
|
133
|
+
# If the string supplied has PHRASE unsafe characters in it, will return the string quoted
|
134
|
+
# in double quotes, otherwise returns the string unmodified
|
81
135
|
def quote_phrase( str )
|
82
|
-
# If the string supplied has PHRASE unsafe characters in it, will return the string quoted
|
83
|
-
# in double quotes, otherwise returns the string unmodified
|
84
136
|
(PHRASE_UNSAFE === str) ? dquote(str) : str
|
85
137
|
end
|
86
138
|
|
139
|
+
# Returns true if the string supplied is free from characters not allowed as a TOKEN
|
87
140
|
def token_safe?( str )
|
88
|
-
# Returns true if the string supplied is free from characters not allowed as a TOKEN
|
89
141
|
not TOKEN_UNSAFE === str
|
90
142
|
end
|
91
143
|
|
144
|
+
# If the string supplied has TOKEN unsafe characters in it, will return the string quoted
|
145
|
+
# in double quotes, otherwise returns the string unmodified
|
92
146
|
def quote_token( str )
|
93
|
-
# If the string supplied has TOKEN unsafe characters in it, will return the string quoted
|
94
|
-
# in double quotes, otherwise returns the string unmodified
|
95
147
|
(TOKEN_UNSAFE === str) ? dquote(str) : str
|
96
148
|
end
|
97
149
|
|
98
|
-
|
99
|
-
|
100
|
-
|
150
|
+
# Wraps supplied string in double quotes unless it is already wrapped
|
151
|
+
# Returns double quoted string
|
152
|
+
def dquote( str ) #:nodoc:
|
101
153
|
unless str =~ /^".*?"$/
|
102
154
|
'"' + str.gsub(/["\\]/n) {|s| '\\' + s } + '"'
|
103
155
|
else
|
@@ -106,12 +158,14 @@ module TMail
|
|
106
158
|
end
|
107
159
|
private :dquote
|
108
160
|
|
161
|
+
# Unwraps supplied string from inside double quotes
|
162
|
+
# Returns unquoted string
|
109
163
|
def unquote( str )
|
110
|
-
# Unwraps supplied string from inside double quotes
|
111
|
-
# Returns unquoted string
|
112
164
|
str =~ /^"(.*?)"$/ ? $1 : str
|
113
165
|
end
|
114
166
|
|
167
|
+
# Provides a method to join a domain name by it's parts and also makes it
|
168
|
+
# ATOM safe by quoting it as needed
|
115
169
|
def join_domain( arr )
|
116
170
|
arr.map {|i|
|
117
171
|
if /\A\[.*\]\z/ === i
|
@@ -122,7 +176,7 @@ module TMail
|
|
122
176
|
}.join('.')
|
123
177
|
end
|
124
178
|
|
125
|
-
|
179
|
+
#:stopdoc:
|
126
180
|
ZONESTR_TABLE = {
|
127
181
|
'jst' => 9 * 60,
|
128
182
|
'eet' => 2 * 60,
|
@@ -168,9 +222,10 @@ module TMail
|
|
168
222
|
'y' => 12 * 60,
|
169
223
|
'z' => 0 * 60
|
170
224
|
}
|
225
|
+
#:startdoc:
|
171
226
|
|
227
|
+
# Takes a time zone string from an EMail and converts it to Unix Time (seconds)
|
172
228
|
def timezone_string_to_unixtime( str )
|
173
|
-
# Takes a time zone string from an EMail and converts it to Unix Time (seconds)
|
174
229
|
if m = /([\+\-])(\d\d?)(\d\d)/.match(str)
|
175
230
|
sec = (m[2].to_i * 60 + m[3].to_i) * 60
|
176
231
|
m[1] == '-' ? -sec : sec
|
@@ -181,7 +236,7 @@ module TMail
|
|
181
236
|
end
|
182
237
|
end
|
183
238
|
|
184
|
-
|
239
|
+
#:stopdoc:
|
185
240
|
WDAY = %w( Sun Mon Tue Wed Thu Fri Sat TMailBUG )
|
186
241
|
MONTH = %w( TMailBUG Jan Feb Mar Apr May Jun
|
187
242
|
Jul Aug Sep Oct Nov Dec TMailBUG )
|
@@ -201,7 +256,7 @@ module TMail
|
|
201
256
|
|
202
257
|
|
203
258
|
MESSAGE_ID = /<[^\@>]+\@[^>\@]+>/
|
204
|
-
|
259
|
+
|
205
260
|
def message_id?( str )
|
206
261
|
MESSAGE_ID === str
|
207
262
|
end
|
@@ -239,7 +294,7 @@ module TMail
|
|
239
294
|
}
|
240
295
|
|
241
296
|
def to_kcode( str )
|
242
|
-
flag = NKF_FLAGS[
|
297
|
+
flag = NKF_FLAGS[TMail.KCODE] or return str
|
243
298
|
NKF.nkf(flag, str)
|
244
299
|
end
|
245
300
|
|
@@ -274,6 +329,8 @@ module TMail
|
|
274
329
|
end
|
275
330
|
end
|
276
331
|
end
|
332
|
+
#:startdoc:
|
333
|
+
|
277
334
|
|
278
335
|
end
|
279
336
|
|
@@ -27,11 +27,12 @@
|
|
27
27
|
# with permission of Minero Aoki.
|
28
28
|
#++
|
29
29
|
|
30
|
-
|
31
|
-
|
30
|
+
#:stopdoc:
|
31
|
+
module TMail
|
32
|
+
module VERSION
|
32
33
|
MAJOR = 1
|
33
34
|
MINOR = 2
|
34
|
-
TINY =
|
35
|
+
TINY = 3
|
35
36
|
|
36
37
|
STRING = [MAJOR, MINOR, TINY].join('.')
|
37
38
|
end
|
data/test/mail_helper_test.rb
CHANGED