tmail 1.2.1 → 1.2.2
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/CHANGES +50 -5
- data/MANIFEST +188 -0
- data/NOTES +1 -1
- data/README +10 -4
- data/Rakefile +1 -10
- data/lib/tmail.rb +1 -0
- data/lib/tmail/Makefile +0 -1
- data/lib/tmail/address.rb +190 -17
- data/lib/tmail/attachments.rb +1 -1
- data/lib/tmail/base64.rb +4 -10
- data/lib/tmail/compat.rb +8 -6
- data/lib/tmail/config.rb +2 -6
- data/lib/tmail/core_extensions.rb +14 -18
- data/lib/tmail/encode.rb +47 -12
- data/lib/tmail/header.rb +7 -10
- data/lib/tmail/index.rb +2 -1
- data/lib/tmail/interface.rb +14 -12
- data/lib/tmail/loader.rb +2 -0
- data/lib/tmail/mail.rb +83 -24
- data/lib/tmail/mailbox.rb +70 -10
- data/lib/tmail/main.rb +2 -0
- data/lib/tmail/mbox.rb +2 -0
- data/lib/tmail/net.rb +16 -15
- data/lib/tmail/obsolete.rb +7 -12
- data/lib/tmail/parser.rb +1 -0
- data/lib/tmail/require_arch.rb +2 -0
- data/lib/tmail/scanner.rb +2 -1
- data/lib/tmail/scanner_r.rb +11 -10
- data/lib/tmail/utils.rb +83 -26
- data/lib/tmail/version.rb +3 -2
- data/log/BugTrackingLog.txt +1208 -0
- data/log/{ChangeLog.txt → Changelog-0.txt} +36 -0
- data/log/Changelog.txt +534 -0
- data/log/Testlog.txt +114 -0
- data/log/Todo.txt +0 -2
- data/meta/VERSION +1 -0
- data/meta/project.yaml +8 -5
- data/meta/unixname +1 -0
- data/setup.rb +1481 -0
- data/site/contributing/index.html +183 -0
- data/site/css/clean.css +27 -0
- data/site/css/layout.css +31 -0
- data/site/css/style.css +60 -0
- data/site/download/index.html +61 -0
- data/site/img/envelope.jpg +0 -0
- data/site/img/mailman.gif +0 -0
- data/site/img/stamp-sm.jpg +0 -0
- data/site/img/stamp.jpg +0 -0
- data/site/img/stampborder.jpg +0 -0
- data/site/img/tfire.jpg +0 -0
- data/site/img/tmail.png +0 -0
- data/site/index.html +270 -0
- data/site/js/jquery.js +31 -0
- data/site/log/Changelog.xsl +33 -0
- data/site/log/changelog.xml +1677 -0
- data/site/outdated/BUGS +3 -0
- data/site/outdated/DEPENDS +1 -0
- data/site/outdated/Incompatibilities +89 -0
- data/site/outdated/Incompatibilities.ja +102 -0
- data/site/outdated/NEWS +9 -0
- data/site/outdated/README.ja +73 -0
- data/site/outdated/doc.ja/address.html +275 -0
- data/site/outdated/doc.ja/basics.html +405 -0
- data/site/outdated/doc.ja/config.html +49 -0
- data/site/outdated/doc.ja/details.html +146 -0
- data/site/outdated/doc.ja/index.html +39 -0
- data/site/outdated/doc.ja/mail.html +793 -0
- data/site/outdated/doc.ja/mailbox.html +265 -0
- data/site/outdated/doc.ja/port.html +95 -0
- data/site/outdated/doc.ja/tmail.html +58 -0
- data/site/outdated/doc.ja/usage.html +202 -0
- data/site/outdated/rdd/address.rrd.m +229 -0
- data/site/outdated/rdd/basics.rd.m +275 -0
- data/site/outdated/rdd/config.rrd.m +26 -0
- data/site/outdated/rdd/details.rd.m +117 -0
- data/site/outdated/rdd/index.rhtml.m +54 -0
- data/site/outdated/rdd/mail.rrd.m +701 -0
- data/site/outdated/rdd/mailbox.rrd.m +228 -0
- data/site/outdated/rdd/port.rrd.m +69 -0
- data/site/outdated/rdd/tmail.rrd.m +33 -0
- data/site/outdated/rdd/usage.rd.m +247 -0
- data/site/quickstart/index.html +69 -0
- data/site/quickstart/quickstart.html +52 -0
- data/site/quickstart/usage.html +193 -0
- data/site/reference/address.html +247 -0
- data/site/reference/config.html +30 -0
- data/site/reference/index.html +101 -0
- data/site/reference/mail.html +726 -0
- data/site/reference/mailbox.html +245 -0
- data/site/reference/port.html +75 -0
- data/site/reference/tmail.html +35 -0
- data/test/fixtures/mailbox +405 -4
- data/test/fixtures/raw_email_multiple_from +30 -0
- data/test/kcode.rb +2 -2
- data/test/temp_test_one.rb +46 -0
- data/test/test_address.rb +77 -38
- data/test/test_encode.rb +0 -2
- data/test/test_header.rb +47 -24
- data/test/test_mail.rb +52 -9
- data/test/test_mbox.rb +28 -0
- data/test/test_port.rb +33 -27
- data/test/test_quote.rb +35 -8
- data/work/script/make +26 -0
- data/work/script/rdoc +39 -0
- data/{script → work/script}/setup +0 -0
- data/work/script/test +30 -0
- metadata +249 -184
- data/log/History.txt +0 -40
- data/meta/config.yaml +0 -8
- data/meta/icli.yaml +0 -16
- data/meta/tmail.roll +0 -3
- data/script/changelog +0 -19
- data/script/clobber/distclean +0 -8
- data/script/clobber/package +0 -10
- data/script/compile +0 -32
- data/script/pack/gem +0 -93
- data/script/pack/tgz +0 -41
- data/script/pack/zip +0 -41
- data/script/prepare +0 -15
- data/script/publish +0 -51
- data/script/rdoc +0 -42
- data/script/release +0 -10
- data/script/stamp +0 -33
- data/script/stats +0 -138
- data/script/tag +0 -25
- data/script/test +0 -36
data/lib/tmail/mailbox.rb
CHANGED
|
@@ -150,9 +150,78 @@ module TMail
|
|
|
150
150
|
|
|
151
151
|
class UNIXMbox
|
|
152
152
|
|
|
153
|
+
class << self
|
|
154
|
+
alias newobj new
|
|
155
|
+
end
|
|
156
|
+
|
|
157
|
+
# Creates a new mailbox object that you can iterate through to collect the
|
|
158
|
+
# emails from with "each_port".
|
|
159
|
+
#
|
|
160
|
+
# You need to pass it a filename of a unix mailbox format file, the format of this
|
|
161
|
+
# file can be researched at this page at {wikipedia}[link:http://en.wikipedia.org/wiki/Mbox]
|
|
162
|
+
#
|
|
163
|
+
# ==== Parameters
|
|
164
|
+
#
|
|
165
|
+
# +filename+: The filename of the mailbox you want to open
|
|
166
|
+
#
|
|
167
|
+
# +tmpdir+: Can be set to override TMail using the system environment's temp dir. TMail will first
|
|
168
|
+
# use the temp dir specified by you (if any) or then the temp dir specified in the Environment's TEMP
|
|
169
|
+
# value then the value in the Environment's TMP value or failing all of the above, '/tmp'
|
|
170
|
+
#
|
|
171
|
+
# +readonly+: If set to false, each email you take from the mail box will be removed from the mailbox.
|
|
172
|
+
# default is *false* - ie, it *WILL* truncate your mailbox file to ZERO once it has read the emails out.
|
|
173
|
+
#
|
|
174
|
+
# ==== Options:
|
|
175
|
+
#
|
|
176
|
+
# None
|
|
177
|
+
#
|
|
178
|
+
# ==== Examples:
|
|
179
|
+
#
|
|
180
|
+
# # First show using readonly true:
|
|
181
|
+
#
|
|
182
|
+
# require 'ftools'
|
|
183
|
+
# File.size("../test/fixtures/mailbox")
|
|
184
|
+
# #=> 20426
|
|
185
|
+
#
|
|
186
|
+
# mailbox = TMail::UNIXMbox.new("../test/fixtures/mailbox", nil, true)
|
|
187
|
+
# #=> #<TMail::UNIXMbox:0x14a2aa8 @readonly=true.....>
|
|
188
|
+
#
|
|
189
|
+
# mailbox.each_port do |port|
|
|
190
|
+
# mail = TMail::Mail.new(port)
|
|
191
|
+
# puts mail.subject
|
|
192
|
+
# end
|
|
193
|
+
# #Testing mailbox 1
|
|
194
|
+
# #Testing mailbox 2
|
|
195
|
+
# #Testing mailbox 3
|
|
196
|
+
# #Testing mailbox 4
|
|
197
|
+
# require 'ftools'
|
|
198
|
+
# File.size?("../test/fixtures/mailbox")
|
|
199
|
+
# #=> 20426
|
|
200
|
+
#
|
|
201
|
+
# # Now show with readonly set to the default false
|
|
202
|
+
#
|
|
203
|
+
# mailbox = TMail::UNIXMbox.new("../test/fixtures/mailbox")
|
|
204
|
+
# #=> #<TMail::UNIXMbox:0x14a2aa8 @readonly=false.....>
|
|
205
|
+
#
|
|
206
|
+
# mailbox.each_port do |port|
|
|
207
|
+
# mail = TMail::Mail.new(port)
|
|
208
|
+
# puts mail.subject
|
|
209
|
+
# end
|
|
210
|
+
# #Testing mailbox 1
|
|
211
|
+
# #Testing mailbox 2
|
|
212
|
+
# #Testing mailbox 3
|
|
213
|
+
# #Testing mailbox 4
|
|
214
|
+
#
|
|
215
|
+
# File.size?("../test/fixtures/mailbox")
|
|
216
|
+
# #=> nil
|
|
217
|
+
def UNIXMbox.new( filename, tmpdir = nil, readonly = false )
|
|
218
|
+
tmpdir = ENV['TEMP'] || ENV['TMP'] || '/tmp'
|
|
219
|
+
newobj(filename, "#{tmpdir}/ruby_tmail_#{$$}_#{rand()}", readonly, false)
|
|
220
|
+
end
|
|
221
|
+
|
|
153
222
|
def UNIXMbox.lock( fname )
|
|
154
223
|
begin
|
|
155
|
-
f = File.open(fname)
|
|
224
|
+
f = File.open(fname, 'r+')
|
|
156
225
|
f.flock File::LOCK_EX
|
|
157
226
|
yield f
|
|
158
227
|
ensure
|
|
@@ -161,15 +230,6 @@ module TMail
|
|
|
161
230
|
end
|
|
162
231
|
end
|
|
163
232
|
|
|
164
|
-
class << self
|
|
165
|
-
alias newobj new
|
|
166
|
-
end
|
|
167
|
-
|
|
168
|
-
def UNIXMbox.new( fname, tmpdir = nil, readonly = false )
|
|
169
|
-
tmpdir = ENV['TEMP'] || ENV['TMP'] || '/tmp'
|
|
170
|
-
newobj(fname, "#{tmpdir}/ruby_tmail_#{$$}_#{rand()}", readonly, false)
|
|
171
|
-
end
|
|
172
|
-
|
|
173
233
|
def UNIXMbox.static_new( fname, dir, readonly = false )
|
|
174
234
|
newobj(fname, dir, readonly, true)
|
|
175
235
|
end
|
data/lib/tmail/main.rb
CHANGED
data/lib/tmail/mbox.rb
CHANGED
data/lib/tmail/net.rb
CHANGED
|
@@ -1,8 +1,3 @@
|
|
|
1
|
-
=begin rdoc
|
|
2
|
-
|
|
3
|
-
= Net provides SMTP wrapping
|
|
4
|
-
|
|
5
|
-
=end
|
|
6
1
|
#--
|
|
7
2
|
# Copyright (c) 1998-2003 Minero Aoki <aamine@loveruby.net>
|
|
8
3
|
#
|
|
@@ -29,13 +24,14 @@
|
|
|
29
24
|
# with permission of Minero Aoki.
|
|
30
25
|
#++
|
|
31
26
|
|
|
27
|
+
#:stopdoc:
|
|
32
28
|
require 'nkf'
|
|
33
|
-
|
|
29
|
+
#:startdoc:
|
|
34
30
|
|
|
35
31
|
module TMail
|
|
36
32
|
|
|
37
33
|
class Mail
|
|
38
|
-
|
|
34
|
+
|
|
39
35
|
def send_to( smtp )
|
|
40
36
|
do_send_to(smtp) do
|
|
41
37
|
ready_to_send
|
|
@@ -131,7 +127,7 @@ module TMail
|
|
|
131
127
|
|
|
132
128
|
end
|
|
133
129
|
|
|
134
|
-
|
|
130
|
+
#:stopdoc:
|
|
135
131
|
class DeleteFields
|
|
136
132
|
|
|
137
133
|
NOSEND_FIELDS = %w(
|
|
@@ -155,8 +151,9 @@ module TMail
|
|
|
155
151
|
end
|
|
156
152
|
|
|
157
153
|
end
|
|
154
|
+
#:startdoc:
|
|
158
155
|
|
|
159
|
-
|
|
156
|
+
#:stopdoc:
|
|
160
157
|
class AddMessageId
|
|
161
158
|
|
|
162
159
|
def initialize( fqdn = nil )
|
|
@@ -170,8 +167,9 @@ module TMail
|
|
|
170
167
|
end
|
|
171
168
|
|
|
172
169
|
end
|
|
170
|
+
#:startdoc:
|
|
173
171
|
|
|
174
|
-
|
|
172
|
+
#:stopdoc:
|
|
175
173
|
class AddDate
|
|
176
174
|
|
|
177
175
|
def exec( mail )
|
|
@@ -179,8 +177,9 @@ module TMail
|
|
|
179
177
|
end
|
|
180
178
|
|
|
181
179
|
end
|
|
180
|
+
#:startdoc:
|
|
182
181
|
|
|
183
|
-
|
|
182
|
+
#:stopdoc:
|
|
184
183
|
class MimeEncodeAuto
|
|
185
184
|
|
|
186
185
|
def initialize( s = nil, m = nil )
|
|
@@ -198,8 +197,9 @@ module TMail
|
|
|
198
197
|
end
|
|
199
198
|
|
|
200
199
|
end
|
|
201
|
-
|
|
200
|
+
#:startdoc:
|
|
202
201
|
|
|
202
|
+
#:stopdoc:
|
|
203
203
|
class MimeEncodeSingle
|
|
204
204
|
|
|
205
205
|
def exec( mail )
|
|
@@ -225,8 +225,9 @@ module TMail
|
|
|
225
225
|
end
|
|
226
226
|
|
|
227
227
|
end
|
|
228
|
-
|
|
229
|
-
|
|
228
|
+
#:startdoc:
|
|
229
|
+
|
|
230
|
+
#:stopdoc:
|
|
230
231
|
class MimeEncodeMulti
|
|
231
232
|
|
|
232
233
|
def exec( mail, top = true )
|
|
@@ -243,5 +244,5 @@ module TMail
|
|
|
243
244
|
end
|
|
244
245
|
|
|
245
246
|
end
|
|
246
|
-
|
|
247
|
+
#:startdoc:
|
|
247
248
|
end # module TMail
|
data/lib/tmail/obsolete.rb
CHANGED
|
@@ -2,6 +2,9 @@
|
|
|
2
2
|
|
|
3
3
|
= Obsolete methods that are depriciated
|
|
4
4
|
|
|
5
|
+
If you really want to see them, go to lib/tmail/obsolete.rb and view to your
|
|
6
|
+
heart's content.
|
|
7
|
+
|
|
5
8
|
=end
|
|
6
9
|
#--
|
|
7
10
|
# Copyright (c) 1998-2003 Minero Aoki <aamine@loveruby.net>
|
|
@@ -28,10 +31,9 @@
|
|
|
28
31
|
# Note: Originally licensed under LGPL v2+. Using MIT license for Rails
|
|
29
32
|
# with permission of Minero Aoki.
|
|
30
33
|
#++
|
|
34
|
+
#:stopdoc:
|
|
35
|
+
module TMail #:nodoc:
|
|
31
36
|
|
|
32
|
-
module TMail
|
|
33
|
-
|
|
34
|
-
# mail.rb
|
|
35
37
|
class Mail
|
|
36
38
|
alias include? key?
|
|
37
39
|
alias has_key? key?
|
|
@@ -51,8 +53,6 @@ module TMail
|
|
|
51
53
|
alias has_value? value?
|
|
52
54
|
end
|
|
53
55
|
|
|
54
|
-
|
|
55
|
-
# facade.rb
|
|
56
56
|
class Mail
|
|
57
57
|
def from_addr( default = nil )
|
|
58
58
|
addr, = from_addrs(nil)
|
|
@@ -83,13 +83,11 @@ module TMail
|
|
|
83
83
|
alias each_dest each_destination
|
|
84
84
|
end
|
|
85
85
|
|
|
86
|
-
|
|
87
|
-
# address.rb
|
|
88
86
|
class Address
|
|
89
87
|
alias route routes
|
|
90
88
|
alias addr spec
|
|
91
89
|
|
|
92
|
-
def spec=( str )
|
|
90
|
+
def spec=( str )
|
|
93
91
|
@local, @domain = str.split(/@/,2).map {|s| s.split(/\./) }
|
|
94
92
|
end
|
|
95
93
|
|
|
@@ -97,8 +95,6 @@ module TMail
|
|
|
97
95
|
alias address= spec=
|
|
98
96
|
end
|
|
99
97
|
|
|
100
|
-
|
|
101
|
-
# mbox.rb
|
|
102
98
|
class MhMailbox
|
|
103
99
|
alias new_mail new_port
|
|
104
100
|
alias each_mail each_port
|
|
@@ -115,8 +111,6 @@ module TMail
|
|
|
115
111
|
alias each_newmail each_new_port
|
|
116
112
|
end
|
|
117
113
|
|
|
118
|
-
|
|
119
|
-
# utils.rb
|
|
120
114
|
extend TextUtils
|
|
121
115
|
|
|
122
116
|
class << self
|
|
@@ -135,3 +129,4 @@ module TMail
|
|
|
135
129
|
end
|
|
136
130
|
|
|
137
131
|
end # module TMail
|
|
132
|
+
#:startdoc:
|
data/lib/tmail/parser.rb
CHANGED
data/lib/tmail/require_arch.rb
CHANGED
data/lib/tmail/scanner.rb
CHANGED
|
@@ -28,7 +28,7 @@
|
|
|
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
32
|
#require 'tmail/require_arch'
|
|
33
33
|
require 'tmail/utils'
|
|
34
34
|
require 'tmail/config'
|
|
@@ -46,3 +46,4 @@ module TMail
|
|
|
46
46
|
Scanner = TMailScanner
|
|
47
47
|
end
|
|
48
48
|
end
|
|
49
|
+
#:stopdoc:
|
data/lib/tmail/scanner_r.rb
CHANGED
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
# Note: Originally licensed under LGPL v2+. Using MIT license for Rails
|
|
27
27
|
# with permission of Minero Aoki.
|
|
28
28
|
#++
|
|
29
|
-
|
|
29
|
+
#:stopdoc:
|
|
30
30
|
require 'tmail/config'
|
|
31
31
|
|
|
32
32
|
module TMail
|
|
@@ -105,7 +105,7 @@ module TMail
|
|
|
105
105
|
@received = (scantype == :RECEIVED)
|
|
106
106
|
@is_mime_header = MIME_HEADERS[scantype]
|
|
107
107
|
|
|
108
|
-
atom, token, @quoted_re, @domlit_re, @comment_re = PATTERN_TABLE[
|
|
108
|
+
atom, token, @quoted_re, @domlit_re, @comment_re = PATTERN_TABLE[TMail.KCODE]
|
|
109
109
|
@word_re = (MIME_HEADERS[scantype] ? token : atom)
|
|
110
110
|
end
|
|
111
111
|
|
|
@@ -145,34 +145,34 @@ module TMail
|
|
|
145
145
|
|
|
146
146
|
if s = readstr(@word_re)
|
|
147
147
|
if @is_mime_header
|
|
148
|
-
yield :TOKEN, s
|
|
148
|
+
yield [:TOKEN, s]
|
|
149
149
|
else
|
|
150
150
|
# atom
|
|
151
151
|
if /\A\d+\z/ === s
|
|
152
|
-
yield :DIGIT, s
|
|
152
|
+
yield [:DIGIT, s]
|
|
153
153
|
elsif @received
|
|
154
|
-
yield RECV_TOKEN[s.downcase] || :ATOM, s
|
|
154
|
+
yield [RECV_TOKEN[s.downcase] || :ATOM, s]
|
|
155
155
|
else
|
|
156
|
-
yield :ATOM, s
|
|
156
|
+
yield [:ATOM, s]
|
|
157
157
|
end
|
|
158
158
|
end
|
|
159
159
|
|
|
160
160
|
elsif skip(/\A"/)
|
|
161
|
-
yield :QUOTED, scan_quoted_word()
|
|
161
|
+
yield [:QUOTED, scan_quoted_word()]
|
|
162
162
|
|
|
163
163
|
elsif skip(/\A\[/)
|
|
164
|
-
yield :DOMLIT, scan_domain_literal()
|
|
164
|
+
yield [:DOMLIT, scan_domain_literal()]
|
|
165
165
|
|
|
166
166
|
elsif skip(/\A\(/)
|
|
167
167
|
@comments.push scan_comment()
|
|
168
168
|
|
|
169
169
|
else
|
|
170
170
|
c = readchar()
|
|
171
|
-
yield c, c
|
|
171
|
+
yield [c, c]
|
|
172
172
|
end
|
|
173
173
|
end
|
|
174
174
|
|
|
175
|
-
yield false, '$'
|
|
175
|
+
yield [false, '$']
|
|
176
176
|
end
|
|
177
177
|
|
|
178
178
|
def scan_quoted_word
|
|
@@ -259,3 +259,4 @@ module TMail
|
|
|
259
259
|
end
|
|
260
260
|
|
|
261
261
|
end # module TMail
|
|
262
|
+
#:startdoc:
|
data/lib/tmail/utils.rb
CHANGED
|
@@ -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,8 +101,13 @@ 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
112
|
aspecial = '()<>[]:;.\\,"'
|
|
61
113
|
tspecial = '()<>[];:\\,"/?='
|
|
@@ -67,37 +119,37 @@ module TMail
|
|
|
67
119
|
TOKEN_UNSAFE = /[#{Regexp.quote tspecial}#{control}#{lwsp}]/n
|
|
68
120
|
CONTROL_CHAR = /[#{control}]/n
|
|
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
|
|