tmail 1.2.1 → 1.2.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (126) hide show
  1. data/CHANGES +50 -5
  2. data/MANIFEST +188 -0
  3. data/NOTES +1 -1
  4. data/README +10 -4
  5. data/Rakefile +1 -10
  6. data/lib/tmail.rb +1 -0
  7. data/lib/tmail/Makefile +0 -1
  8. data/lib/tmail/address.rb +190 -17
  9. data/lib/tmail/attachments.rb +1 -1
  10. data/lib/tmail/base64.rb +4 -10
  11. data/lib/tmail/compat.rb +8 -6
  12. data/lib/tmail/config.rb +2 -6
  13. data/lib/tmail/core_extensions.rb +14 -18
  14. data/lib/tmail/encode.rb +47 -12
  15. data/lib/tmail/header.rb +7 -10
  16. data/lib/tmail/index.rb +2 -1
  17. data/lib/tmail/interface.rb +14 -12
  18. data/lib/tmail/loader.rb +2 -0
  19. data/lib/tmail/mail.rb +83 -24
  20. data/lib/tmail/mailbox.rb +70 -10
  21. data/lib/tmail/main.rb +2 -0
  22. data/lib/tmail/mbox.rb +2 -0
  23. data/lib/tmail/net.rb +16 -15
  24. data/lib/tmail/obsolete.rb +7 -12
  25. data/lib/tmail/parser.rb +1 -0
  26. data/lib/tmail/require_arch.rb +2 -0
  27. data/lib/tmail/scanner.rb +2 -1
  28. data/lib/tmail/scanner_r.rb +11 -10
  29. data/lib/tmail/utils.rb +83 -26
  30. data/lib/tmail/version.rb +3 -2
  31. data/log/BugTrackingLog.txt +1208 -0
  32. data/log/{ChangeLog.txt → Changelog-0.txt} +36 -0
  33. data/log/Changelog.txt +534 -0
  34. data/log/Testlog.txt +114 -0
  35. data/log/Todo.txt +0 -2
  36. data/meta/VERSION +1 -0
  37. data/meta/project.yaml +8 -5
  38. data/meta/unixname +1 -0
  39. data/setup.rb +1481 -0
  40. data/site/contributing/index.html +183 -0
  41. data/site/css/clean.css +27 -0
  42. data/site/css/layout.css +31 -0
  43. data/site/css/style.css +60 -0
  44. data/site/download/index.html +61 -0
  45. data/site/img/envelope.jpg +0 -0
  46. data/site/img/mailman.gif +0 -0
  47. data/site/img/stamp-sm.jpg +0 -0
  48. data/site/img/stamp.jpg +0 -0
  49. data/site/img/stampborder.jpg +0 -0
  50. data/site/img/tfire.jpg +0 -0
  51. data/site/img/tmail.png +0 -0
  52. data/site/index.html +270 -0
  53. data/site/js/jquery.js +31 -0
  54. data/site/log/Changelog.xsl +33 -0
  55. data/site/log/changelog.xml +1677 -0
  56. data/site/outdated/BUGS +3 -0
  57. data/site/outdated/DEPENDS +1 -0
  58. data/site/outdated/Incompatibilities +89 -0
  59. data/site/outdated/Incompatibilities.ja +102 -0
  60. data/site/outdated/NEWS +9 -0
  61. data/site/outdated/README.ja +73 -0
  62. data/site/outdated/doc.ja/address.html +275 -0
  63. data/site/outdated/doc.ja/basics.html +405 -0
  64. data/site/outdated/doc.ja/config.html +49 -0
  65. data/site/outdated/doc.ja/details.html +146 -0
  66. data/site/outdated/doc.ja/index.html +39 -0
  67. data/site/outdated/doc.ja/mail.html +793 -0
  68. data/site/outdated/doc.ja/mailbox.html +265 -0
  69. data/site/outdated/doc.ja/port.html +95 -0
  70. data/site/outdated/doc.ja/tmail.html +58 -0
  71. data/site/outdated/doc.ja/usage.html +202 -0
  72. data/site/outdated/rdd/address.rrd.m +229 -0
  73. data/site/outdated/rdd/basics.rd.m +275 -0
  74. data/site/outdated/rdd/config.rrd.m +26 -0
  75. data/site/outdated/rdd/details.rd.m +117 -0
  76. data/site/outdated/rdd/index.rhtml.m +54 -0
  77. data/site/outdated/rdd/mail.rrd.m +701 -0
  78. data/site/outdated/rdd/mailbox.rrd.m +228 -0
  79. data/site/outdated/rdd/port.rrd.m +69 -0
  80. data/site/outdated/rdd/tmail.rrd.m +33 -0
  81. data/site/outdated/rdd/usage.rd.m +247 -0
  82. data/site/quickstart/index.html +69 -0
  83. data/site/quickstart/quickstart.html +52 -0
  84. data/site/quickstart/usage.html +193 -0
  85. data/site/reference/address.html +247 -0
  86. data/site/reference/config.html +30 -0
  87. data/site/reference/index.html +101 -0
  88. data/site/reference/mail.html +726 -0
  89. data/site/reference/mailbox.html +245 -0
  90. data/site/reference/port.html +75 -0
  91. data/site/reference/tmail.html +35 -0
  92. data/test/fixtures/mailbox +405 -4
  93. data/test/fixtures/raw_email_multiple_from +30 -0
  94. data/test/kcode.rb +2 -2
  95. data/test/temp_test_one.rb +46 -0
  96. data/test/test_address.rb +77 -38
  97. data/test/test_encode.rb +0 -2
  98. data/test/test_header.rb +47 -24
  99. data/test/test_mail.rb +52 -9
  100. data/test/test_mbox.rb +28 -0
  101. data/test/test_port.rb +33 -27
  102. data/test/test_quote.rb +35 -8
  103. data/work/script/make +26 -0
  104. data/work/script/rdoc +39 -0
  105. data/{script → work/script}/setup +0 -0
  106. data/work/script/test +30 -0
  107. metadata +249 -184
  108. data/log/History.txt +0 -40
  109. data/meta/config.yaml +0 -8
  110. data/meta/icli.yaml +0 -16
  111. data/meta/tmail.roll +0 -3
  112. data/script/changelog +0 -19
  113. data/script/clobber/distclean +0 -8
  114. data/script/clobber/package +0 -10
  115. data/script/compile +0 -32
  116. data/script/pack/gem +0 -93
  117. data/script/pack/tgz +0 -41
  118. data/script/pack/zip +0 -41
  119. data/script/prepare +0 -15
  120. data/script/publish +0 -51
  121. data/script/rdoc +0 -42
  122. data/script/release +0 -10
  123. data/script/stamp +0 -33
  124. data/script/stats +0 -138
  125. data/script/tag +0 -25
  126. data/script/test +0 -36
@@ -0,0 +1,228 @@
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
+ .
@@ -0,0 +1,69 @@
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
+ .
@@ -0,0 +1,33 @@
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
+ .
@@ -0,0 +1,247 @@
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
+ .