tmail 1.2.3.1 → 1.2.6
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/README +10 -0
- data/ext/tmailscanner/tmail/tmailscanner.c +39 -8
- data/lib/tmail.rb +1 -0
- data/lib/tmail/address.rb +6 -40
- data/lib/tmail/attachments.rb +41 -22
- data/lib/tmail/encode.rb +9 -0
- data/lib/tmail/header.rb +5 -3
- data/lib/tmail/interface.rb +40 -3
- data/lib/tmail/mail.rb +3 -3
- data/lib/tmail/mailbox.rb +3 -2
- data/lib/tmail/net.rb +3 -1
- data/lib/tmail/parser.rb +204 -620
- data/lib/tmail/parser.y +38 -3
- data/lib/tmail/quoting.rb +38 -1
- data/lib/tmail/utils.rb +28 -4
- data/lib/tmail/vendor/rchardet-1.3/COPYING +504 -0
- data/lib/tmail/vendor/rchardet-1.3/README +12 -0
- data/lib/tmail/vendor/rchardet-1.3/lib/rchardet.rb +67 -0
- data/lib/tmail/vendor/rchardet-1.3/lib/rchardet/big5freq.rb +927 -0
- data/lib/tmail/vendor/rchardet-1.3/lib/rchardet/big5prober.rb +42 -0
- data/lib/tmail/vendor/rchardet-1.3/lib/rchardet/chardistribution.rb +237 -0
- data/lib/tmail/vendor/rchardet-1.3/lib/rchardet/charsetgroupprober.rb +112 -0
- data/lib/tmail/vendor/rchardet-1.3/lib/rchardet/charsetprober.rb +75 -0
- data/lib/tmail/vendor/rchardet-1.3/lib/rchardet/codingstatemachine.rb +64 -0
- data/lib/tmail/vendor/rchardet-1.3/lib/rchardet/constants.rb +42 -0
- data/lib/tmail/vendor/rchardet-1.3/lib/rchardet/escprober.rb +90 -0
- data/lib/tmail/vendor/rchardet-1.3/lib/rchardet/escsm.rb +244 -0
- data/lib/tmail/vendor/rchardet-1.3/lib/rchardet/eucjpprober.rb +88 -0
- data/lib/tmail/vendor/rchardet-1.3/lib/rchardet/euckrfreq.rb +596 -0
- data/lib/tmail/vendor/rchardet-1.3/lib/rchardet/euckrprober.rb +42 -0
- data/lib/tmail/vendor/rchardet-1.3/lib/rchardet/euctwfreq.rb +430 -0
- data/lib/tmail/vendor/rchardet-1.3/lib/rchardet/euctwprober.rb +42 -0
- data/lib/tmail/vendor/rchardet-1.3/lib/rchardet/gb2312freq.rb +474 -0
- data/lib/tmail/vendor/rchardet-1.3/lib/rchardet/gb2312prober.rb +42 -0
- data/lib/tmail/vendor/rchardet-1.3/lib/rchardet/hebrewprober.rb +289 -0
- data/lib/tmail/vendor/rchardet-1.3/lib/rchardet/jisfreq.rb +570 -0
- data/lib/tmail/vendor/rchardet-1.3/lib/rchardet/jpcntx.rb +229 -0
- data/lib/tmail/vendor/rchardet-1.3/lib/rchardet/langbulgarianmodel.rb +229 -0
- data/lib/tmail/vendor/rchardet-1.3/lib/rchardet/langcyrillicmodel.rb +330 -0
- data/lib/tmail/vendor/rchardet-1.3/lib/rchardet/langgreekmodel.rb +227 -0
- data/lib/tmail/vendor/rchardet-1.3/lib/rchardet/langhebrewmodel.rb +202 -0
- data/lib/tmail/vendor/rchardet-1.3/lib/rchardet/langhungarianmodel.rb +226 -0
- data/lib/tmail/vendor/rchardet-1.3/lib/rchardet/langthaimodel.rb +201 -0
- data/lib/tmail/vendor/rchardet-1.3/lib/rchardet/latin1prober.rb +147 -0
- data/lib/tmail/vendor/rchardet-1.3/lib/rchardet/mbcharsetprober.rb +89 -0
- data/lib/tmail/vendor/rchardet-1.3/lib/rchardet/mbcsgroupprober.rb +47 -0
- data/lib/tmail/vendor/rchardet-1.3/lib/rchardet/mbcssm.rb +542 -0
- data/lib/tmail/vendor/rchardet-1.3/lib/rchardet/sbcharsetprober.rb +124 -0
- data/lib/tmail/vendor/rchardet-1.3/lib/rchardet/sbcsgroupprober.rb +58 -0
- data/lib/tmail/vendor/rchardet-1.3/lib/rchardet/sjisprober.rb +88 -0
- data/lib/tmail/vendor/rchardet-1.3/lib/rchardet/universaldetector.rb +166 -0
- data/lib/tmail/vendor/rchardet-1.3/lib/rchardet/utf8prober.rb +87 -0
- data/lib/tmail/version.rb +1 -1
- data/setup.rb +2 -2
- data/test/fixtures/apple_unquoted_content_type +44 -0
- data/test/fixtures/inline_attachment.txt +2095 -0
- data/test/fixtures/iso_8859_1_email_without_encoding_and_message_id.txt +16 -0
- data/test/fixtures/mailbox.zip +0 -0
- data/test/fixtures/marked_as_iso_8859_1_but_it_is_utf_8.txt +33 -0
- data/test/fixtures/marked_as_utf_8_but_it_is_iso_8859_1.txt +56 -0
- data/test/fixtures/raw_email_bad_time +62 -0
- data/test/fixtures/raw_email_double_at_in_header +14 -0
- data/test/fixtures/raw_email_only_attachment +17 -0
- data/test/fixtures/raw_email_string_in_date_field +17 -0
- data/test/fixtures/raw_email_trailing_dot +21 -0
- data/test/fixtures/raw_email_with_quoted_attachment_filename +60 -0
- data/test/fixtures/raw_email_with_wrong_splitted_multibyte_encoded_word_subject +15 -0
- data/test/fixtures/the_only_part_is_a_word_document.txt +425 -0
- data/test/fixtures/unquoted_filename_in_attachment +177 -0
- data/test/test_address.rb +114 -92
- data/test/test_attachments.rb +84 -1
- data/test/test_encode.rb +54 -0
- data/test/test_header.rb +60 -2
- data/test/test_mail.rb +22 -15
- data/test/test_mbox.rb +12 -3
- data/test/test_port.rb +13 -9
- data/test/test_quote.rb +9 -0
- data/tmail.gemspec +34 -0
- metadata +68 -167
- data/MANIFEST +0 -191
- data/log/BugTrackingLog.txt +0 -1231
- data/log/Changelog.txt +0 -534
- data/log/Fixme.txt +0 -6
- data/log/Testlog.txt +0 -2340
- data/log/Todo.txt +0 -30
- data/log/fixme.rdoc +0 -6
- data/meta/MANIFEST +0 -128
- data/meta/VERSION +0 -1
- data/meta/project.yaml +0 -30
- data/meta/unixname +0 -1
- data/sample/bench_base64.rb +0 -48
- data/sample/data/multipart +0 -23
- data/sample/data/normal +0 -29
- data/sample/data/sendtest +0 -5
- data/sample/data/simple +0 -14
- data/sample/data/test +0 -27
- data/sample/extract-attachements.rb +0 -33
- data/sample/from-check.rb +0 -26
- data/sample/multipart.rb +0 -26
- data/sample/parse-bench.rb +0 -68
- data/sample/parse-test.rb +0 -19
- data/sample/sendmail.rb +0 -94
- data/site/contributing/index.html +0 -183
- data/site/css/clean.css +0 -27
- data/site/css/layout.css +0 -31
- data/site/css/style.css +0 -60
- data/site/download/index.html +0 -61
- 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 +0 -270
- data/site/js/jquery.js +0 -31
- data/site/log/Changelog.xsl +0 -33
- data/site/log/changelog.xml +0 -1677
- data/site/outdated/BUGS +0 -3
- data/site/outdated/DEPENDS +0 -1
- data/site/outdated/Incompatibilities +0 -89
- data/site/outdated/Incompatibilities.ja +0 -102
- data/site/outdated/NEWS +0 -9
- data/site/outdated/README.ja +0 -73
- data/site/outdated/doc.ja/address.html +0 -275
- data/site/outdated/doc.ja/basics.html +0 -405
- data/site/outdated/doc.ja/config.html +0 -49
- data/site/outdated/doc.ja/details.html +0 -146
- data/site/outdated/doc.ja/index.html +0 -39
- data/site/outdated/doc.ja/mail.html +0 -793
- data/site/outdated/doc.ja/mailbox.html +0 -265
- data/site/outdated/doc.ja/port.html +0 -95
- data/site/outdated/doc.ja/tmail.html +0 -58
- data/site/outdated/doc.ja/usage.html +0 -202
- data/site/outdated/rdd/address.rrd.m +0 -229
- data/site/outdated/rdd/basics.rd.m +0 -275
- data/site/outdated/rdd/config.rrd.m +0 -26
- data/site/outdated/rdd/details.rd.m +0 -117
- data/site/outdated/rdd/index.rhtml.m +0 -54
- data/site/outdated/rdd/mail.rrd.m +0 -701
- data/site/outdated/rdd/mailbox.rrd.m +0 -228
- data/site/outdated/rdd/port.rrd.m +0 -69
- data/site/outdated/rdd/tmail.rrd.m +0 -33
- data/site/outdated/rdd/usage.rd.m +0 -247
- data/site/quickstart/index.html +0 -69
- data/site/quickstart/quickstart.html +0 -52
- data/site/quickstart/usage.html +0 -193
- data/site/reference/address.html +0 -247
- data/site/reference/config.html +0 -30
- data/site/reference/index.html +0 -101
- data/site/reference/mail.html +0 -726
- data/site/reference/mailbox.html +0 -245
- data/site/reference/port.html +0 -75
- data/site/reference/tmail.html +0 -35
- data/work/script/make +0 -26
- data/work/script/rdoc +0 -39
- data/work/script/setup +0 -1616
- data/work/script/test +0 -30
@@ -1,228 +0,0 @@
|
|
1
|
-
= Mailbox Classes
|
2
|
-
|
3
|
-
== class TMail::MhMailbox
|
4
|
-
|
5
|
-
j
|
6
|
-
MH 形式のメールボックスを隠蔽するクラス。
|
7
|
-
e
|
8
|
-
The class to handle MH mailboxes.
|
9
|
-
.
|
10
|
-
|
11
|
-
=== Class Methods
|
12
|
-
|
13
|
-
: new(dirname) -> TMail::MhMailbox
|
14
|
-
dirname: String
|
15
|
-
|
16
|
-
j
|
17
|
-
MhMailbox オブジェクトを生成します。
|
18
|
-
dirname は MH メールボックスとして使うディレクトリ名です。
|
19
|
-
すでに作成ずみでなければいけません。
|
20
|
-
e
|
21
|
-
creates new MhMailbox object.
|
22
|
-
DIRNAME must be valid MH mailbox directory.
|
23
|
-
.
|
24
|
-
|
25
|
-
=== Instance Methods
|
26
|
-
|
27
|
-
: each_port {|port| .... }
|
28
|
-
: each {|port| .... }
|
29
|
-
port: TMail::FilePort
|
30
|
-
|
31
|
-
j
|
32
|
-
メールボックスのメールに対して古いメールから順番に繰り返します。
|
33
|
-
e
|
34
|
-
iterates for each mail in the mailbox,
|
35
|
-
in assendant order (older mail first).
|
36
|
-
.
|
37
|
-
|
38
|
-
: reverse_each_port {|port| .... }
|
39
|
-
: reverse_each {|port| .... }
|
40
|
-
port: TMail::FilePort
|
41
|
-
|
42
|
-
j
|
43
|
-
ディレクトリ中のメールに対して新しいメールから順番に繰り返します。
|
44
|
-
e
|
45
|
-
iterates for each mail in the mailbox,
|
46
|
-
in descendant order (newer mail first).
|
47
|
-
.
|
48
|
-
|
49
|
-
: last_atime -> Time
|
50
|
-
: last_atime=(time)
|
51
|
-
time: Time
|
52
|
-
|
53
|
-
j
|
54
|
-
最後に each_new_port/each_port/reverse_each_port を呼び出した時間。
|
55
|
-
e
|
56
|
-
The time which last each_new_port/each_port/reverse_each_port is called.
|
57
|
-
.
|
58
|
-
|
59
|
-
: each_new_port(time = last_atime()) {|port| .... }
|
60
|
-
time: Time
|
61
|
-
port: TMail::FilePort
|
62
|
-
|
63
|
-
j
|
64
|
-
新着メールのみに対してくりかえします。
|
65
|
-
引数 time が与えられたときはその時刻以降に更新されたメールを新着とみなします。
|
66
|
-
与えられなかった時は前回の each_mail, reverse_each_mail, each_new_port の後に
|
67
|
-
更新されたメールを新着とみなします。
|
68
|
-
e
|
69
|
-
iterates for each mails in mailbox, which are newer than TIME.
|
70
|
-
.
|
71
|
-
|
72
|
-
: new_port -> TMail::FilePort
|
73
|
-
j
|
74
|
-
新しいメールに対応するファイルを作成し、
|
75
|
-
対応する TMail::Port オブジェクトを返す。
|
76
|
-
e
|
77
|
-
creates a new file in the mailbox and returns its port.
|
78
|
-
.
|
79
|
-
|
80
|
-
: close
|
81
|
-
j
|
82
|
-
なにもしません。
|
83
|
-
e
|
84
|
-
does nothing.
|
85
|
-
.
|
86
|
-
|
87
|
-
== class TMail::UNIXMbox
|
88
|
-
|
89
|
-
j
|
90
|
-
UNIX mbox を扱うクラス。現在の実装では、生成時に MH 形式に変換し、
|
91
|
-
明示的な close 呼び出しか GC のタイミングでファイルに書き戻します。
|
92
|
-
e
|
93
|
-
The class to handle UNIX mbox.
|
94
|
-
Current implementation creates temporary MH mbox.
|
95
|
-
.
|
96
|
-
|
97
|
-
=== Class Methods
|
98
|
-
|
99
|
-
: new(filename) -> TMail::UNIXMbox
|
100
|
-
filename: String
|
101
|
-
|
102
|
-
j
|
103
|
-
新しい TMail::UNIXMbox オブジェクトを生成します。
|
104
|
-
filename は UNIX mbox ファイル名です。
|
105
|
-
e
|
106
|
-
creates new TMail::UNIMbox object.
|
107
|
-
FILENAME must be valid UNIX mbox file name.
|
108
|
-
.
|
109
|
-
|
110
|
-
=== Instance Methods
|
111
|
-
|
112
|
-
: each_port {|port| .... }
|
113
|
-
: each {|port| .... }
|
114
|
-
port: TMail::FilePort
|
115
|
-
|
116
|
-
j
|
117
|
-
メールボックスのメールに対して古いメールから順番に繰り返します。
|
118
|
-
e
|
119
|
-
iterates for each mail in the mailbox,
|
120
|
-
in assendant order (older mail first).
|
121
|
-
.
|
122
|
-
|
123
|
-
: reverse_each_port {|port| ... }
|
124
|
-
: reverse_each {|port| ... }
|
125
|
-
port: TMail::FilePort
|
126
|
-
|
127
|
-
j
|
128
|
-
ディレクトリ中のメールに対して新しいメールから順番に繰り返します。
|
129
|
-
e
|
130
|
-
iterates for each mail in the mailbox,
|
131
|
-
in descendant order (newer mail first).
|
132
|
-
.
|
133
|
-
|
134
|
-
: each_new_port(time = @last_loaded_time) {|port| .... }
|
135
|
-
time: Time
|
136
|
-
port: TMail::FilePort
|
137
|
-
|
138
|
-
j
|
139
|
-
新着メールのみに対してくりかえします。
|
140
|
-
引数 time が与えられたときはその時刻以降に更新されたメールを新着とみなします。
|
141
|
-
与えられなかった時は前回の each_mail, reverse_each_mail, each_new_port の後に
|
142
|
-
更新されたメールを新着とみなします。
|
143
|
-
e
|
144
|
-
iterates for each mails in mailbox, which are newer than TIME.
|
145
|
-
@last_loaded_time is updated when each_new_port/each_port is
|
146
|
-
called.
|
147
|
-
.
|
148
|
-
|
149
|
-
: new_port -> TMail::FilePort
|
150
|
-
j
|
151
|
-
新しいメールに対応するファイルを作成し、
|
152
|
-
対応する TMail::Port オブジェクトを返す。
|
153
|
-
e
|
154
|
-
creates a new file in the mailbox and returns its port.
|
155
|
-
.
|
156
|
-
|
157
|
-
: close
|
158
|
-
j
|
159
|
-
明示的にメールボックスを書き戻します。以後、このオブジェクトに
|
160
|
-
対してメール操作メソッドを呼び出すと全て例外になります。
|
161
|
-
e
|
162
|
-
forces an UNIXMbox to write back mails to real mbox file.
|
163
|
-
Once this method is called, any method calls causes to raise
|
164
|
-
IOError exception.
|
165
|
-
.
|
166
|
-
|
167
|
-
== class TMail::Maildir
|
168
|
-
|
169
|
-
j
|
170
|
-
qmail が使用するメールボックス maildir を隠蔽するクラス。
|
171
|
-
e
|
172
|
-
The class to handle "maildir" mailbox.
|
173
|
-
.
|
174
|
-
|
175
|
-
=== Class Methods
|
176
|
-
|
177
|
-
: new(dirname) -> TMail::Maildir
|
178
|
-
dirname: String
|
179
|
-
|
180
|
-
j
|
181
|
-
新しい TMail::Maildir オブジェクトを生成します。
|
182
|
-
dirname は maildir メールボックスとして使うディレクトリ名です。
|
183
|
-
ディレクトリはすでに作成ずみでなければいけません。
|
184
|
-
e
|
185
|
-
creates new TMail::Maildir object.
|
186
|
-
DIRNAME must be valid maildir.
|
187
|
-
.
|
188
|
-
|
189
|
-
=== Instance Methods
|
190
|
-
|
191
|
-
: each_port {|port| .... }
|
192
|
-
: each {|port| .... }
|
193
|
-
port: TMail::FilePort
|
194
|
-
|
195
|
-
j
|
196
|
-
メールボックスのメールに対して古いメールから順番に繰り返します。
|
197
|
-
e
|
198
|
-
iterates for each mail in the mailbox,
|
199
|
-
in assendant order (older mail first).
|
200
|
-
.
|
201
|
-
|
202
|
-
: reverse_each_port {|port| .... }
|
203
|
-
: reverse_each {|port| .... }
|
204
|
-
port: TMail::FilePort
|
205
|
-
|
206
|
-
j
|
207
|
-
ディレクトリ中のメールに対して新しいメールから順番に繰り返します。
|
208
|
-
e
|
209
|
-
iterates for each mail in the mailbox,
|
210
|
-
in descendant order (newer mail first).
|
211
|
-
.
|
212
|
-
|
213
|
-
: each_new_port {|port| .... }
|
214
|
-
port: TMail::FilePort
|
215
|
-
|
216
|
-
j
|
217
|
-
MAILDIR/new のメールに対して、cur に移動したのちに繰り返します。
|
218
|
-
e
|
219
|
-
iterates for each mails in MAILDIR/new.
|
220
|
-
.
|
221
|
-
|
222
|
-
: new_port -> TMail::FilePort
|
223
|
-
j
|
224
|
-
新しいメールに対応するファイルを作成し、
|
225
|
-
対応する Port オブジェクトを返す。
|
226
|
-
e
|
227
|
-
creates a new file in the mailbox and returns its port.
|
228
|
-
.
|
@@ -1,69 +0,0 @@
|
|
1
|
-
= Port Classes
|
2
|
-
|
3
|
-
== class TMail::Port
|
4
|
-
|
5
|
-
j
|
6
|
-
TMail::Port は TMail ライブラリでのファイルや文字列の抽象表現です。
|
7
|
-
メール一通分にあたるリソースを隠蔽します。
|
8
|
-
e
|
9
|
-
TMail::Port is the abstruction of mail source.
|
10
|
-
.
|
11
|
-
|
12
|
-
=== Instance Methods
|
13
|
-
|
14
|
-
: ropen -> IO
|
15
|
-
j
|
16
|
-
読みこみ用ストリームを返します。
|
17
|
-
e
|
18
|
-
opens stream for read.
|
19
|
-
.
|
20
|
-
|
21
|
-
: wopen -> IO
|
22
|
-
j
|
23
|
-
書きこみ用ストリームを返します。
|
24
|
-
e
|
25
|
-
opens stream for write.
|
26
|
-
.
|
27
|
-
|
28
|
-
: aopen -> IO
|
29
|
-
j
|
30
|
-
追加書きこみ用ストリームを返します。
|
31
|
-
e
|
32
|
-
opens stream for adding.
|
33
|
-
.
|
34
|
-
|
35
|
-
== class TMail::FilePort < TMail::Port
|
36
|
-
|
37
|
-
=== Class Methods
|
38
|
-
|
39
|
-
: new(filename) -> TMail::FilePort
|
40
|
-
filename: String
|
41
|
-
|
42
|
-
j
|
43
|
-
FilePort オブジェクトを生成します。
|
44
|
-
filename はメール一通をおさめたファイル名でなければいけません。
|
45
|
-
e
|
46
|
-
creates new TMail::FilePort object.
|
47
|
-
.
|
48
|
-
|
49
|
-
: filename -> String
|
50
|
-
j
|
51
|
-
このポートが隠蔽しているファイル名を返します。
|
52
|
-
e
|
53
|
-
returns file name which this port is wrapping.
|
54
|
-
.
|
55
|
-
|
56
|
-
== class TMail::StringPort < TMail::Port
|
57
|
-
|
58
|
-
=== Class Methods
|
59
|
-
|
60
|
-
: new(src = '') -> TMail::StringPort
|
61
|
-
src: String
|
62
|
-
|
63
|
-
j
|
64
|
-
StringPort オブジェクトを生成します。
|
65
|
-
string はメール一通分の文字列でなければいけません。
|
66
|
-
e
|
67
|
-
creates new TMail::StringPort object from
|
68
|
-
mail source string.
|
69
|
-
.
|
@@ -1,33 +0,0 @@
|
|
1
|
-
= module TMail
|
2
|
-
|
3
|
-
== Module Functions
|
4
|
-
|
5
|
-
: new_boundary -> String
|
6
|
-
j
|
7
|
-
新しいバウンダリを作成して返します。
|
8
|
-
e
|
9
|
-
creates new MIME multipart mail boundary.
|
10
|
-
.
|
11
|
-
|
12
|
-
: new_message_id(fqdn = Socket.gethostname) -> String
|
13
|
-
fqdn: String
|
14
|
-
|
15
|
-
j
|
16
|
-
新しいメッセージ ID を作成して返します。
|
17
|
-
引数 fqdn が省略された場合はローカルホストの名前を使います。
|
18
|
-
一方 fqdn を指定する場合はダイヤルアップであるなどの事情により
|
19
|
-
ホストの名前を変える必要があるのだとみなし、それに '.tmail' を
|
20
|
-
つけたドメインを使用します。これは「本物の」ドメインで作成される
|
21
|
-
メッセージ ID との重複を避けるためです。
|
22
|
-
e
|
23
|
-
creates new message ID.
|
24
|
-
.
|
25
|
-
|
26
|
-
: message_id?(str) -> true | false
|
27
|
-
str: String
|
28
|
-
|
29
|
-
j
|
30
|
-
str がメッセージ ID を含むとき真。
|
31
|
-
e
|
32
|
-
returns true if STR includes message ID string.
|
33
|
-
.
|
@@ -1,247 +0,0 @@
|
|
1
|
-
j
|
2
|
-
= TMail の使い方
|
3
|
-
e
|
4
|
-
= TMail Usage
|
5
|
-
.
|
6
|
-
|
7
|
-
j
|
8
|
-
== TMail の概要
|
9
|
-
e
|
10
|
-
== Abstruction
|
11
|
-
.
|
12
|
-
|
13
|
-
j
|
14
|
-
TMail は電子メールを扱うための総合ライブラリです。メールとメール
|
15
|
-
ボックスのハンドリングを隠蔽します。初期の目的がメーラの作成だった
|
16
|
-
ため、主な使い方としては「メールから情報を得る」「新しいメールを作成する」
|
17
|
-
の二種類が想定されており、クライアント側の処理に強くなっています。
|
18
|
-
e
|
19
|
-
TMail is 90% RFC compatible mail library. By using TMail, You can
|
20
|
-
get data from internet mail (e-mail) and write data to mail,
|
21
|
-
without knowning standard details.
|
22
|
-
.
|
23
|
-
|
24
|
-
j
|
25
|
-
== メールから情報を得る
|
26
|
-
|
27
|
-
これは一番最初に実装された部分であり、TMail が最も得意とする処理でも
|
28
|
-
あります。
|
29
|
-
e
|
30
|
-
== Getting information from e-mail
|
31
|
-
.
|
32
|
-
|
33
|
-
j
|
34
|
-
=== TMail::Mail クラス
|
35
|
-
e
|
36
|
-
=== class TMail::Mail
|
37
|
-
.
|
38
|
-
|
39
|
-
j
|
40
|
-
TMail::Mail クラスはメール一通を隠蔽するオブジェクトです。まずどうにか
|
41
|
-
してこのオブジェクトを作らないといけません。このオブジェクトを作る方法は
|
42
|
-
三通りあります。
|
43
|
-
|
44
|
-
(1) 文字列からつくる
|
45
|
-
(2) ファイル(名)からつくる
|
46
|
-
(3) Port からつくる
|
47
|
-
|
48
|
-
文字列、ファイルはそれぞれメール一通分だけを含んでいなければいけません。
|
49
|
-
そのうえで以下のように作成します。
|
50
|
-
e
|
51
|
-
At first you must create TMail::Mail object. There's three ways
|
52
|
-
to create Mail object. First one is "creating from string", second
|
53
|
-
way is "creating from file (name)". Examples are below:
|
54
|
-
.
|
55
|
-
--
|
56
|
-
require 'tmail'
|
57
|
-
mail = TMail::Mail.parse(string) # from String
|
58
|
-
mail = TMail::Mail.load(filename) # from file
|
59
|
-
--
|
60
|
-
j
|
61
|
-
ここには特に問題はないと思います。
|
62
|
-
.
|
63
|
-
|
64
|
-
j
|
65
|
-
=== Port と Loader
|
66
|
-
e
|
67
|
-
=== Port and Loader
|
68
|
-
.
|
69
|
-
|
70
|
-
j
|
71
|
-
Port というのは TMail におけるメールソースの抽象表現です。たとえば
|
72
|
-
上述した文字列やファイル名もメールソースで、TMail::Mail#parse や load は
|
73
|
-
文字列やファイルを一度 Port でラップしたうえで Mail オブジェクトを作成
|
74
|
-
しています。この Port でラップすることで文字列、ファイル
|
75
|
-
(将来的には IMAP プロトコルも?) の違いを隠蔽しています。
|
76
|
-
|
77
|
-
ただし、Port をユーザが直接作ることはあまりないでしょう。主にユーザが
|
78
|
-
Port をさわることになるのは、メールボックスのラッパーである Loader を
|
79
|
-
使うときです。たとえば MH メールボックスの中にあるメールを順番に処理する
|
80
|
-
ためには以下のようにします。
|
81
|
-
e
|
82
|
-
The third way to get TMail::Mail object is using the "port".
|
83
|
-
"port" is the abstruction of mail sources, e.g. strings or file names.
|
84
|
-
You can get ports by using mail loaders (TMail::*Loader classes).
|
85
|
-
Here's simple example:
|
86
|
-
.
|
87
|
-
--
|
88
|
-
require 'tmail'
|
89
|
-
|
90
|
-
loader = TMail::MhLoader.new( '/home/aamine/Mail/inbox' )
|
91
|
-
loader.each_port do |port|
|
92
|
-
mail = TMail::Mail.new(port)
|
93
|
-
# ....
|
94
|
-
end
|
95
|
-
--
|
96
|
-
|
97
|
-
j
|
98
|
-
=== TMail::Mail オブジェクトから情報を得る
|
99
|
-
e
|
100
|
-
=== Accessing EMail Attributes via TMail::Mail object
|
101
|
-
.
|
102
|
-
|
103
|
-
j
|
104
|
-
以上のような手段で TMail::Mail オブジェクトを作ったら、あとはそのメソッドを
|
105
|
-
呼ぶだけでたいていのことはできます。たとえば To: アドレスを取るなら
|
106
|
-
e
|
107
|
-
Now you can get any data from e-mail, by calling methods of
|
108
|
-
TMail::Mail object. For example, to get To: addresses...
|
109
|
-
.
|
110
|
-
--
|
111
|
-
require 'tmail'
|
112
|
-
mail = TMail::Mail.parse( 'To: Minero Aoki <aamine@loveruby.net>' )
|
113
|
-
p mail.to # => ["aamine@loveruby.net"]
|
114
|
-
--
|
115
|
-
j
|
116
|
-
Subject: ならば
|
117
|
-
e
|
118
|
-
to get subject,
|
119
|
-
.
|
120
|
-
--
|
121
|
-
p mail.subject
|
122
|
-
--
|
123
|
-
j
|
124
|
-
メール本体ならば
|
125
|
-
e
|
126
|
-
to get mail body,
|
127
|
-
--
|
128
|
-
p mail.body
|
129
|
-
--
|
130
|
-
j
|
131
|
-
というように、とても簡単です。
|
132
|
-
.
|
133
|
-
|
134
|
-
j
|
135
|
-
詳しくは TMail::Mail クラスのリファレンスを、
|
136
|
-
より実用的な例としては sample/from-check.rb を見てください。
|
137
|
-
e
|
138
|
-
For more TMail::Mail class details, see reference manual.
|
139
|
-
For more examples, see sample/from-check.rb.
|
140
|
-
.
|
141
|
-
|
142
|
-
j
|
143
|
-
=== MIME マルチパートメール
|
144
|
-
|
145
|
-
MIME マルチパートメールにも対応しています。マルチパートのときは
|
146
|
-
Mail#multipart? が真になり、#parts に TMail::Mail オブジェクトの
|
147
|
-
配列が入ります。
|
148
|
-
e
|
149
|
-
=== MIME multipart mail
|
150
|
-
|
151
|
-
TMail also supports MIME multipart mails.
|
152
|
-
If mail is multipart mail, Mail#multipart? returns true,
|
153
|
-
and Mail#parts contains an array of parts (TMail::Mail object).
|
154
|
-
.
|
155
|
-
--
|
156
|
-
require 'tmail'
|
157
|
-
mail = TMail::Mail.parse( multipart_mail_string )
|
158
|
-
if mail.multipart? then
|
159
|
-
mail.parts.each do |m|
|
160
|
-
puts m.main_type
|
161
|
-
end
|
162
|
-
end
|
163
|
-
--
|
164
|
-
j
|
165
|
-
より具体的な例としては sample/multipart.rb を見てください。
|
166
|
-
e
|
167
|
-
For examples, see sample/multipart.rb.
|
168
|
-
.
|
169
|
-
|
170
|
-
j
|
171
|
-
=== TMail がやらないこと
|
172
|
-
|
173
|
-
TMail は、ヘッダは自動でデコード・エンコードしますが、本体(本文)は
|
174
|
-
一切変更しません。ただし近い将来には Base64 のデコードは自動でやる
|
175
|
-
かもしれません。
|
176
|
-
e
|
177
|
-
=== What TMail is NOT
|
178
|
-
|
179
|
-
TMail does not touch mail body. Does not decode body,
|
180
|
-
does not encode body, does not change line terminator.
|
181
|
-
(I want to support Base64 auto-decoding although.)
|
182
|
-
.
|
183
|
-
|
184
|
-
|
185
|
-
j
|
186
|
-
== 新しいメールを作成する
|
187
|
-
|
188
|
-
こちらも TMail::Mail クラスが主体です。とにかくメールを作ればいい
|
189
|
-
場合は空文字列から、メールボックスに作りたい場合はローダを経由して
|
190
|
-
ポートを作成してそこから、メールオブジェクトを作ります。
|
191
|
-
e
|
192
|
-
== Creating New Mail
|
193
|
-
.
|
194
|
-
--
|
195
|
-
require 'tmail'
|
196
|
-
|
197
|
-
# Example 1: create mail on only memory
|
198
|
-
mail = TMail::Mail.new
|
199
|
-
|
200
|
-
# Example 2: create mail on mailbox (on disk)
|
201
|
-
loader = TMail::MhLoader.new('/home/aamine/Mail/drafts')
|
202
|
-
mail = TMail::Mail.new( loader.new_port )
|
203
|
-
--
|
204
|
-
j
|
205
|
-
作ったら、中身を入れます。
|
206
|
-
e
|
207
|
-
then fill headers and body.
|
208
|
-
.
|
209
|
-
--
|
210
|
-
mail.to = 'test@loveruby.net'
|
211
|
-
mail.from = 'Minero Aoki <aamine@loveruby.net>'
|
212
|
-
mail.subject = 'test mail'
|
213
|
-
mail.date = Time.now
|
214
|
-
mail.mime_version = '1.0'
|
215
|
-
mail.set_content_type 'text', 'plain', {'charset'=>'iso-2022-jp'}
|
216
|
-
mail.body = 'This is test mail.'
|
217
|
-
--
|
218
|
-
j
|
219
|
-
どのヘッダをセットしたらいいかなど細かい部分ももうちょっとカバー
|
220
|
-
したいのですが、まだ実装していません。とりあえず上記のヘッダは
|
221
|
-
セットしたほうがよいでしょう。また返信・転送の場合はまたそれぞれ
|
222
|
-
規約があります。これもカバーしたいのですがまだ実装していません。
|
223
|
-
バージョン 1.0 に期待してください。
|
224
|
-
|
225
|
-
最後に文字列化します。
|
226
|
-
e
|
227
|
-
At last, convert mail object to string.
|
228
|
-
.
|
229
|
-
--
|
230
|
-
str = mail.encoded
|
231
|
-
--
|
232
|
-
j
|
233
|
-
作成元ポートに書き戻すなら、かわりに以下のようにします。
|
234
|
-
e
|
235
|
-
If you want to write mails against files directly
|
236
|
-
(without intermediate string), use Mail#write_back.
|
237
|
-
.
|
238
|
-
--
|
239
|
-
mail.write_back
|
240
|
-
--
|
241
|
-
j
|
242
|
-
write_back は中間文字列を介することなくファイルに直接書きこみます。
|
243
|
-
|
244
|
-
より実用的な例としては sample/sendmail.rb を見てください。
|
245
|
-
e
|
246
|
-
For more examples, see sample/sendmail.rb.
|
247
|
-
.
|