OSDN Git Service

Add extract/enclose attachment files function.(Supprt RFC 2231 extensions)
authormitsu <mitsu@zakato.itline.jp>
Mon, 1 Mar 2010 13:59:13 +0000 (22:59 +0900)
committermitsu <mitsu@zakato.itline.jp>
Mon, 1 Mar 2010 13:59:13 +0000 (22:59 +0900)
Add ssl/tls protocol support.(Send/Receive Gmail account)
Correct permissions of related files.

59 files changed:
CHANGELOG
CHANGELOG.jp
MailManual.jp/00000001.eml
MailManual.jp/00000002.eml
MailManual.jp/00000003.eml
MailManual.jp/00000004.eml
MailManual.jp/00000005.eml
MailManual.jp/00000006.eml
MailManual.jp/00000007.eml
MailManual.jp/00000008.eml
MailManual.jp/00000009.eml
MailManual.jp/00000010.eml
MailManual.jp/00000011.eml
MailManual.jp/00000012.eml
MailManual.jp/00000013.eml
MailManual.jp/00000014.eml
MailManual.jp/00000015.eml
MailManual.jp/00000016.eml
MailManual.jp/00000017.eml
MailManual.jp/00000018.eml
MailManual.jp/00000019.eml
MailManual.jp/00000020.eml
MailManual.jp/00000021.eml
MailManual.jp/00000022.eml
MailManual.jp/00000023.eml [new file with mode: 0644]
MailManual/00000001.eml
MailManual/00000002.eml
MailManual/00000003.eml
MailManual/00000004.eml
MailManual/00000005.eml
MailManual/00000006.eml
MailManual/00000007.eml
MailManual/00000008.eml
MailManual/00000009.eml
MailManual/00000010.eml
MailManual/00000011.eml
MailManual/00000012.eml
MailManual/00000013.eml
MailManual/00000014.eml
MailManual/00000015.eml
MailManual/00000016.eml
MailManual/00000017.eml
MailManual/00000018.eml
MailManual/00000019.eml
MailManual/00000020.eml
MailManual/00000021.eml
MailManual/00000022.eml
MailManual/00000023.eml [new file with mode: 0644]
README
README.jp
mave-tokyo-utf8.pmo
mave.config.sample
mave.folderconfig.master
mave.keyconfig
mave_address.sample
mave_base.rb
mave_controller.rb
mave_curses.rb
mave_models.rb

index b710e2f..4204be3 100644 (file)
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,5 +1,10 @@
 Changelog of Textbase Mailer 'Mave'
 
+Version 2.96
+       * Add extract/enclose attachment files function.(Supprt RFC 2231 extensions)
+       * Add ssl/tls protocol support.(Send/Receive Gmail account)
+       * Correct permissions of related files.
+
 Version 2.95
        * Add send mail function.
        * Add address book function.
index faeb697..787eb3e 100644 (file)
@@ -1,5 +1,10 @@
 テキストベースメーラ「Mave」の更新履歴
 
+・Version 2.96
+       * 添付ファイルの抽出、付加機能を追加(RFC 2231 拡張表現をサポート)
+       * SSL/TLS 通信に対応(Gmail を送受信可能)
+       * 関連ファイルのパーミッションを適正化
+
 ・Version 2.95
        * メールの送信機能を追加
        * アドレス帳機能を追加
index 9eb6c33..3bdf765 100644 (file)
@@ -1,12 +1,13 @@
 From: =?ISO-2022-JP?B?GyRCMytILzxUGyhC?= <furutanian@gmail.com>\r
 To: =?ISO-2022-JP?B?GyRCJWElJCV0JWYhPCU2GyhC?= <mave_user@example.com>\r
 Subject: =?ISO-2022-JP?B?GyRCJUYlLSU5JUglWSE8JTklYSE8JWkhVhsoQk1hdmUbJEIhVyROO0gkJEp9GyhC?=\r
-Date: Thu, 11 Feb 2010 19:55:03 +0900\r
-X-Mailer: Mave version 2.95 (zakato.itline.jp 2.6.31.5-127.fc12.x86_64 GNU/Linux)\r
-Message-ID: <1265885703.855146.8eaa550b@mave.zakato.itline.jp>\r
+Date: Mon, 01 Mar 2010 22:05:41 +0900\r
+X-Mailer: Mave version 2.96 (zakato.itline.jp 2.6.31.12-174.2.19.fc12.x86_64 GNU/Linux)\r
+Message-ID: <1267448741.755325.8eaa550b@mave.zakato.itline.jp>\r
 MIME-Version: 1.0\r
 Content-Type: text/plain; charset=ISO-2022-JP\r
 Content-Transfer-Encoding: 7bit\r
-X-Mave-Reference: \r
-X-Mave-Attachment: \r
+X-Mave-Extract-Targets: \r
+X-Mave-Attachments: \r
+X-Mave-Relations: \r
 \r
index 3724cf3..7caee35 100644 (file)
@@ -1,16 +1,17 @@
 From: =?ISO-2022-JP?B?GyRCMytILzxUGyhC?= <furutanian@gmail.com>\r
 To: =?ISO-2022-JP?B?GyRCJWElJCV0JWYhPCU2GyhC?= <mave_user@example.com>\r
 Subject: =?ISO-2022-JP?B?GyRCSSxNVyRKJVElQyUxITwlOBsoQg==?=\r
-Date: Thu, 11 Feb 2010 19:55:03 +0900\r
-X-Mailer: Mave version 2.95 (zakato.itline.jp 2.6.31.5-127.fc12.x86_64 GNU/Linux)\r
-Message-ID: <1265885703.855739.8eaa550b@mave.zakato.itline.jp>\r
-In-Reply-To: <1265885703.855146.8eaa550b@mave.zakato.itline.jp>\r
-References:  <1265885703.855146.8eaa550b@mave.zakato.itline.jp>\r
+Date: Mon, 01 Mar 2010 22:05:41 +0900\r
+X-Mailer: Mave version 2.96 (zakato.itline.jp 2.6.31.12-174.2.19.fc12.x86_64 GNU/Linux)\r
+Message-ID: <1267448741.755955.8eaa550b@mave.zakato.itline.jp>\r
+In-Reply-To: <1267448741.755325.8eaa550b@mave.zakato.itline.jp>\r
+References: <1267448741.755325.8eaa550b@mave.zakato.itline.jp>\r
 MIME-Version: 1.0\r
 Content-Type: text/plain; charset=ISO-2022-JP\r
 Content-Transfer-Encoding: 7bit\r
-X-Mave-Reference: \r
-X-Mave-Attachment: \r
+X-Mave-Extract-Targets: \r
+X-Mave-Attachments: \r
+X-Mave-Relations: \r
 \r
 \r
   Ruby\e$B!"\e(Bcurses \e$B$*$h$S\e(B gdbm \e$B%i%$%V%i%j\e(B\r
index 80eab78..db597ef 100644 (file)
@@ -1,16 +1,17 @@
 From: =?ISO-2022-JP?B?GyRCMytILzxUGyhC?= <furutanian@gmail.com>\r
 To: =?ISO-2022-JP?B?GyRCJWElJCV0JWYhPCU2GyhC?= <mave_user@example.com>\r
 Subject: =?ISO-2022-JP?B?MS4gGyRCJSIhPCUrJSQlViROPGhGQCRIRTgzKxsoQg==?=\r
-Date: Thu, 11 Feb 2010 19:55:03 +0900\r
-X-Mailer: Mave version 2.95 (zakato.itline.jp 2.6.31.5-127.fc12.x86_64 GNU/Linux)\r
-Message-ID: <1265885703.856275.8eaa550b@mave.zakato.itline.jp>\r
-In-Reply-To: <1265885703.855146.8eaa550b@mave.zakato.itline.jp>\r
-References:  <1265885703.855146.8eaa550b@mave.zakato.itline.jp>\r
+Date: Mon, 01 Mar 2010 22:05:41 +0900\r
+X-Mailer: Mave version 2.96 (zakato.itline.jp 2.6.31.12-174.2.19.fc12.x86_64 GNU/Linux)\r
+Message-ID: <1267448741.756497.8eaa550b@mave.zakato.itline.jp>\r
+In-Reply-To: <1267448741.755325.8eaa550b@mave.zakato.itline.jp>\r
+References: <1267448741.755325.8eaa550b@mave.zakato.itline.jp>\r
 MIME-Version: 1.0\r
 Content-Type: text/plain; charset=ISO-2022-JP\r
 Content-Transfer-Encoding: 7bit\r
-X-Mave-Reference: \r
-X-Mave-Attachment: \r
+X-Mave-Extract-Targets: \r
+X-Mave-Attachments: \r
+X-Mave-Relations: \r
 \r
 \r
   http://sourceforge.jp/projects/mave/downloads/44582/mave.tgz/ \e$B$K%"%/%;%9$9$k!#\e(B\r
index bf7f0eb..8ab87ec 100644 (file)
@@ -1,16 +1,17 @@
 From: =?ISO-2022-JP?B?GyRCMytILzxUGyhC?= <furutanian@gmail.com>\r
 To: =?ISO-2022-JP?B?GyRCJWElJCV0JWYhPCU2GyhC?= <mave_user@example.com>\r
 Subject: =?ISO-2022-JP?B?Mi4gGyRCJWYhPCU2QF9EahsoQg==?=\r
-Date: Thu, 11 Feb 2010 19:55:03 +0900\r
-X-Mailer: Mave version 2.95 (zakato.itline.jp 2.6.31.5-127.fc12.x86_64 GNU/Linux)\r
-Message-ID: <1265885703.856831.8eaa550b@mave.zakato.itline.jp>\r
-In-Reply-To: <1265885703.855146.8eaa550b@mave.zakato.itline.jp>\r
-References:  <1265885703.855146.8eaa550b@mave.zakato.itline.jp>\r
+Date: Mon, 01 Mar 2010 22:05:41 +0900\r
+X-Mailer: Mave version 2.96 (zakato.itline.jp 2.6.31.12-174.2.19.fc12.x86_64 GNU/Linux)\r
+Message-ID: <1267448741.757044.8eaa550b@mave.zakato.itline.jp>\r
+In-Reply-To: <1267448741.755325.8eaa550b@mave.zakato.itline.jp>\r
+References: <1267448741.755325.8eaa550b@mave.zakato.itline.jp>\r
 MIME-Version: 1.0\r
 Content-Type: text/plain; charset=ISO-2022-JP\r
 Content-Transfer-Encoding: 7bit\r
-X-Mave-Reference: \r
-X-Mave-Attachment: \r
+X-Mave-Extract-Targets: \r
+X-Mave-Attachments: \r
+X-Mave-Relations: \r
 \r
 \r
   $ cp mave.config.sample mave.config\r
@@ -32,3 +33,14 @@ X-Mave-Attachment:
     @configs[:VIEWER_TYPE] = ['system'|'forkexec']\r
     @configs[:VIEWER] = '/usr/bin/viewer %s'\r
       \e$B@_Dj$O%(%G%#%?$HF1MM$G$9!#\e(B\r
+\r
+    \e$B%U%!%$%k%^%M!<%8%c$N4D6-$r@_Dj$7$F$/$@$5$$!#\e(B\r
+\r
+    @configs[:FILE_MANAGER_TYPE] = ['system'|'forkexec']\r
+    @configs[:FILE_MANAGER] = '/usr/bin/nautilus %s >/dev/null 2>&1'\r
+      \e$BE:IU%U%!%$%k$NJ]B8@h$J$I!"%U%!%$%kA`:n$N$?$a%G%#%l%/%H%j$r3+$/:]$KMxMQ$5$l$^$9!#\e(B\r
+\r
+    \e$B%U%!%$%k<1JL%3%^%s%I$r@_Dj$7$F$/$@$5$$!#\e(B\r
+\r
+    @configs[:FILE_IDENTIFIER] = '/usr/bin/file -b -i %s 2>/dev/null'\r
+      \e$BE:IU%U%!%$%k$rIU2C$9$k>l9g$J$I!"%U%!%$%k%?%$%W$N<1JL$N:]$KMxMQ$5$l$^$9!#\e(B\r
index 0648a76..1390157 100644 (file)
@@ -1,16 +1,17 @@
 From: =?ISO-2022-JP?B?GyRCMytILzxUGyhC?= <furutanian@gmail.com>\r
 To: =?ISO-2022-JP?B?GyRCJWElJCV0JWYhPCU2GyhC?= <mave_user@example.com>\r
 Subject: =?ISO-2022-JP?B?My4gGyRCJWEhPCVrJHJDX0BRJDkkayVHJSMlbCUvJUglaiROOm5ALhsoQg==?=\r
-Date: Thu, 11 Feb 2010 19:55:03 +0900\r
-X-Mailer: Mave version 2.95 (zakato.itline.jp 2.6.31.5-127.fc12.x86_64 GNU/Linux)\r
-Message-ID: <1265885703.857644.8eaa550b@mave.zakato.itline.jp>\r
-In-Reply-To: <1265885703.855146.8eaa550b@mave.zakato.itline.jp>\r
-References:  <1265885703.855146.8eaa550b@mave.zakato.itline.jp>\r
+Date: Mon, 01 Mar 2010 22:05:41 +0900\r
+X-Mailer: Mave version 2.96 (zakato.itline.jp 2.6.31.12-174.2.19.fc12.x86_64 GNU/Linux)\r
+Message-ID: <1267448741.758096.8eaa550b@mave.zakato.itline.jp>\r
+In-Reply-To: <1267448741.755325.8eaa550b@mave.zakato.itline.jp>\r
+References: <1267448741.755325.8eaa550b@mave.zakato.itline.jp>\r
 MIME-Version: 1.0\r
 Content-Type: text/plain; charset=ISO-2022-JP\r
 Content-Transfer-Encoding: 7bit\r
-X-Mave-Reference: \r
-X-Mave-Attachment: \r
+X-Mave-Extract-Targets: \r
+X-Mave-Attachments: \r
+X-Mave-Relations: \r
 \r
 \r
   $ mkdir ~/mave.mails\r
index 734395a..000d3e8 100644 (file)
@@ -1,16 +1,17 @@
 From: =?ISO-2022-JP?B?GyRCMytILzxUGyhC?= <furutanian@gmail.com>\r
 To: =?ISO-2022-JP?B?GyRCJWElJCV0JWYhPCU2GyhC?= <mave_user@example.com>\r
 Subject: =?ISO-2022-JP?B?NC4gTWF2ZSAbJEIkTjxCOVQbKEI=?=\r
-Date: Thu, 11 Feb 2010 19:55:03 +0900\r
-X-Mailer: Mave version 2.95 (zakato.itline.jp 2.6.31.5-127.fc12.x86_64 GNU/Linux)\r
-Message-ID: <1265885703.858272.8eaa550b@mave.zakato.itline.jp>\r
-In-Reply-To: <1265885703.855146.8eaa550b@mave.zakato.itline.jp>\r
-References:  <1265885703.855146.8eaa550b@mave.zakato.itline.jp>\r
+Date: Mon, 01 Mar 2010 22:05:41 +0900\r
+X-Mailer: Mave version 2.96 (zakato.itline.jp 2.6.31.12-174.2.19.fc12.x86_64 GNU/Linux)\r
+Message-ID: <1267448741.758707.8eaa550b@mave.zakato.itline.jp>\r
+In-Reply-To: <1267448741.755325.8eaa550b@mave.zakato.itline.jp>\r
+References: <1267448741.755325.8eaa550b@mave.zakato.itline.jp>\r
 MIME-Version: 1.0\r
 Content-Type: text/plain; charset=ISO-2022-JP\r
 Content-Transfer-Encoding: 7bit\r
-X-Mave-Reference: \r
-X-Mave-Attachment: \r
+X-Mave-Extract-Targets: \r
+X-Mave-Attachments: \r
+X-Mave-Relations: \r
 \r
 \r
   $ ./mave\r
index ca14bbd..8674d7b 100644 (file)
@@ -1,16 +1,17 @@
 From: =?ISO-2022-JP?B?GyRCMytILzxUGyhC?= <furutanian@gmail.com>\r
 To: =?ISO-2022-JP?B?GyRCJWElJCV0JWYhPCU2GyhC?= <mave_user@example.com>\r
 Subject: =?ISO-2022-JP?B?NS4gGyRCJWEhPCVrJE48aEZAGyhC?=\r
-Date: Thu, 11 Feb 2010 19:55:03 +0900\r
-X-Mailer: Mave version 2.95 (zakato.itline.jp 2.6.31.5-127.fc12.x86_64 GNU/Linux)\r
-Message-ID: <1265885703.858773.8eaa550b@mave.zakato.itline.jp>\r
-In-Reply-To: <1265885703.855146.8eaa550b@mave.zakato.itline.jp>\r
-References:  <1265885703.855146.8eaa550b@mave.zakato.itline.jp>\r
+Date: Mon, 01 Mar 2010 22:05:41 +0900\r
+X-Mailer: Mave version 2.96 (zakato.itline.jp 2.6.31.12-174.2.19.fc12.x86_64 GNU/Linux)\r
+Message-ID: <1267448741.759256.8eaa550b@mave.zakato.itline.jp>\r
+In-Reply-To: <1267448741.755325.8eaa550b@mave.zakato.itline.jp>\r
+References: <1267448741.755325.8eaa550b@mave.zakato.itline.jp>\r
 MIME-Version: 1.0\r
 Content-Type: text/plain; charset=ISO-2022-JP\r
 Content-Transfer-Encoding: 7bit\r
-X-Mave-Reference: \r
-X-Mave-Attachment: \r
+X-Mave-Extract-Targets: \r
+X-Mave-Attachments: \r
+X-Mave-Relations: \r
 \r
 \r
   Ctrl + x\e$B!"\e(Bp \e$B$H!"%-!<$r2!$9$H!"%5!<%P$+$i%a!<%k$,<hF@$5$l$^$9!#\e(B\r
index 505b266..af6f858 100644 (file)
@@ -1,16 +1,17 @@
 From: =?ISO-2022-JP?B?GyRCMytILzxUGyhC?= <furutanian@gmail.com>\r
 To: =?ISO-2022-JP?B?GyRCJWElJCV0JWYhPCU2GyhC?= <mave_user@example.com>\r
 Subject: =?ISO-2022-JP?B?Ni4gGyRCJWEhPCVrJHIxXE13JDkkaxsoQg==?=\r
-Date: Thu, 11 Feb 2010 19:55:03 +0900\r
-X-Mailer: Mave version 2.95 (zakato.itline.jp 2.6.31.5-127.fc12.x86_64 GNU/Linux)\r
-Message-ID: <1265885703.859417.8eaa550b@mave.zakato.itline.jp>\r
-In-Reply-To: <1265885703.855146.8eaa550b@mave.zakato.itline.jp>\r
-References:  <1265885703.855146.8eaa550b@mave.zakato.itline.jp>\r
+Date: Mon, 01 Mar 2010 22:05:41 +0900\r
+X-Mailer: Mave version 2.96 (zakato.itline.jp 2.6.31.12-174.2.19.fc12.x86_64 GNU/Linux)\r
+Message-ID: <1267448741.759884.8eaa550b@mave.zakato.itline.jp>\r
+In-Reply-To: <1267448741.755325.8eaa550b@mave.zakato.itline.jp>\r
+References: <1267448741.755325.8eaa550b@mave.zakato.itline.jp>\r
 MIME-Version: 1.0\r
 Content-Type: text/plain; charset=ISO-2022-JP\r
 Content-Transfer-Encoding: 7bit\r
-X-Mave-Reference: \r
-X-Mave-Attachment: \r
+X-Mave-Extract-Targets: \r
+X-Mave-Attachments: \r
+X-Mave-Relations: \r
 \r
 \r
   Vi \e$B%(%G%#%?$N$h$&$K!"$=$l$>$l!"\e(Bh, j, k, l \e$B%-!<$,!":8!"2<!">e!"1&$K3d$jEv$F$i$l$F$$$^$9!#\e(B\r
index 5eb00c1..3783223 100644 (file)
@@ -1,16 +1,17 @@
 From: =?ISO-2022-JP?B?GyRCMytILzxUGyhC?= <furutanian@gmail.com>\r
 To: =?ISO-2022-JP?B?GyRCJWElJCV0JWYhPCU2GyhC?= <mave_user@example.com>\r
 Subject: =?ISO-2022-JP?B?Ny4gGyRCJSQlcyUvJWolYSVzJT8lazghOncbKEI=?=\r
-Date: Thu, 11 Feb 2010 19:55:03 +0900\r
-X-Mailer: Mave version 2.95 (zakato.itline.jp 2.6.31.5-127.fc12.x86_64 GNU/Linux)\r
-Message-ID: <1265885703.860369.8eaa550b@mave.zakato.itline.jp>\r
-In-Reply-To: <1265885703.855146.8eaa550b@mave.zakato.itline.jp>\r
-References:  <1265885703.855146.8eaa550b@mave.zakato.itline.jp>\r
+Date: Mon, 01 Mar 2010 22:05:41 +0900\r
+X-Mailer: Mave version 2.96 (zakato.itline.jp 2.6.31.12-174.2.19.fc12.x86_64 GNU/Linux)\r
+Message-ID: <1267448741.760705.8eaa550b@mave.zakato.itline.jp>\r
+In-Reply-To: <1267448741.755325.8eaa550b@mave.zakato.itline.jp>\r
+References: <1267448741.755325.8eaa550b@mave.zakato.itline.jp>\r
 MIME-Version: 1.0\r
 Content-Type: text/plain; charset=ISO-2022-JP\r
 Content-Transfer-Encoding: 7bit\r
-X-Mave-Reference: \r
-X-Mave-Attachment: \r
+X-Mave-Extract-Targets: \r
+X-Mave-Attachments: \r
+X-Mave-Relations: \r
 \r
 \r
   \e$B%a!<%k0lMw!"$^$?$O!"K\J8I=<($G!"\e(BCtrl + s \e$B$r2!$9$H!"%$%s%/%j%a%s%?%k8!:w%@%$%"%m%0$,3+$-$^$9!#\e(B\r
index 3059d10..8a90e98 100644 (file)
@@ -1,16 +1,17 @@
 From: =?ISO-2022-JP?B?GyRCMytILzxUGyhC?= <furutanian@gmail.com>\r
 To: =?ISO-2022-JP?B?GyRCJWElJCV0JWYhPCU2GyhC?= <mave_user@example.com>\r
 Subject: =?ISO-2022-JP?B?OC4gGyRCJWEhPCVrJHI6bkAuGyhCLxskQkpUPTgkOSRrGyhC?=\r
-Date: Thu, 11 Feb 2010 19:55:03 +0900\r
-X-Mailer: Mave version 2.95 (zakato.itline.jp 2.6.31.5-127.fc12.x86_64 GNU/Linux)\r
-Message-ID: <1265885703.861036.8eaa550b@mave.zakato.itline.jp>\r
-In-Reply-To: <1265885703.855146.8eaa550b@mave.zakato.itline.jp>\r
-References:  <1265885703.855146.8eaa550b@mave.zakato.itline.jp>\r
+Date: Mon, 01 Mar 2010 22:05:41 +0900\r
+X-Mailer: Mave version 2.96 (zakato.itline.jp 2.6.31.12-174.2.19.fc12.x86_64 GNU/Linux)\r
+Message-ID: <1267448741.761336.8eaa550b@mave.zakato.itline.jp>\r
+In-Reply-To: <1267448741.755325.8eaa550b@mave.zakato.itline.jp>\r
+References: <1267448741.755325.8eaa550b@mave.zakato.itline.jp>\r
 MIME-Version: 1.0\r
 Content-Type: text/plain; charset=ISO-2022-JP\r
 Content-Transfer-Encoding: 7bit\r
-X-Mave-Reference: \r
-X-Mave-Attachment: \r
+X-Mave-Extract-Targets: \r
+X-Mave-Attachments: \r
+X-Mave-Relations: \r
 \r
 \r
   Ctrl + x\e$B!"\e(Bn \e$B$H!"%-!<$r2!$9$H!"?75,%a!<%k$r:n@.$7$^$9!#\e(B\r
@@ -25,7 +26,7 @@ X-Mave-Attachment:
 \r
   \e$BDj5A$NNc\e(B)\r
     entries << { :MAIL => 'x-tanaka@google.com',                    :ID => '\e$BEDCf\e(B',                                  }\r
-    entries << { :MAIL => 'y-kato@yahoo.co.jp',                     :ID => '\e$B2CF#\e(B@private',  :SEND => '\e$B$+$H$A$c$s\e(B'   }\r
+    entries << { :MAIL => 'y-kato@yahoo.co.jp',                     :ID => '\e$B2CF#\e(B@private',  :SEND => '\e$B$+$H$A$c$s\e(B',  }\r
 \r
   \e$BJT=8;~\e(B)                      \e$BAw?.;~\e(B)\r
     To: --\e$BEDCf\e(B--,           =>   To: \e$BEDCf\e(B \e$BMM\e(B <x-tanaka@google.com>, \e$B$+$H$A$c$s\e(B <y-kato@yahoo.co.jp>\r
index 23deb81..e50111a 100644 (file)
@@ -1,16 +1,17 @@
 From: =?ISO-2022-JP?B?GyRCMytILzxUGyhC?= <furutanian@gmail.com>\r
 To: =?ISO-2022-JP?B?GyRCJWElJCV0JWYhPCU2GyhC?= <mave_user@example.com>\r
 Subject: =?ISO-2022-JP?B?OS4gGyRCJVUlKSVrJUA1IUc9GyhC?=\r
-Date: Thu, 11 Feb 2010 19:55:03 +0900\r
-X-Mailer: Mave version 2.95 (zakato.itline.jp 2.6.31.5-127.fc12.x86_64 GNU/Linux)\r
-Message-ID: <1265885703.861922.8eaa550b@mave.zakato.itline.jp>\r
-In-Reply-To: <1265885703.855146.8eaa550b@mave.zakato.itline.jp>\r
-References:  <1265885703.855146.8eaa550b@mave.zakato.itline.jp>\r
+Date: Mon, 01 Mar 2010 22:05:41 +0900\r
+X-Mailer: Mave version 2.96 (zakato.itline.jp 2.6.31.12-174.2.19.fc12.x86_64 GNU/Linux)\r
+Message-ID: <1267448741.762150.8eaa550b@mave.zakato.itline.jp>\r
+In-Reply-To: <1267448741.755325.8eaa550b@mave.zakato.itline.jp>\r
+References: <1267448741.755325.8eaa550b@mave.zakato.itline.jp>\r
 MIME-Version: 1.0\r
 Content-Type: text/plain; charset=ISO-2022-JP\r
 Content-Transfer-Encoding: 7bit\r
-X-Mave-Reference: \r
-X-Mave-Attachment: \r
+X-Mave-Extract-Targets: \r
+X-Mave-Attachments: \r
+X-Mave-Relations: \r
 \r
 \r
   \e$B%a!<%k0lMw%S%e!<$G!":8\e(B(h)\e$B$r2!$9$H!"%U%)%k%@0lMw%S%e!<$K0\9T$7$^$9!#\e(B\r
@@ -27,7 +28,7 @@ X-Mave-Attachment:
   . s) \e$BAw?.:Q$_\e(B (0/25)\r
   . t) \e$B%4%_H"\e(B (0/18)\r
   ^ ^  ^^^^^^  ^^^^\r
-  | |    |     \e$BL$FI?t\e(B / \e$B%a!<%kAm?t\e(B \e$B"(8=>u!"@53N$G$O$J$$\e(B\r
+  | |    |     \e$BL$FI?t\e(B / \e$B%a!<%kAm?t\e(B\r
   | |    +-\e$B%U%)%k%@L>\e(B\r
   | +-\e$B%7%g!<%H%+%C%H%-!<\e(B\r
   +-\e$B?7Ce%a!<%k$"$j\e(B(x)\r
index bc540bd..a34cccd 100644 (file)
@@ -1,16 +1,17 @@
 From: =?ISO-2022-JP?B?GyRCMytILzxUGyhC?= <furutanian@gmail.com>\r
 To: =?ISO-2022-JP?B?GyRCJWElJCV0JWYhPCU2GyhC?= <mave_user@example.com>\r
 Subject: =?ISO-2022-JP?B?MTAuIBskQiVhITwlayROMFxGMCEiJTMlVCE8ISI6bz18GyhC?=\r
-Date: Thu, 11 Feb 2010 19:55:03 +0900\r
-X-Mailer: Mave version 2.95 (zakato.itline.jp 2.6.31.5-127.fc12.x86_64 GNU/Linux)\r
-Message-ID: <1265885703.862972.8eaa550b@mave.zakato.itline.jp>\r
-In-Reply-To: <1265885703.855146.8eaa550b@mave.zakato.itline.jp>\r
-References:  <1265885703.855146.8eaa550b@mave.zakato.itline.jp>\r
+Date: Mon, 01 Mar 2010 22:05:41 +0900\r
+X-Mailer: Mave version 2.96 (zakato.itline.jp 2.6.31.12-174.2.19.fc12.x86_64 GNU/Linux)\r
+Message-ID: <1267448741.763156.8eaa550b@mave.zakato.itline.jp>\r
+In-Reply-To: <1267448741.755325.8eaa550b@mave.zakato.itline.jp>\r
+References: <1267448741.755325.8eaa550b@mave.zakato.itline.jp>\r
 MIME-Version: 1.0\r
 Content-Type: text/plain; charset=ISO-2022-JP\r
 Content-Transfer-Encoding: 7bit\r
-X-Mave-Reference: \r
-X-Mave-Attachment: \r
+X-Mave-Extract-Targets: \r
+X-Mave-Attachments: \r
+X-Mave-Relations: \r
 \r
 \r
   \e$B%a!<%k0lMw%S%e!<$G!"\e(BCtrl + x\e$B!"\e(Bm \e$B$H!"%-!<$r2!$9$H!"JL$N%U%)%k%@$K%a!<%k$r0\F0$G$-$^$9!#\e(B\r
index 6e10657..203965d 100644 (file)
@@ -1,16 +1,17 @@
 From: =?ISO-2022-JP?B?GyRCMytILzxUGyhC?= <furutanian@gmail.com>\r
 To: =?ISO-2022-JP?B?GyRCJWElJCV0JWYhPCU2GyhC?= <mave_user@example.com>\r
 Subject: =?ISO-2022-JP?B?MTEuIBskQiVhITwlayROQXc/LhsoQg==?=\r
-Date: Thu, 11 Feb 2010 19:55:03 +0900\r
-X-Mailer: Mave version 2.95 (zakato.itline.jp 2.6.31.5-127.fc12.x86_64 GNU/Linux)\r
-Message-ID: <1265885703.863674.8eaa550b@mave.zakato.itline.jp>\r
-In-Reply-To: <1265885703.855146.8eaa550b@mave.zakato.itline.jp>\r
-References:  <1265885703.855146.8eaa550b@mave.zakato.itline.jp>\r
+Date: Mon, 01 Mar 2010 22:05:41 +0900\r
+X-Mailer: Mave version 2.96 (zakato.itline.jp 2.6.31.12-174.2.19.fc12.x86_64 GNU/Linux)\r
+Message-ID: <1267448741.763809.8eaa550b@mave.zakato.itline.jp>\r
+In-Reply-To: <1267448741.755325.8eaa550b@mave.zakato.itline.jp>\r
+References: <1267448741.755325.8eaa550b@mave.zakato.itline.jp>\r
 MIME-Version: 1.0\r
 Content-Type: text/plain; charset=ISO-2022-JP\r
 Content-Transfer-Encoding: 7bit\r
-X-Mave-Reference: \r
-X-Mave-Attachment: \r
+X-Mave-Extract-Targets: \r
+X-Mave-Attachments: \r
+X-Mave-Relations: \r
 \r
 \r
   Ctrl + x\e$B!"\e(Bs \e$B$H!"%-!<$r2!$9$H!VAw?.H"!W%U%)%k%@$K$"$k%a!<%k$,Aw?.$5$l$^$9!#\e(B\r
index 5aa4113..93da2cb 100644 (file)
@@ -1,16 +1,17 @@
 From: =?ISO-2022-JP?B?GyRCMytILzxUGyhC?= <furutanian@gmail.com>\r
 To: =?ISO-2022-JP?B?GyRCJWElJCV0JWYhPCU2GyhC?= <mave_user@example.com>\r
 Subject: =?ISO-2022-JP?B?MTIuIBskQiVhITwlayROJSQlcyVdITwlSBsoQg==?=\r
-Date: Thu, 11 Feb 2010 19:55:03 +0900\r
-X-Mailer: Mave version 2.95 (zakato.itline.jp 2.6.31.5-127.fc12.x86_64 GNU/Linux)\r
-Message-ID: <1265885703.864585.8eaa550b@mave.zakato.itline.jp>\r
-In-Reply-To: <1265885703.855146.8eaa550b@mave.zakato.itline.jp>\r
-References:  <1265885703.855146.8eaa550b@mave.zakato.itline.jp>\r
+Date: Mon, 01 Mar 2010 22:05:41 +0900\r
+X-Mailer: Mave version 2.96 (zakato.itline.jp 2.6.31.12-174.2.19.fc12.x86_64 GNU/Linux)\r
+Message-ID: <1267448741.764445.8eaa550b@mave.zakato.itline.jp>\r
+In-Reply-To: <1267448741.755325.8eaa550b@mave.zakato.itline.jp>\r
+References: <1267448741.755325.8eaa550b@mave.zakato.itline.jp>\r
 MIME-Version: 1.0\r
 Content-Type: text/plain; charset=ISO-2022-JP\r
 Content-Transfer-Encoding: 7bit\r
-X-Mave-Reference: \r
-X-Mave-Attachment: \r
+X-Mave-Extract-Targets: \r
+X-Mave-Attachments: \r
+X-Mave-Relations: \r
 \r
 \r
   Ctrl + x\e$B!"\e(BShift + i \e$B$H!"%-!<$r2!$9$H!"%"%+%&%s%HKh$N@_Dj$K$7$?$,$C$F!"%a!<%k$,%$%s%]!<%H$5$l$^$9!#\e(B\r
index 4486e1a..fad158f 100644 (file)
@@ -1,16 +1,17 @@
 From: =?ISO-2022-JP?B?GyRCMytILzxUGyhC?= <furutanian@gmail.com>\r
 To: =?ISO-2022-JP?B?GyRCJWElJCV0JWYhPCU2GyhC?= <mave_user@example.com>\r
 Subject: =?ISO-2022-JP?B?MTMuIBskQiVhITwlayROJV4hPCUvGyhC?=\r
-Date: Thu, 11 Feb 2010 19:55:03 +0900\r
-X-Mailer: Mave version 2.95 (zakato.itline.jp 2.6.31.5-127.fc12.x86_64 GNU/Linux)\r
-Message-ID: <1265885703.870117.8eaa550b@mave.zakato.itline.jp>\r
-In-Reply-To: <1265885703.855146.8eaa550b@mave.zakato.itline.jp>\r
-References:  <1265885703.855146.8eaa550b@mave.zakato.itline.jp>\r
+Date: Mon, 01 Mar 2010 22:05:41 +0900\r
+X-Mailer: Mave version 2.96 (zakato.itline.jp 2.6.31.12-174.2.19.fc12.x86_64 GNU/Linux)\r
+Message-ID: <1267448741.765222.8eaa550b@mave.zakato.itline.jp>\r
+In-Reply-To: <1267448741.755325.8eaa550b@mave.zakato.itline.jp>\r
+References: <1267448741.755325.8eaa550b@mave.zakato.itline.jp>\r
 MIME-Version: 1.0\r
 Content-Type: text/plain; charset=ISO-2022-JP\r
 Content-Transfer-Encoding: 7bit\r
-X-Mave-Reference: \r
-X-Mave-Attachment: \r
+X-Mave-Extract-Targets: \r
+X-Mave-Attachments: \r
+X-Mave-Relations: \r
 \r
 \r
   \e$B%a!<%k0lMw%S%e!<$G!"\e(Bm \e$B%-!<$r2!$9$H!"%a!<%k$r%^!<%/$G$-$^$9!#\e(B\r
index 12ecde5..af5ee3f 100644 (file)
@@ -1,16 +1,17 @@
 From: =?ISO-2022-JP?B?GyRCMytILzxUGyhC?= <furutanian@gmail.com>\r
 To: =?ISO-2022-JP?B?GyRCJWElJCV0JWYhPCU2GyhC?= <mave_user@example.com>\r
 Subject: =?ISO-2022-JP?B?MTQuIBskQiU5JWwlQyVJQWA6bhsoQg==?=\r
-Date: Thu, 11 Feb 2010 19:55:03 +0900\r
-X-Mailer: Mave version 2.95 (zakato.itline.jp 2.6.31.5-127.fc12.x86_64 GNU/Linux)\r
-Message-ID: <1265885703.870931.8eaa550b@mave.zakato.itline.jp>\r
-In-Reply-To: <1265885703.855146.8eaa550b@mave.zakato.itline.jp>\r
-References:  <1265885703.855146.8eaa550b@mave.zakato.itline.jp>\r
+Date: Mon, 01 Mar 2010 22:05:41 +0900\r
+X-Mailer: Mave version 2.96 (zakato.itline.jp 2.6.31.12-174.2.19.fc12.x86_64 GNU/Linux)\r
+Message-ID: <1267448741.765910.8eaa550b@mave.zakato.itline.jp>\r
+In-Reply-To: <1267448741.755325.8eaa550b@mave.zakato.itline.jp>\r
+References: <1267448741.755325.8eaa550b@mave.zakato.itline.jp>\r
 MIME-Version: 1.0\r
 Content-Type: text/plain; charset=ISO-2022-JP\r
 Content-Transfer-Encoding: 7bit\r
-X-Mave-Reference: \r
-X-Mave-Attachment: \r
+X-Mave-Extract-Targets: \r
+X-Mave-Attachments: \r
+X-Mave-Relations: \r
 \r
 \r
   \e$B%a!<%k0lMw%S%e!<$G!"\e(BCtrl + x\e$B!"\e(BShift + j \e$B$H!"%-!<$r2!$9$H!"%a!<%k$r%9%l%C%I$+$i<h$j30$;$^$9!#\e(B\r
index 1eb8918..da6174f 100644 (file)
@@ -1,16 +1,17 @@
 From: =?ISO-2022-JP?B?GyRCMytILzxUGyhC?= <furutanian@gmail.com>\r
 To: =?ISO-2022-JP?B?GyRCJWElJCV0JWYhPCU2GyhC?= <mave_user@example.com>\r
 Subject: =?ISO-2022-JP?B?MTUuIBskQiUiJUklbCU5RCIkTjpuQC4bKEI=?=\r
-Date: Thu, 11 Feb 2010 19:55:03 +0900\r
-X-Mailer: Mave version 2.95 (zakato.itline.jp 2.6.31.5-127.fc12.x86_64 GNU/Linux)\r
-Message-ID: <1265885703.871511.8eaa550b@mave.zakato.itline.jp>\r
-In-Reply-To: <1265885703.855146.8eaa550b@mave.zakato.itline.jp>\r
-References:  <1265885703.855146.8eaa550b@mave.zakato.itline.jp>\r
+Date: Mon, 01 Mar 2010 22:05:41 +0900\r
+X-Mailer: Mave version 2.96 (zakato.itline.jp 2.6.31.12-174.2.19.fc12.x86_64 GNU/Linux)\r
+Message-ID: <1267448741.766549.8eaa550b@mave.zakato.itline.jp>\r
+In-Reply-To: <1267448741.755325.8eaa550b@mave.zakato.itline.jp>\r
+References: <1267448741.755325.8eaa550b@mave.zakato.itline.jp>\r
 MIME-Version: 1.0\r
 Content-Type: text/plain; charset=ISO-2022-JP\r
 Content-Transfer-Encoding: 7bit\r
-X-Mave-Reference: \r
-X-Mave-Attachment: \r
+X-Mave-Extract-Targets: \r
+X-Mave-Attachments: \r
+X-Mave-Relations: \r
 \r
 \r
   $ cp mave_address.sample mave_address\r
@@ -20,8 +21,8 @@ X-Mave-Attachment:
 \r
   \e$BNc\e(B)\r
     entries << { :MAIL => 'x-tanaka@google.com',                    :ID => '\e$BEDCf\e(B',                                  }\r
-    entries << { :MAIL => 'y-kato@yahoo.co.jp',                     :ID => '\e$B2CF#\e(B@private',  :SEND => '\e$B$+$H$A$c$s\e(B'   }\r
-    entries << { :MAIL => 'z-suzuki@abc.co.jp',                     :ID => '\e$BNkLZ\e(B@ABC',      :SEND => '\e$BNkLZ$5$s\e(B'     }\r
+    entries << { :MAIL => 'y-kato@yahoo.co.jp',                     :ID => '\e$B2CF#\e(B@private',  :SEND => '\e$B$+$H$A$c$s\e(B',  }\r
+    entries << { :MAIL => 'z-suzuki@abc.co.jp',                     :ID => '\e$BNkLZ\e(B@ABC',      :SEND => '\e$BNkLZ$5$s\e(B',    }\r
 \r
   \e$B%"%I%l%9D"%9%/%j%W%H$r<B9T$9$k$3$H$G!"%"%I%l%9D"\e(B DB \e$B$KEPO?$5$l$^$9!#\e(B\r
 \r
index 3fc02f5..4a4aa51 100644 (file)
@@ -1,16 +1,37 @@
 From: =?ISO-2022-JP?B?GyRCMytILzxUGyhC?= <furutanian@gmail.com>\r
 To: =?ISO-2022-JP?B?GyRCJWElJCV0JWYhPCU2GyhC?= <mave_user@example.com>\r
-Subject: =?ISO-2022-JP?B?MTYuIBskQj0qTjskOSRrGyhC?=\r
-Date: Thu, 11 Feb 2010 19:55:03 +0900\r
-X-Mailer: Mave version 2.95 (zakato.itline.jp 2.6.31.5-127.fc12.x86_64 GNU/Linux)\r
-Message-ID: <1265885703.872240.8eaa550b@mave.zakato.itline.jp>\r
-In-Reply-To: <1265885703.855146.8eaa550b@mave.zakato.itline.jp>\r
-References:  <1265885703.855146.8eaa550b@mave.zakato.itline.jp>\r
+Subject: =?ISO-2022-JP?B?MTYuIBskQkU6SVUlVSUhJSQlayROQWA6bhsoQg==?=\r
+Date: Mon, 01 Mar 2010 22:05:41 +0900\r
+X-Mailer: Mave version 2.96 (zakato.itline.jp 2.6.31.12-174.2.19.fc12.x86_64 GNU/Linux)\r
+Message-ID: <1267448741.767274.8eaa550b@mave.zakato.itline.jp>\r
+In-Reply-To: <1267448741.755325.8eaa550b@mave.zakato.itline.jp>\r
+References: <1267448741.755325.8eaa550b@mave.zakato.itline.jp>\r
 MIME-Version: 1.0\r
 Content-Type: text/plain; charset=ISO-2022-JP\r
 Content-Transfer-Encoding: 7bit\r
-X-Mave-Reference: \r
-X-Mave-Attachment: \r
+X-Mave-Extract-Targets: \r
+X-Mave-Attachments: \r
+X-Mave-Relations: \r
 \r
 \r
-  Ctrl + x\e$B!"\e(Bc \e$B$H!"%-!<$r2!$9$H!"\e(BMave \e$B$O=*N;$7$^$9!#\e(B\r
+  \e$B<u?.$7$?%a!<%k$NE:IU%U%!%$%k$r1\Mw$9$k!#\e(B\r
+\r
+    \e$B%a!<%k0lMw%S%e!<$G!"\e(BCtrl + x\e$B!"\e(Bx \e$B$H!"%-!<$r2!$9$H!"%a!<%kCf$N$9$Y$F$NE:IU%U%!%$%k$,!"4XO"%G%#%l%/%H%j$KE83+$5$l$^$9!#\e(B\r
+    \e$B4XO"%G%#%l%/%H%j$H$O!"%a!<%k$HBP$H$J$k%G%#%l%/%H%j$G!"G$0U$N%U%!%$%k$rJ]B8$7$F$*$1$^$9!#\e(B\r
+    \e$B4XO"%G%#%l%/%H%j$O!"%a!<%k0lMw%S%e!<$G!"\e(BESC\e$B!"\e(Bf \e$B$H!"%-!<$r2!$9$3$H$G!";XDj$N%U%!%$%k%^%M!<%8%c$K$F3+$/$3$H$,$G$-$^$9!#\e(B\r
+\r
+  \e$B<u?.$7$?%a!<%k$NE:IU%U%!%$%k$r=$@5$7$FJV?.$9$k!#\e(B\r
+\r
+    \e$B%a!<%k0lMw%S%e!<$G!"\e(BCtrl + x\e$B!"\e(Br \e$B$H!"%-!<$r2!$7!"JV?.%a!<%k$r:n@.$9$k$H!"\e(BX-Mave-Extract-Targets \e$B%X%C%@$,IU2C$5$l$F$$$^$9!#\e(B\r
+    \e$B$=$N$^$^!"%a!<%k$rJT=8$7$FJ]B8$9$k$H!"\e(BX-Mave-Extract-Targets \e$B%X%C%@$N2<$N5-:\$KBP1~$9$kE:IU%U%!%$%k$,!"JV?.%a!<%k$N4XO"%G%#%l%/%H%j$KE83+$5$l$^$9!#\e(B\r
+    \e$BJV?.%a!<%k$KBP$7$F!"\e(BESC\e$B!"\e(Bf \e$B$H!"%-!<$r2!$9$H!"4XO"%G%#%l%/%H%j$,3+$/$N$G!"I,MW$K1~$8$FE:IU%U%!%$%k$r=$@5$7$^$9!#\e(B\r
+    Ctrl + x\e$B!"\e(Be \e$B$H!"%-!<$r2!$7$FJV?.%a!<%k$rJT=8$7$^$9!#E83+$5$l$?E:IU%U%!%$%k$O!"\e(BX-Mave-Relations \e$B%X%C%@$N2<$K5-:\$5$l$F$$$^$9!#\e(B\r
+    \e$BJV?.%a!<%k$KE:IU$7$FJV?.$7$?$$>l9g!"\e(BX-Mave-Relations \e$B%X%C%@$N2<$+$i!"\e(BX-Mave-Attachments \e$B%X%C%@$N2<$K5-:\$r0\F0$7$^$9!#\e(B\r
+    \e$B$"$H$O!"DL>oDL$j!VAw?.H"!W%U%)%k%@$K0\F0$7!"\e(BCtrl + x\e$B!"\e(Bs \e$B$H!"%-!<$r2!$7$FAw?.$9$k$H!"E:IU$5$l$FAw?.$5$l$^$9!#\e(B\r
+\r
+  \e$B?75,%a!<%k$K!"?75,$KE:IU%U%!%$%k$rE:IU$7$FAw?.$9$k!#\e(B\r
+\r
+    \e$B%a!<%k0lMw%S%e!<$G!"\e(BCtrl + x\e$B!"\e(Bn \e$B$H!"%-!<$r2!$7$F?75,%a!<%k$r:n@.$9$k$H!"6u$N\e(B X-Mave-Relations \e$B%X%C%@$,IU2C$5$l$F$$$^$9!#\e(B\r
+       X-Mave-Relations \e$B%X%C%@$N2<$K!"?75,$KE:IU$9$kM=Dj$N%U%!%$%kL>$r5-:\$7$FJ]B8$9$k$H!"4XO"%G%#%l%/%H%jFb$K;XDj$N%U%!%$%kL>$N6u%U%!%$%k$,:n@.$5$l$^$9!#\e(B\r
+    \e$B?75,%a!<%k$KBP$7$F!"\e(BESC\e$B!"\e(Bf \e$B$H!"%-!<$r2!$9$H!"4XO"%G%#%l%/%H%j$,3+$/$N$G!"I,MW$K1~$8$F6u%U%!%$%k$rJT=8$7$^$9!#\e(B\r
+    \e$B$"$H$O!">e5-$HF1MM$K!"\e(BX-Mave-Relations \e$B%X%C%@$N2<$+$i!"\e(BX-Mave-Attachments \e$B%X%C%@$N2<$K5-:\$r0\F0$7!"Aw?.F0:n$r9T$$$^$9!#\e(B\r
index 5a03ab1..2044ce3 100644 (file)
@@ -1,14 +1,17 @@
 From: =?ISO-2022-JP?B?GyRCMytILzxUGyhC?= <furutanian@gmail.com>\r
 To: =?ISO-2022-JP?B?GyRCJWElJCV0JWYhPCU2GyhC?= <mave_user@example.com>\r
-Subject: =?ISO-2022-JP?B?GyRCJD0kbCRHJE8hIxsoQg==?=\r
-Date: Thu, 11 Feb 2010 19:55:03 +0900\r
-X-Mailer: Mave version 2.95 (zakato.itline.jp 2.6.31.5-127.fc12.x86_64 GNU/Linux)\r
-Message-ID: <1265885703.872723.8eaa550b@mave.zakato.itline.jp>\r
-In-Reply-To: <1265885703.855146.8eaa550b@mave.zakato.itline.jp>\r
-References:  <1265885703.855146.8eaa550b@mave.zakato.itline.jp>\r
+Subject: =?ISO-2022-JP?B?MTcuIBskQj0qTjskOSRrGyhC?=\r
+Date: Mon, 01 Mar 2010 22:05:41 +0900\r
+X-Mailer: Mave version 2.96 (zakato.itline.jp 2.6.31.12-174.2.19.fc12.x86_64 GNU/Linux)\r
+Message-ID: <1267448741.768191.8eaa550b@mave.zakato.itline.jp>\r
+In-Reply-To: <1267448741.755325.8eaa550b@mave.zakato.itline.jp>\r
+References: <1267448741.755325.8eaa550b@mave.zakato.itline.jp>\r
 MIME-Version: 1.0\r
 Content-Type: text/plain; charset=ISO-2022-JP\r
 Content-Transfer-Encoding: 7bit\r
-X-Mave-Reference: \r
-X-Mave-Attachment: \r
+X-Mave-Extract-Targets: \r
+X-Mave-Attachments: \r
+X-Mave-Relations: \r
 \r
+\r
+  Ctrl + x\e$B!"\e(Bc \e$B$H!"%-!<$r2!$9$H!"\e(BMave \e$B$O=*N;$7$^$9!#\e(B\r
index 97c8032..31834a7 100644 (file)
@@ -1,32 +1,15 @@
 From: =?ISO-2022-JP?B?GyRCMytILzxUGyhC?= <furutanian@gmail.com>\r
 To: =?ISO-2022-JP?B?GyRCJWElJCV0JWYhPCU2GyhC?= <mave_user@example.com>\r
-Subject: =?ISO-2022-JP?B?GyRCJWElYhsoQjo=?=\r
-Date: Thu, 11 Feb 2010 19:55:03 +0900\r
-X-Mailer: Mave version 2.95 (zakato.itline.jp 2.6.31.5-127.fc12.x86_64 GNU/Linux)\r
-Message-ID: <1265885703.873208.8eaa550b@mave.zakato.itline.jp>\r
-In-Reply-To: <1265885703.855146.8eaa550b@mave.zakato.itline.jp>\r
-References:  <1265885703.855146.8eaa550b@mave.zakato.itline.jp>\r
+Subject: =?ISO-2022-JP?B?GyRCJD0kbCRHJE8hIxsoQg==?=\r
+Date: Mon, 01 Mar 2010 22:05:41 +0900\r
+X-Mailer: Mave version 2.96 (zakato.itline.jp 2.6.31.12-174.2.19.fc12.x86_64 GNU/Linux)\r
+Message-ID: <1267448741.768703.8eaa550b@mave.zakato.itline.jp>\r
+In-Reply-To: <1267448741.755325.8eaa550b@mave.zakato.itline.jp>\r
+References: <1267448741.755325.8eaa550b@mave.zakato.itline.jp>\r
 MIME-Version: 1.0\r
 Content-Type: text/plain; charset=ISO-2022-JP\r
 Content-Transfer-Encoding: 7bit\r
-X-Mave-Reference: \r
-X-Mave-Attachment: \r
+X-Mave-Extract-Targets: \r
+X-Mave-Attachments: \r
+X-Mave-Relations: \r
 \r
-  \e$B$R$i$,$J$d4A;z$J$I$,2=$1$F$7$^$&$N$O!"\e(B\r
-  Ruby \e$B$NI8=`\e(B curses \e$B%i%$%V%i%j$,\e(B UTF-8 \e$B$KBP1~$7$F$$$J$$$N$,860x$G$9!#\e(B\r
-  \e$B0J2<$N%5%$%H$N5-:\$r;29M$K!"%Q%C%A$rEv$F$F!"\e(Bncursesw \e$B%i%$%V%i%j$KBP1~$7$F$/$@$5$$!#\e(B\r
-\r
-  http://www.itline.jp/~svx/diary/?date=20091022\r
-\r
-  \e$B8=:_!";n83E*$K\e(B EUC-JP \e$B$NC<Kv4D6-$X$bBP1~2DG=$G$9!#\e(B\r
-  \e$B$3$N>l9g!">e5-$N%Q%C%A$rEv$F$kI,MW$O$"$j$^$;$s!#\e(B\r
-  mave.config \e$B$N!V\e(B:TERMINAL_CHARSET\e$B!W$K\e(B EUC-JP \e$B$r%;%C%H$7!"\e(Bmave_base.rb \e$B$r0lItJQ99$7$F$/$@$5$$!#\e(B\r
-  \e$BC<Kv$+$i!V\e(Bexport LANG=ja_JP.eucjp\e$B!W$r<B9T$9$kI,MW$b$"$k$+$b$7$l$^$;$s!#\e(B\r
-\r
-  117     def enspc\r
-  118 #       return(self)                                            # UTF-8 \e$B0J30$J$i%3%a%s%H$r@8$+$9\e(B\r
-  119 ^       self.gsub(/[\xC0-\xE2][\x80-\xBF]+/) {|c|               #### for UTF8 \e$B$$!<$+$2$s\e(B\r
-      +\e$B!<$3$N!V\e(B#\e$B!W$r>C$9\e(B\r
-\r
-  \e$B$^$?!";n83E*$K\e(B SHIFT_JIS \e$B$G$N\e(B Windows \e$B%3%s%=!<%k4D6-$X$NBP1~$b?J$a$F$$$^$9!#\e(B\r
-  mave.config \e$B$N!V\e(B:TERMINAL_CHARSET\e$B!W$K\e(B SHIFT_JIS \e$B$r%;%C%H$9$k$J$I$r$*;n$72<$5$$!#\e(B\r
index 0d0af8f..d19dd00 100644 (file)
@@ -1,15 +1,33 @@
 From: =?ISO-2022-JP?B?GyRCMytILzxUGyhC?= <furutanian@gmail.com>\r
 To: =?ISO-2022-JP?B?GyRCJWElJCV0JWYhPCU2GyhC?= <mave_user@example.com>\r
-Subject: =?ISO-2022-JP?B?TWF2ZSAbJEIlVyVtJTglJyUvJUglKiVVJSMlNyVjJWslWiE8JTgbKEI6?=\r
-Date: Thu, 11 Feb 2010 19:55:03 +0900\r
-X-Mailer: Mave version 2.95 (zakato.itline.jp 2.6.31.5-127.fc12.x86_64 GNU/Linux)\r
-Message-ID: <1265885703.874030.8eaa550b@mave.zakato.itline.jp>\r
-In-Reply-To: <1265885703.855146.8eaa550b@mave.zakato.itline.jp>\r
-References:  <1265885703.855146.8eaa550b@mave.zakato.itline.jp>\r
+Subject: =?ISO-2022-JP?B?GyRCJWElYhsoQjo=?=\r
+Date: Mon, 01 Mar 2010 22:05:41 +0900\r
+X-Mailer: Mave version 2.96 (zakato.itline.jp 2.6.31.12-174.2.19.fc12.x86_64 GNU/Linux)\r
+Message-ID: <1267448741.769206.8eaa550b@mave.zakato.itline.jp>\r
+In-Reply-To: <1267448741.755325.8eaa550b@mave.zakato.itline.jp>\r
+References: <1267448741.755325.8eaa550b@mave.zakato.itline.jp>\r
 MIME-Version: 1.0\r
 Content-Type: text/plain; charset=ISO-2022-JP\r
 Content-Transfer-Encoding: 7bit\r
-X-Mave-Reference: \r
-X-Mave-Attachment: \r
+X-Mave-Extract-Targets: \r
+X-Mave-Attachments: \r
+X-Mave-Relations: \r
 \r
-  http://sourceforge.jp/projects/mave/\r
+  \e$B$R$i$,$J$d4A;z$J$I$,2=$1$F$7$^$&$N$O!"\e(B\r
+  Ruby \e$B$NI8=`\e(B curses \e$B%i%$%V%i%j$,\e(B UTF-8 \e$B$KBP1~$7$F$$$J$$$N$,860x$G$9!#\e(B\r
+  \e$B0J2<$N%5%$%H$N5-:\$r;29M$K!"%Q%C%A$rEv$F$F!"\e(Bncursesw \e$B%i%$%V%i%j$KBP1~$7$F$/$@$5$$!#\e(B\r
+\r
+  http://www.itline.jp/~svx/diary/?date=20091022\r
+\r
+  \e$B8=:_!";n83E*$K\e(B EUC-JP \e$B$NC<Kv4D6-$X$bBP1~2DG=$G$9!#\e(B\r
+  \e$B$3$N>l9g!">e5-$N%Q%C%A$rEv$F$kI,MW$O$"$j$^$;$s!#\e(B\r
+  mave.config \e$B$N!V\e(B:TERMINAL_CHARSET\e$B!W$K\e(B EUC-JP \e$B$r%;%C%H$7!"\e(Bmave_base.rb \e$B$r0lItJQ99$7$F$/$@$5$$!#\e(B\r
+  \e$BC<Kv$+$i!V\e(Bexport LANG=ja_JP.eucjp\e$B!W$r<B9T$9$kI,MW$b$"$k$+$b$7$l$^$;$s!#\e(B\r
+\r
+  117     def enspc\r
+  118 #       return(self)                                            # UTF-8 \e$B0J30$J$i%3%a%s%H$r@8$+$9\e(B\r
+  119 ^       self.gsub(/[\xC0-\xE2][\x80-\xBF]+/) {|c|               #### for UTF8 \e$B$$!<$+$2$s\e(B\r
+      +-\e$B$3$N!V\e(B#\e$B!W$r>C$9\e(B\r
+\r
+  \e$B$^$?!";n83E*$K\e(B SHIFT_JIS \e$B$G$N\e(B Windows \e$B%3%s%=!<%k4D6-$X$NBP1~$b?J$a$F$$$^$9!#\e(B\r
+  mave.config \e$B$N!V\e(B:TERMINAL_CHARSET\e$B!W$K\e(B SHIFT_JIS \e$B$r%;%C%H$9$k$J$I$r$*;n$72<$5$$!#\e(B\r
index ae9bdf1..1327dfb 100644 (file)
@@ -1,14 +1,16 @@
 From: =?ISO-2022-JP?B?GyRCMytILzxUGyhC?= <furutanian@gmail.com>\r
 To: =?ISO-2022-JP?B?GyRCJWElJCV0JWYhPCU2GyhC?= <mave_user@example.com>\r
-Subject: =?ISO-2022-JP?B?W0VPRl0=?=\r
-Date: Thu, 11 Feb 2010 19:55:03 +0900\r
-X-Mailer: Mave version 2.95 (zakato.itline.jp 2.6.31.5-127.fc12.x86_64 GNU/Linux)\r
-Message-ID: <1265885703.874497.8eaa550b@mave.zakato.itline.jp>\r
-In-Reply-To: <1265885703.855146.8eaa550b@mave.zakato.itline.jp>\r
-References:  <1265885703.855146.8eaa550b@mave.zakato.itline.jp>\r
+Subject: =?ISO-2022-JP?B?TWF2ZSAbJEIlVyVtJTglJyUvJUglKiVVJSMlNyVjJWslWiE8JTgbKEI6?=\r
+Date: Mon, 01 Mar 2010 22:05:41 +0900\r
+X-Mailer: Mave version 2.96 (zakato.itline.jp 2.6.31.12-174.2.19.fc12.x86_64 GNU/Linux)\r
+Message-ID: <1267448741.770010.8eaa550b@mave.zakato.itline.jp>\r
+In-Reply-To: <1267448741.755325.8eaa550b@mave.zakato.itline.jp>\r
+References: <1267448741.755325.8eaa550b@mave.zakato.itline.jp>\r
 MIME-Version: 1.0\r
 Content-Type: text/plain; charset=ISO-2022-JP\r
 Content-Transfer-Encoding: 7bit\r
-X-Mave-Reference: \r
-X-Mave-Attachment: \r
+X-Mave-Extract-Targets: \r
+X-Mave-Attachments: \r
+X-Mave-Relations: \r
 \r
+  http://sourceforge.jp/projects/mave/\r
diff --git a/MailManual.jp/00000023.eml b/MailManual.jp/00000023.eml
new file mode 100644 (file)
index 0000000..64e821f
--- /dev/null
@@ -0,0 +1,15 @@
+From: =?ISO-2022-JP?B?GyRCMytILzxUGyhC?= <furutanian@gmail.com>\r
+To: =?ISO-2022-JP?B?GyRCJWElJCV0JWYhPCU2GyhC?= <mave_user@example.com>\r
+Subject: =?ISO-2022-JP?B?W0VPRl0=?=\r
+Date: Mon, 01 Mar 2010 22:05:41 +0900\r
+X-Mailer: Mave version 2.96 (zakato.itline.jp 2.6.31.12-174.2.19.fc12.x86_64 GNU/Linux)\r
+Message-ID: <1267448741.770521.8eaa550b@mave.zakato.itline.jp>\r
+In-Reply-To: <1267448741.755325.8eaa550b@mave.zakato.itline.jp>\r
+References: <1267448741.755325.8eaa550b@mave.zakato.itline.jp>\r
+MIME-Version: 1.0\r
+Content-Type: text/plain; charset=ISO-2022-JP\r
+Content-Transfer-Encoding: 7bit\r
+X-Mave-Extract-Targets: \r
+X-Mave-Attachments: \r
+X-Mave-Relations: \r
+\r
index 9edb578..e85cf2a 100644 (file)
@@ -1,12 +1,13 @@
 From: Developer <furutanian@gmail.com>\r
 To: Mave user <mave_user@example.com>\r
 Subject: =?ISO-2022-JP?B?SG93IHRvIHVzZSAnTWF2ZScgdGV4dGJhc2UgbWFpbGVyLg==?=\r
-Date: Thu, 11 Feb 2010 19:55:03 +0900\r
-X-Mailer: Mave version 2.95 (zakato.itline.jp 2.6.31.5-127.fc12.x86_64 GNU/Linux)\r
-Message-ID: <1265885703.839764.8eaa550b@mave.zakato.itline.jp>\r
+Date: Mon, 01 Mar 2010 22:05:41 +0900\r
+X-Mailer: Mave version 2.96 (zakato.itline.jp 2.6.31.12-174.2.19.fc12.x86_64 GNU/Linux)\r
+Message-ID: <1267448741.735089.8eaa550b@mave.zakato.itline.jp>\r
 MIME-Version: 1.0\r
 Content-Type: text/plain; charset=ISO-2022-JP\r
 Content-Transfer-Encoding: 7bit\r
-X-Mave-Reference: \r
-X-Mave-Attachment: \r
+X-Mave-Extract-Targets: \r
+X-Mave-Attachments: \r
+X-Mave-Relations: \r
 \r
index 6e9a7e3..61d6cf5 100644 (file)
@@ -1,16 +1,17 @@
 From: Developer <furutanian@gmail.com>\r
 To: Mave user <mave_user@example.com>\r
 Subject: =?ISO-2022-JP?B?UmVxdWlyZW1lbnQ=?=\r
-Date: Thu, 11 Feb 2010 19:55:03 +0900\r
-X-Mailer: Mave version 2.95 (zakato.itline.jp 2.6.31.5-127.fc12.x86_64 GNU/Linux)\r
-Message-ID: <1265885703.840403.8eaa550b@mave.zakato.itline.jp>\r
-In-Reply-To: <1265885703.839764.8eaa550b@mave.zakato.itline.jp>\r
-References:  <1265885703.839764.8eaa550b@mave.zakato.itline.jp>\r
+Date: Mon, 01 Mar 2010 22:05:41 +0900\r
+X-Mailer: Mave version 2.96 (zakato.itline.jp 2.6.31.12-174.2.19.fc12.x86_64 GNU/Linux)\r
+Message-ID: <1267448741.736089.8eaa550b@mave.zakato.itline.jp>\r
+In-Reply-To: <1267448741.735089.8eaa550b@mave.zakato.itline.jp>\r
+References: <1267448741.735089.8eaa550b@mave.zakato.itline.jp>\r
 MIME-Version: 1.0\r
 Content-Type: text/plain; charset=ISO-2022-JP\r
 Content-Transfer-Encoding: 7bit\r
-X-Mave-Reference: \r
-X-Mave-Attachment: \r
+X-Mave-Extract-Targets: \r
+X-Mave-Attachments: \r
+X-Mave-Relations: \r
 \r
 \r
   Ruby, curses and gdbm library.\r
index 1222671..a1a63dc 100644 (file)
@@ -1,16 +1,17 @@
 From: Developer <furutanian@gmail.com>\r
 To: Mave user <mave_user@example.com>\r
 Subject: =?ISO-2022-JP?B?MS4gR2V0IGFyY2hpdmUgYW5kIEV4dHJhY3Q=?=\r
-Date: Thu, 11 Feb 2010 19:55:03 +0900\r
-X-Mailer: Mave version 2.95 (zakato.itline.jp 2.6.31.5-127.fc12.x86_64 GNU/Linux)\r
-Message-ID: <1265885703.840940.8eaa550b@mave.zakato.itline.jp>\r
-In-Reply-To: <1265885703.839764.8eaa550b@mave.zakato.itline.jp>\r
-References:  <1265885703.839764.8eaa550b@mave.zakato.itline.jp>\r
+Date: Mon, 01 Mar 2010 22:05:41 +0900\r
+X-Mailer: Mave version 2.96 (zakato.itline.jp 2.6.31.12-174.2.19.fc12.x86_64 GNU/Linux)\r
+Message-ID: <1267448741.736666.8eaa550b@mave.zakato.itline.jp>\r
+In-Reply-To: <1267448741.735089.8eaa550b@mave.zakato.itline.jp>\r
+References: <1267448741.735089.8eaa550b@mave.zakato.itline.jp>\r
 MIME-Version: 1.0\r
 Content-Type: text/plain; charset=ISO-2022-JP\r
 Content-Transfer-Encoding: 7bit\r
-X-Mave-Reference: \r
-X-Mave-Attachment: \r
+X-Mave-Extract-Targets: \r
+X-Mave-Attachments: \r
+X-Mave-Relations: \r
 \r
 \r
   Access http://sourceforge.jp/projects/mave/downloads/44582/mave.tgz/\r
index 47cfbc9..088cf47 100644 (file)
@@ -1,16 +1,17 @@
 From: Developer <furutanian@gmail.com>\r
 To: Mave user <mave_user@example.com>\r
 Subject: =?ISO-2022-JP?B?Mi4gQnVpbGQgeW91ciBjb25maWc=?=\r
-Date: Thu, 11 Feb 2010 19:55:03 +0900\r
-X-Mailer: Mave version 2.95 (zakato.itline.jp 2.6.31.5-127.fc12.x86_64 GNU/Linux)\r
-Message-ID: <1265885703.841444.8eaa550b@mave.zakato.itline.jp>\r
-In-Reply-To: <1265885703.839764.8eaa550b@mave.zakato.itline.jp>\r
-References:  <1265885703.839764.8eaa550b@mave.zakato.itline.jp>\r
+Date: Mon, 01 Mar 2010 22:05:41 +0900\r
+X-Mailer: Mave version 2.96 (zakato.itline.jp 2.6.31.12-174.2.19.fc12.x86_64 GNU/Linux)\r
+Message-ID: <1267448741.737229.8eaa550b@mave.zakato.itline.jp>\r
+In-Reply-To: <1267448741.735089.8eaa550b@mave.zakato.itline.jp>\r
+References: <1267448741.735089.8eaa550b@mave.zakato.itline.jp>\r
 MIME-Version: 1.0\r
 Content-Type: text/plain; charset=ISO-2022-JP\r
 Content-Transfer-Encoding: 7bit\r
-X-Mave-Reference: \r
-X-Mave-Attachment: \r
+X-Mave-Extract-Targets: \r
+X-Mave-Attachments: \r
+X-Mave-Relations: \r
 \r
 \r
   $ cp mave.config.sample mave.config\r
@@ -32,3 +33,14 @@ X-Mave-Attachment:
     @configs[:VIEWER_TYPE] = ['system'|'forkexec']\r
     @configs[:VIEWER] = '/usr/bin/viewer %s'\r
       These settings are similar to editor's.\r
+\r
+    configure your file management environment.\r
+\r
+    @configs[:FILE_MANAGER_TYPE] = ['system'|'forkexec']\r
+    @configs[:FILE_MANAGER] = '/usr/bin/nautilus %s >/dev/null 2>&1'\r
+      These settings are used for open directory by file manager for manipulate files.\r
+\r
+    configure file identification command.\r
+\r
+    @configs[:FILE_IDENTIFIER] = '/usr/bin/file -b -i %s 2>/dev/null'\r
+      These settings are used for identify file types when attach file to mail and etc.\r
index 6a7bcfc..abad5e7 100644 (file)
@@ -1,16 +1,17 @@
 From: Developer <furutanian@gmail.com>\r
 To: Mave user <mave_user@example.com>\r
 Subject: =?ISO-2022-JP?B?My4gTWFrZSBkaXJlY3RvcnkgZm9yIHN0b3JlIG1haWwgZmlsZXM=?=\r
-Date: Thu, 11 Feb 2010 19:55:03 +0900\r
-X-Mailer: Mave version 2.95 (zakato.itline.jp 2.6.31.5-127.fc12.x86_64 GNU/Linux)\r
-Message-ID: <1265885703.843521.8eaa550b@mave.zakato.itline.jp>\r
-In-Reply-To: <1265885703.839764.8eaa550b@mave.zakato.itline.jp>\r
-References:  <1265885703.839764.8eaa550b@mave.zakato.itline.jp>\r
+Date: Mon, 01 Mar 2010 22:05:41 +0900\r
+X-Mailer: Mave version 2.96 (zakato.itline.jp 2.6.31.12-174.2.19.fc12.x86_64 GNU/Linux)\r
+Message-ID: <1267448741.738292.8eaa550b@mave.zakato.itline.jp>\r
+In-Reply-To: <1267448741.735089.8eaa550b@mave.zakato.itline.jp>\r
+References: <1267448741.735089.8eaa550b@mave.zakato.itline.jp>\r
 MIME-Version: 1.0\r
 Content-Type: text/plain; charset=ISO-2022-JP\r
 Content-Transfer-Encoding: 7bit\r
-X-Mave-Reference: \r
-X-Mave-Attachment: \r
+X-Mave-Extract-Targets: \r
+X-Mave-Attachments: \r
+X-Mave-Relations: \r
 \r
 \r
   $ mkdir ~/mave.mails\r
index 021bae9..5a08f68 100644 (file)
@@ -1,16 +1,17 @@
 From: Developer <furutanian@gmail.com>\r
 To: Mave user <mave_user@example.com>\r
 Subject: =?ISO-2022-JP?B?NC4gRXhlY3V0ZSBNYXZl?=\r
-Date: Thu, 11 Feb 2010 19:55:03 +0900\r
-X-Mailer: Mave version 2.95 (zakato.itline.jp 2.6.31.5-127.fc12.x86_64 GNU/Linux)\r
-Message-ID: <1265885703.844066.8eaa550b@mave.zakato.itline.jp>\r
-In-Reply-To: <1265885703.839764.8eaa550b@mave.zakato.itline.jp>\r
-References:  <1265885703.839764.8eaa550b@mave.zakato.itline.jp>\r
+Date: Mon, 01 Mar 2010 22:05:41 +0900\r
+X-Mailer: Mave version 2.96 (zakato.itline.jp 2.6.31.12-174.2.19.fc12.x86_64 GNU/Linux)\r
+Message-ID: <1267448741.738917.8eaa550b@mave.zakato.itline.jp>\r
+In-Reply-To: <1267448741.735089.8eaa550b@mave.zakato.itline.jp>\r
+References: <1267448741.735089.8eaa550b@mave.zakato.itline.jp>\r
 MIME-Version: 1.0\r
 Content-Type: text/plain; charset=ISO-2022-JP\r
 Content-Transfer-Encoding: 7bit\r
-X-Mave-Reference: \r
-X-Mave-Attachment: \r
+X-Mave-Extract-Targets: \r
+X-Mave-Attachments: \r
+X-Mave-Relations: \r
 \r
 \r
   $ ./mave\r
index 510cb30..b6937f3 100644 (file)
@@ -1,16 +1,17 @@
 From: Developer <furutanian@gmail.com>\r
 To: Mave user <mave_user@example.com>\r
 Subject: =?ISO-2022-JP?B?NS4gRmV0Y2ggbWFpbHM=?=\r
-Date: Thu, 11 Feb 2010 19:55:03 +0900\r
-X-Mailer: Mave version 2.95 (zakato.itline.jp 2.6.31.5-127.fc12.x86_64 GNU/Linux)\r
-Message-ID: <1265885703.844704.8eaa550b@mave.zakato.itline.jp>\r
-In-Reply-To: <1265885703.839764.8eaa550b@mave.zakato.itline.jp>\r
-References:  <1265885703.839764.8eaa550b@mave.zakato.itline.jp>\r
+Date: Mon, 01 Mar 2010 22:05:41 +0900\r
+X-Mailer: Mave version 2.96 (zakato.itline.jp 2.6.31.12-174.2.19.fc12.x86_64 GNU/Linux)\r
+Message-ID: <1267448741.739499.8eaa550b@mave.zakato.itline.jp>\r
+In-Reply-To: <1267448741.735089.8eaa550b@mave.zakato.itline.jp>\r
+References: <1267448741.735089.8eaa550b@mave.zakato.itline.jp>\r
 MIME-Version: 1.0\r
 Content-Type: text/plain; charset=ISO-2022-JP\r
 Content-Transfer-Encoding: 7bit\r
-X-Mave-Reference: \r
-X-Mave-Attachment: \r
+X-Mave-Extract-Targets: \r
+X-Mave-Attachments: \r
+X-Mave-Relations: \r
 \r
 \r
   Press Ctrl + x, p key to fetch mails from server.\r
index 226251d..ee844f0 100644 (file)
@@ -1,16 +1,17 @@
 From: Developer <furutanian@gmail.com>\r
 To: Mave user <mave_user@example.com>\r
 Subject: =?ISO-2022-JP?B?Ni4gRXhwbG9yZSBtYWlscw==?=\r
-Date: Thu, 11 Feb 2010 19:55:03 +0900\r
-X-Mailer: Mave version 2.95 (zakato.itline.jp 2.6.31.5-127.fc12.x86_64 GNU/Linux)\r
-Message-ID: <1265885703.845818.8eaa550b@mave.zakato.itline.jp>\r
-In-Reply-To: <1265885703.839764.8eaa550b@mave.zakato.itline.jp>\r
-References:  <1265885703.839764.8eaa550b@mave.zakato.itline.jp>\r
+Date: Mon, 01 Mar 2010 22:05:41 +0900\r
+X-Mailer: Mave version 2.96 (zakato.itline.jp 2.6.31.12-174.2.19.fc12.x86_64 GNU/Linux)\r
+Message-ID: <1267448741.745053.8eaa550b@mave.zakato.itline.jp>\r
+In-Reply-To: <1267448741.735089.8eaa550b@mave.zakato.itline.jp>\r
+References: <1267448741.735089.8eaa550b@mave.zakato.itline.jp>\r
 MIME-Version: 1.0\r
 Content-Type: text/plain; charset=ISO-2022-JP\r
 Content-Transfer-Encoding: 7bit\r
-X-Mave-Reference: \r
-X-Mave-Attachment: \r
+X-Mave-Extract-Targets: \r
+X-Mave-Attachments: \r
+X-Mave-Relations: \r
 \r
 \r
   Each h, j, k, and l key were allocated in each Left, Down, Up, and Right like the Vi editor. \r
index 0096d6b..56dfd5d 100644 (file)
@@ -1,16 +1,17 @@
 From: Developer <furutanian@gmail.com>\r
 To: Mave user <mave_user@example.com>\r
 Subject: =?ISO-2022-JP?B?Ny4gSW5jcmVtZW50YWwgc2VhcmNo?=\r
-Date: Thu, 11 Feb 2010 19:55:03 +0900\r
-X-Mailer: Mave version 2.95 (zakato.itline.jp 2.6.31.5-127.fc12.x86_64 GNU/Linux)\r
-Message-ID: <1265885703.846586.8eaa550b@mave.zakato.itline.jp>\r
-In-Reply-To: <1265885703.839764.8eaa550b@mave.zakato.itline.jp>\r
-References:  <1265885703.839764.8eaa550b@mave.zakato.itline.jp>\r
+Date: Mon, 01 Mar 2010 22:05:41 +0900\r
+X-Mailer: Mave version 2.96 (zakato.itline.jp 2.6.31.12-174.2.19.fc12.x86_64 GNU/Linux)\r
+Message-ID: <1267448741.745908.8eaa550b@mave.zakato.itline.jp>\r
+In-Reply-To: <1267448741.735089.8eaa550b@mave.zakato.itline.jp>\r
+References: <1267448741.735089.8eaa550b@mave.zakato.itline.jp>\r
 MIME-Version: 1.0\r
 Content-Type: text/plain; charset=ISO-2022-JP\r
 Content-Transfer-Encoding: 7bit\r
-X-Mave-Reference: \r
-X-Mave-Attachment: \r
+X-Mave-Extract-Targets: \r
+X-Mave-Attachments: \r
+X-Mave-Relations: \r
 \r
 \r
   Press Ctrl + s key to open incremental search dialog at summary or preview view.\r
index 1b5e7c8..be52107 100644 (file)
@@ -1,16 +1,17 @@
 From: Developer <furutanian@gmail.com>\r
 To: Mave user <mave_user@example.com>\r
 Subject: =?ISO-2022-JP?B?OC4gQ3JlYXRlL0VkaXQgbWFpbCBtZXNzYWdl?=\r
-Date: Thu, 11 Feb 2010 19:55:03 +0900\r
-X-Mailer: Mave version 2.95 (zakato.itline.jp 2.6.31.5-127.fc12.x86_64 GNU/Linux)\r
-Message-ID: <1265885703.847135.8eaa550b@mave.zakato.itline.jp>\r
-In-Reply-To: <1265885703.839764.8eaa550b@mave.zakato.itline.jp>\r
-References:  <1265885703.839764.8eaa550b@mave.zakato.itline.jp>\r
+Date: Mon, 01 Mar 2010 22:05:41 +0900\r
+X-Mailer: Mave version 2.96 (zakato.itline.jp 2.6.31.12-174.2.19.fc12.x86_64 GNU/Linux)\r
+Message-ID: <1267448741.746456.8eaa550b@mave.zakato.itline.jp>\r
+In-Reply-To: <1267448741.735089.8eaa550b@mave.zakato.itline.jp>\r
+References: <1267448741.735089.8eaa550b@mave.zakato.itline.jp>\r
 MIME-Version: 1.0\r
 Content-Type: text/plain; charset=ISO-2022-JP\r
 Content-Transfer-Encoding: 7bit\r
-X-Mave-Reference: \r
-X-Mave-Attachment: \r
+X-Mave-Extract-Targets: \r
+X-Mave-Attachments: \r
+X-Mave-Relations: \r
 \r
 \r
   Press Ctrl + x, n key to create new mail message.\r
@@ -25,7 +26,7 @@ X-Mave-Attachment:
 \r
   Example of definition)\r
     entries << { :MAIL => 'david-x@google.com',                     :ID => 'david',                                 }\r
-    entries << { :MAIL => 'john-y@yahoo.co.jp',                     :ID => 'john@private',  :SEND => 'johnny'       }\r
+    entries << { :MAIL => 'john-y@yahoo.co.jp',                     :ID => 'john@private',  :SEND => 'johnny',      }\r
 \r
   At Edit)                     At Send)\r
     To: --david--,          =>   To: david <david-x@google.com>, johnny <john-y@yahoo.co.jp>\r
index 914cdcc..2a729f6 100644 (file)
@@ -1,16 +1,17 @@
 From: Developer <furutanian@gmail.com>\r
 To: Mave user <mave_user@example.com>\r
 Subject: =?ISO-2022-JP?B?OS4gTWFpbCBGb2xkZXJz?=\r
-Date: Thu, 11 Feb 2010 19:55:03 +0900\r
-X-Mailer: Mave version 2.95 (zakato.itline.jp 2.6.31.5-127.fc12.x86_64 GNU/Linux)\r
-Message-ID: <1265885703.847915.8eaa550b@mave.zakato.itline.jp>\r
-In-Reply-To: <1265885703.839764.8eaa550b@mave.zakato.itline.jp>\r
-References:  <1265885703.839764.8eaa550b@mave.zakato.itline.jp>\r
+Date: Mon, 01 Mar 2010 22:05:41 +0900\r
+X-Mailer: Mave version 2.96 (zakato.itline.jp 2.6.31.12-174.2.19.fc12.x86_64 GNU/Linux)\r
+Message-ID: <1267448741.747194.8eaa550b@mave.zakato.itline.jp>\r
+In-Reply-To: <1267448741.735089.8eaa550b@mave.zakato.itline.jp>\r
+References: <1267448741.735089.8eaa550b@mave.zakato.itline.jp>\r
 MIME-Version: 1.0\r
 Content-Type: text/plain; charset=ISO-2022-JP\r
 Content-Transfer-Encoding: 7bit\r
-X-Mave-Reference: \r
-X-Mave-Attachment: \r
+X-Mave-Extract-Targets: \r
+X-Mave-Attachments: \r
+X-Mave-Relations: \r
 \r
 \r
   Press h key on the summary view, change into the folder view.\r
@@ -27,7 +28,7 @@ X-Mave-Attachment:
   . s) Sent (0/25)\r
   . t) Trash (0/18)\r
   ^ ^  ^^^^^  ^^^^\r
-  | |    |    Number of unread / all mails *not exactly yet\r
+  | |    |    Number of unread / all mails\r
   | |    +-Folder name\r
   | +-Shortcut key\r
   +-Folder got new mails mark(x)\r
index 28ce293..5fbbf33 100644 (file)
@@ -1,16 +1,17 @@
 From: Developer <furutanian@gmail.com>\r
 To: Mave user <mave_user@example.com>\r
 Subject: =?ISO-2022-JP?B?MTAuIE1vdmUsIENvcHkgYW5kIERlbGV0ZSBtYWlscy4=?=\r
-Date: Thu, 11 Feb 2010 19:55:03 +0900\r
-X-Mailer: Mave version 2.95 (zakato.itline.jp 2.6.31.5-127.fc12.x86_64 GNU/Linux)\r
-Message-ID: <1265885703.848789.8eaa550b@mave.zakato.itline.jp>\r
-In-Reply-To: <1265885703.839764.8eaa550b@mave.zakato.itline.jp>\r
-References:  <1265885703.839764.8eaa550b@mave.zakato.itline.jp>\r
+Date: Mon, 01 Mar 2010 22:05:41 +0900\r
+X-Mailer: Mave version 2.96 (zakato.itline.jp 2.6.31.12-174.2.19.fc12.x86_64 GNU/Linux)\r
+Message-ID: <1267448741.748039.8eaa550b@mave.zakato.itline.jp>\r
+In-Reply-To: <1267448741.735089.8eaa550b@mave.zakato.itline.jp>\r
+References: <1267448741.735089.8eaa550b@mave.zakato.itline.jp>\r
 MIME-Version: 1.0\r
 Content-Type: text/plain; charset=ISO-2022-JP\r
 Content-Transfer-Encoding: 7bit\r
-X-Mave-Reference: \r
-X-Mave-Attachment: \r
+X-Mave-Extract-Targets: \r
+X-Mave-Attachments: \r
+X-Mave-Relations: \r
 \r
 \r
   In summary view, press Ctrl + x, m key to move mail to another folder.\r
index 9b7c96e..d26878c 100644 (file)
@@ -1,16 +1,17 @@
 From: Developer <furutanian@gmail.com>\r
 To: Mave user <mave_user@example.com>\r
 Subject: =?ISO-2022-JP?B?MTEuIFNlbmQgbWFpbHM=?=\r
-Date: Thu, 11 Feb 2010 19:55:03 +0900\r
-X-Mailer: Mave version 2.95 (zakato.itline.jp 2.6.31.5-127.fc12.x86_64 GNU/Linux)\r
-Message-ID: <1265885703.849364.8eaa550b@mave.zakato.itline.jp>\r
-In-Reply-To: <1265885703.839764.8eaa550b@mave.zakato.itline.jp>\r
-References:  <1265885703.839764.8eaa550b@mave.zakato.itline.jp>\r
+Date: Mon, 01 Mar 2010 22:05:41 +0900\r
+X-Mailer: Mave version 2.96 (zakato.itline.jp 2.6.31.12-174.2.19.fc12.x86_64 GNU/Linux)\r
+Message-ID: <1267448741.748616.8eaa550b@mave.zakato.itline.jp>\r
+In-Reply-To: <1267448741.735089.8eaa550b@mave.zakato.itline.jp>\r
+References: <1267448741.735089.8eaa550b@mave.zakato.itline.jp>\r
 MIME-Version: 1.0\r
 Content-Type: text/plain; charset=ISO-2022-JP\r
 Content-Transfer-Encoding: 7bit\r
-X-Mave-Reference: \r
-X-Mave-Attachment: \r
+X-Mave-Extract-Targets: \r
+X-Mave-Attachments: \r
+X-Mave-Relations: \r
 \r
 \r
   Press Ctrl + x, s key to send mails in 'Outbox' folder.\r
index 577f057..d70162a 100644 (file)
@@ -1,16 +1,17 @@
 From: Developer <furutanian@gmail.com>\r
 To: Mave user <mave_user@example.com>\r
 Subject: =?ISO-2022-JP?B?MTIuIEltcG9ydCBtYWlscw==?=\r
-Date: Thu, 11 Feb 2010 19:55:03 +0900\r
-X-Mailer: Mave version 2.95 (zakato.itline.jp 2.6.31.5-127.fc12.x86_64 GNU/Linux)\r
-Message-ID: <1265885703.849907.8eaa550b@mave.zakato.itline.jp>\r
-In-Reply-To: <1265885703.839764.8eaa550b@mave.zakato.itline.jp>\r
-References:  <1265885703.839764.8eaa550b@mave.zakato.itline.jp>\r
+Date: Mon, 01 Mar 2010 22:05:41 +0900\r
+X-Mailer: Mave version 2.96 (zakato.itline.jp 2.6.31.12-174.2.19.fc12.x86_64 GNU/Linux)\r
+Message-ID: <1267448741.749204.8eaa550b@mave.zakato.itline.jp>\r
+In-Reply-To: <1267448741.735089.8eaa550b@mave.zakato.itline.jp>\r
+References: <1267448741.735089.8eaa550b@mave.zakato.itline.jp>\r
 MIME-Version: 1.0\r
 Content-Type: text/plain; charset=ISO-2022-JP\r
 Content-Transfer-Encoding: 7bit\r
-X-Mave-Reference: \r
-X-Mave-Attachment: \r
+X-Mave-Extract-Targets: \r
+X-Mave-Attachments: \r
+X-Mave-Relations: \r
 \r
 \r
   Press Ctrl + x, Shift + i key to import mails according to the setting of each account.\r
index 84397d9..cc6d3bc 100644 (file)
@@ -1,16 +1,17 @@
 From: Developer <furutanian@gmail.com>\r
 To: Mave user <mave_user@example.com>\r
 Subject: =?ISO-2022-JP?B?MTMuIE1hcmsgbWFpbHM=?=\r
-Date: Thu, 11 Feb 2010 19:55:03 +0900\r
-X-Mailer: Mave version 2.95 (zakato.itline.jp 2.6.31.5-127.fc12.x86_64 GNU/Linux)\r
-Message-ID: <1265885703.850577.8eaa550b@mave.zakato.itline.jp>\r
-In-Reply-To: <1265885703.839764.8eaa550b@mave.zakato.itline.jp>\r
-References:  <1265885703.839764.8eaa550b@mave.zakato.itline.jp>\r
+Date: Mon, 01 Mar 2010 22:05:41 +0900\r
+X-Mailer: Mave version 2.96 (zakato.itline.jp 2.6.31.12-174.2.19.fc12.x86_64 GNU/Linux)\r
+Message-ID: <1267448741.749864.8eaa550b@mave.zakato.itline.jp>\r
+In-Reply-To: <1267448741.735089.8eaa550b@mave.zakato.itline.jp>\r
+References: <1267448741.735089.8eaa550b@mave.zakato.itline.jp>\r
 MIME-Version: 1.0\r
 Content-Type: text/plain; charset=ISO-2022-JP\r
 Content-Transfer-Encoding: 7bit\r
-X-Mave-Reference: \r
-X-Mave-Attachment: \r
+X-Mave-Extract-Targets: \r
+X-Mave-Attachments: \r
+X-Mave-Relations: \r
 \r
 \r
   In summary view, press m key to mark mail.\r
index 10078ea..f76afcc 100644 (file)
@@ -1,16 +1,17 @@
 From: Developer <furutanian@gmail.com>\r
 To: Mave user <mave_user@example.com>\r
 Subject: =?ISO-2022-JP?B?MTQuIEFycmFuZ2UgbWFpbCB0aHJlYWRz?=\r
-Date: Thu, 11 Feb 2010 19:55:03 +0900\r
-X-Mailer: Mave version 2.95 (zakato.itline.jp 2.6.31.5-127.fc12.x86_64 GNU/Linux)\r
-Message-ID: <1265885703.851461.8eaa550b@mave.zakato.itline.jp>\r
-In-Reply-To: <1265885703.839764.8eaa550b@mave.zakato.itline.jp>\r
-References:  <1265885703.839764.8eaa550b@mave.zakato.itline.jp>\r
+Date: Mon, 01 Mar 2010 22:05:41 +0900\r
+X-Mailer: Mave version 2.96 (zakato.itline.jp 2.6.31.12-174.2.19.fc12.x86_64 GNU/Linux)\r
+Message-ID: <1267448741.750491.8eaa550b@mave.zakato.itline.jp>\r
+In-Reply-To: <1267448741.735089.8eaa550b@mave.zakato.itline.jp>\r
+References: <1267448741.735089.8eaa550b@mave.zakato.itline.jp>\r
 MIME-Version: 1.0\r
 Content-Type: text/plain; charset=ISO-2022-JP\r
 Content-Transfer-Encoding: 7bit\r
-X-Mave-Reference: \r
-X-Mave-Attachment: \r
+X-Mave-Extract-Targets: \r
+X-Mave-Attachments: \r
+X-Mave-Relations: \r
 \r
 \r
   In summary view, Press Ctrl + x, Shift + j key to take off mail from thread.\r
index c013724..266ed91 100644 (file)
@@ -1,16 +1,17 @@
 From: Developer <furutanian@gmail.com>\r
 To: Mave user <mave_user@example.com>\r
 Subject: =?ISO-2022-JP?B?MTUuIEJ1aWxkIHlvdXIgYWRkcmVzc2Jvb2s=?=\r
-Date: Thu, 11 Feb 2010 19:55:03 +0900\r
-X-Mailer: Mave version 2.95 (zakato.itline.jp 2.6.31.5-127.fc12.x86_64 GNU/Linux)\r
-Message-ID: <1265885703.852031.8eaa550b@mave.zakato.itline.jp>\r
-In-Reply-To: <1265885703.839764.8eaa550b@mave.zakato.itline.jp>\r
-References:  <1265885703.839764.8eaa550b@mave.zakato.itline.jp>\r
+Date: Mon, 01 Mar 2010 22:05:41 +0900\r
+X-Mailer: Mave version 2.96 (zakato.itline.jp 2.6.31.12-174.2.19.fc12.x86_64 GNU/Linux)\r
+Message-ID: <1267448741.751022.8eaa550b@mave.zakato.itline.jp>\r
+In-Reply-To: <1267448741.735089.8eaa550b@mave.zakato.itline.jp>\r
+References: <1267448741.735089.8eaa550b@mave.zakato.itline.jp>\r
 MIME-Version: 1.0\r
 Content-Type: text/plain; charset=ISO-2022-JP\r
 Content-Transfer-Encoding: 7bit\r
-X-Mave-Reference: \r
-X-Mave-Attachment: \r
+X-Mave-Extract-Targets: \r
+X-Mave-Attachments: \r
+X-Mave-Relations: \r
 \r
 \r
   $ cp mave_address.sample mave_address\r
@@ -20,9 +21,9 @@ X-Mave-Attachment:
 \r
   Example)\r
     entries << { :MAIL => 'david-x@google.com',                     :ID => 'david',                                 }\r
-    entries << { :MAIL => 'john-y@yahoo.co.jp',                     :ID => 'john@private',  :SEND => 'johnny'       }\r
-    entries << { :MAIL => 'linus-z@abc.co.jp',                      :ID => 'linus@ABC',     :SEND => 'Mr. Zorvalds' }\r
+    entries << { :MAIL => 'john-y@yahoo.co.jp',                     :ID => 'john@private',  :SEND => 'johnny',      }\r
+    entries << { :MAIL => 'linus-z@abc.co.jp',                      :ID => 'linus@ABC',     :SEND => 'Mr. Zorvalds',}\r
 \r
-  Entries ware registerd to the address book DB by the execute script of address book.\r
+  Entries ware registered to the address book DB by the execute script of address book.\r
 \r
   $ ./mave_address\r
index facecbb..c3d0fce 100644 (file)
@@ -1,16 +1,37 @@
 From: Developer <furutanian@gmail.com>\r
 To: Mave user <mave_user@example.com>\r
-Subject: =?ISO-2022-JP?B?MTYuIFF1aXQ=?=\r
-Date: Thu, 11 Feb 2010 19:55:03 +0900\r
-X-Mailer: Mave version 2.95 (zakato.itline.jp 2.6.31.5-127.fc12.x86_64 GNU/Linux)\r
-Message-ID: <1265885703.852700.8eaa550b@mave.zakato.itline.jp>\r
-In-Reply-To: <1265885703.839764.8eaa550b@mave.zakato.itline.jp>\r
-References:  <1265885703.839764.8eaa550b@mave.zakato.itline.jp>\r
+Subject: =?ISO-2022-JP?B?MTYuIEF0dGFjaCBmaWxlIHRvIG1haWw=?=\r
+Date: Mon, 01 Mar 2010 22:05:41 +0900\r
+X-Mailer: Mave version 2.96 (zakato.itline.jp 2.6.31.12-174.2.19.fc12.x86_64 GNU/Linux)\r
+Message-ID: <1267448741.751677.8eaa550b@mave.zakato.itline.jp>\r
+In-Reply-To: <1267448741.735089.8eaa550b@mave.zakato.itline.jp>\r
+References: <1267448741.735089.8eaa550b@mave.zakato.itline.jp>\r
 MIME-Version: 1.0\r
 Content-Type: text/plain; charset=ISO-2022-JP\r
 Content-Transfer-Encoding: 7bit\r
-X-Mave-Reference: \r
-X-Mave-Attachment: \r
+X-Mave-Extract-Targets: \r
+X-Mave-Attachments: \r
+X-Mave-Relations: \r
 \r
 \r
-  Press Ctrl + x, c key to kill mave.\r
+  To viewing attachment files in received mail.\r
+\r
+    In summary view, Press Ctrl + x, x key to extract all attachment files in mail to related directory.\r
+    The related directory is paired for each mail, that holds some files.\r
+    In summary view, Press Ctrl + x, f key to open related directory by file manager.\r
+\r
+  To replying mail with attachment files that had some modify.\r
+\r
+    In summary view, Press Ctrl + x, r key to create reply mail that has X-Mave-Extract-Targets header for file extract.\r
+    After edit and save mail, attachment files are extract to related directory described under X-Mave-Extract-Targets header.\r
+    Press Ctrl + x, f key for reply mail to open related directory by file manager and modify it.\r
+    Press Ctrl + x, e key to edit mail. Extracted files are described under X-Mave-Relations header.\r
+    You can move file description to under X-Mave-Attachments header from under X-Mave-Relations header, if you want to attach and reply.\r
+    Move mail to 'Outbox' folder and press Ctrl + x, s key to send mail with attachment files.\r
+\r
+  To send new mail with new attachment files.\r
+\r
+    In summary view, Press Ctrl + x, n key to create new mail that has empty X-Mave-Relations header.\r
+    Describe filenames that you will attach under X-Mave-Relations header, empty files that have same filenames will create in related directory.\r
+    Press Ctrl + x, f key for new mail to open related directory by file manager and modify it.\r
+    You can send mail with attachment files by move file description to under X-Mave-Attachments header from under X-Mave-Relations header.\r
index f96c5bc..71c48bd 100644 (file)
@@ -1,14 +1,17 @@
 From: Developer <furutanian@gmail.com>\r
 To: Mave user <mave_user@example.com>\r
-Subject: =?ISO-2022-JP?B?RW5qb3khIQ==?=\r
-Date: Thu, 11 Feb 2010 19:55:03 +0900\r
-X-Mailer: Mave version 2.95 (zakato.itline.jp 2.6.31.5-127.fc12.x86_64 GNU/Linux)\r
-Message-ID: <1265885703.853154.8eaa550b@mave.zakato.itline.jp>\r
-In-Reply-To: <1265885703.839764.8eaa550b@mave.zakato.itline.jp>\r
-References:  <1265885703.839764.8eaa550b@mave.zakato.itline.jp>\r
+Subject: =?ISO-2022-JP?B?MTcuIFF1aXQ=?=\r
+Date: Mon, 01 Mar 2010 22:05:41 +0900\r
+X-Mailer: Mave version 2.96 (zakato.itline.jp 2.6.31.12-174.2.19.fc12.x86_64 GNU/Linux)\r
+Message-ID: <1267448741.752518.8eaa550b@mave.zakato.itline.jp>\r
+In-Reply-To: <1267448741.735089.8eaa550b@mave.zakato.itline.jp>\r
+References: <1267448741.735089.8eaa550b@mave.zakato.itline.jp>\r
 MIME-Version: 1.0\r
 Content-Type: text/plain; charset=ISO-2022-JP\r
 Content-Transfer-Encoding: 7bit\r
-X-Mave-Reference: \r
-X-Mave-Attachment: \r
+X-Mave-Extract-Targets: \r
+X-Mave-Attachments: \r
+X-Mave-Relations: \r
 \r
+\r
+  Press Ctrl + x, c key to kill mave.\r
index 1f8bd5d..c82453d 100644 (file)
@@ -1,32 +1,15 @@
 From: Developer <furutanian@gmail.com>\r
 To: Mave user <mave_user@example.com>\r
-Subject: =?ISO-2022-JP?B?Tm90ZTo=?=\r
-Date: Thu, 11 Feb 2010 19:55:03 +0900\r
-X-Mailer: Mave version 2.95 (zakato.itline.jp 2.6.31.5-127.fc12.x86_64 GNU/Linux)\r
-Message-ID: <1265885703.853564.8eaa550b@mave.zakato.itline.jp>\r
-In-Reply-To: <1265885703.839764.8eaa550b@mave.zakato.itline.jp>\r
-References:  <1265885703.839764.8eaa550b@mave.zakato.itline.jp>\r
+Subject: =?ISO-2022-JP?B?RW5qb3khIQ==?=\r
+Date: Mon, 01 Mar 2010 22:05:41 +0900\r
+X-Mailer: Mave version 2.96 (zakato.itline.jp 2.6.31.12-174.2.19.fc12.x86_64 GNU/Linux)\r
+Message-ID: <1267448741.752991.8eaa550b@mave.zakato.itline.jp>\r
+In-Reply-To: <1267448741.735089.8eaa550b@mave.zakato.itline.jp>\r
+References: <1267448741.735089.8eaa550b@mave.zakato.itline.jp>\r
 MIME-Version: 1.0\r
 Content-Type: text/plain; charset=ISO-2022-JP\r
 Content-Transfer-Encoding: 7bit\r
-X-Mave-Reference: \r
-X-Mave-Attachment: \r
+X-Mave-Extract-Targets: \r
+X-Mave-Attachments: \r
+X-Mave-Relations: \r
 \r
-  When multibyte character is troubled.\r
-  Standard curses library of Ruby doesn't correspond to UTF-8. \r
-  Please apply the patch to correspond to ncursesw referring to the following sites. \r
-\r
-  http://www.itline.jp/~svx/diary/?date=20091022\r
-\r
-  In experimentally, Mave corresponds terminal environment of EUC-JP now. \r
-  In this case, you do not need to apply above patch.\r
-  Set EUC-JP to ':TERMINAL_CHARSET' in mave.config, and change mave_base.rb a bit.\r
-  "export LANG=ja_JP.eucjp" might execute from the terminal. \r
-\r
-  117     def enspc\r
-  118 #       return(self)                                            # comment out without UTF-8\r
-  119 ^       self.gsub(/[\xC0-\xE2][\x80-\xBF]+/) {|c|               #### for UTF8 temporally\r
-      +\e$B!<\e(Bremove this '#'\r
-\r
-  And in experimentally, Mave is corresponding Windows console environment with SHIFT_JIS.\r
-  Set SHIFT_JIS to ':TERMINAL_CHARSET' in mave.config, and try and error.\r
index 92efaad..6aa539d 100644 (file)
@@ -1,15 +1,33 @@
 From: Developer <furutanian@gmail.com>\r
 To: Mave user <mave_user@example.com>\r
-Subject: =?ISO-2022-JP?B?TWF2ZSBwcm9qZWN0IG9mZmljaWFsIHBhZ2U6?=\r
-Date: Thu, 11 Feb 2010 19:55:03 +0900\r
-X-Mailer: Mave version 2.95 (zakato.itline.jp 2.6.31.5-127.fc12.x86_64 GNU/Linux)\r
-Message-ID: <1265885703.854291.8eaa550b@mave.zakato.itline.jp>\r
-In-Reply-To: <1265885703.839764.8eaa550b@mave.zakato.itline.jp>\r
-References:  <1265885703.839764.8eaa550b@mave.zakato.itline.jp>\r
+Subject: =?ISO-2022-JP?B?Tm90ZTo=?=\r
+Date: Mon, 01 Mar 2010 22:05:41 +0900\r
+X-Mailer: Mave version 2.96 (zakato.itline.jp 2.6.31.12-174.2.19.fc12.x86_64 GNU/Linux)\r
+Message-ID: <1267448741.753422.8eaa550b@mave.zakato.itline.jp>\r
+In-Reply-To: <1267448741.735089.8eaa550b@mave.zakato.itline.jp>\r
+References: <1267448741.735089.8eaa550b@mave.zakato.itline.jp>\r
 MIME-Version: 1.0\r
 Content-Type: text/plain; charset=ISO-2022-JP\r
 Content-Transfer-Encoding: 7bit\r
-X-Mave-Reference: \r
-X-Mave-Attachment: \r
+X-Mave-Extract-Targets: \r
+X-Mave-Attachments: \r
+X-Mave-Relations: \r
 \r
-  http://sourceforge.jp/projects/mave/\r
+  When multibyte character is troubled.\r
+  Standard curses library of Ruby doesn't correspond to UTF-8. \r
+  Please apply the patch to correspond to ncursesw referring to the following sites. \r
+\r
+  http://www.itline.jp/~svx/diary/?date=20091022\r
+\r
+  In experimentally, Mave corresponds terminal environment of EUC-JP now. \r
+  In this case, you do not need to apply above patch.\r
+  Set EUC-JP to ':TERMINAL_CHARSET' in mave.config, and change mave_base.rb a bit.\r
+  "export LANG=ja_JP.eucjp" might execute from the terminal. \r
+\r
+  117     def enspc\r
+  118 #       return(self)                                            # comment out without UTF-8\r
+  119 ^       self.gsub(/[\xC0-\xE2][\x80-\xBF]+/) {|c|               #### for UTF8 temporally\r
+      +-remove this '#'\r
+\r
+  And in experimentally, Mave is corresponding Windows console environment with SHIFT_JIS.\r
+  Set SHIFT_JIS to ':TERMINAL_CHARSET' in mave.config, and try and error.\r
index 905a8b0..c1e303e 100644 (file)
@@ -1,14 +1,16 @@
 From: Developer <furutanian@gmail.com>\r
 To: Mave user <mave_user@example.com>\r
-Subject: =?ISO-2022-JP?B?W0VPRl0=?=\r
-Date: Thu, 11 Feb 2010 19:55:03 +0900\r
-X-Mailer: Mave version 2.95 (zakato.itline.jp 2.6.31.5-127.fc12.x86_64 GNU/Linux)\r
-Message-ID: <1265885703.854705.8eaa550b@mave.zakato.itline.jp>\r
-In-Reply-To: <1265885703.839764.8eaa550b@mave.zakato.itline.jp>\r
-References:  <1265885703.839764.8eaa550b@mave.zakato.itline.jp>\r
+Subject: =?ISO-2022-JP?B?TWF2ZSBwcm9qZWN0IG9mZmljaWFsIHBhZ2U6?=\r
+Date: Mon, 01 Mar 2010 22:05:41 +0900\r
+X-Mailer: Mave version 2.96 (zakato.itline.jp 2.6.31.12-174.2.19.fc12.x86_64 GNU/Linux)\r
+Message-ID: <1267448741.754186.8eaa550b@mave.zakato.itline.jp>\r
+In-Reply-To: <1267448741.735089.8eaa550b@mave.zakato.itline.jp>\r
+References: <1267448741.735089.8eaa550b@mave.zakato.itline.jp>\r
 MIME-Version: 1.0\r
 Content-Type: text/plain; charset=ISO-2022-JP\r
 Content-Transfer-Encoding: 7bit\r
-X-Mave-Reference: \r
-X-Mave-Attachment: \r
+X-Mave-Extract-Targets: \r
+X-Mave-Attachments: \r
+X-Mave-Relations: \r
 \r
+  http://sourceforge.jp/projects/mave/\r
diff --git a/MailManual/00000023.eml b/MailManual/00000023.eml
new file mode 100644 (file)
index 0000000..9980105
--- /dev/null
@@ -0,0 +1,15 @@
+From: Developer <furutanian@gmail.com>\r
+To: Mave user <mave_user@example.com>\r
+Subject: =?ISO-2022-JP?B?W0VPRl0=?=\r
+Date: Mon, 01 Mar 2010 22:05:41 +0900\r
+X-Mailer: Mave version 2.96 (zakato.itline.jp 2.6.31.12-174.2.19.fc12.x86_64 GNU/Linux)\r
+Message-ID: <1267448741.754619.8eaa550b@mave.zakato.itline.jp>\r
+In-Reply-To: <1267448741.735089.8eaa550b@mave.zakato.itline.jp>\r
+References: <1267448741.735089.8eaa550b@mave.zakato.itline.jp>\r
+MIME-Version: 1.0\r
+Content-Type: text/plain; charset=ISO-2022-JP\r
+Content-Transfer-Encoding: 7bit\r
+X-Mave-Extract-Targets: \r
+X-Mave-Attachments: \r
+X-Mave-Relations: \r
+\r
diff --git a/README b/README
index d4879da..99210dc 100644 (file)
--- a/README
+++ b/README
@@ -32,6 +32,17 @@ Requirement
     @configs[:VIEWER] = '/usr/bin/viewer %s'
       These settings are similar to editor's.
 
+    configure your file management environment.
+
+    @configs[:FILE_MANAGER_TYPE] = ['system'|'forkexec']
+    @configs[:FILE_MANAGER] = '/usr/bin/nautilus %s >/dev/null 2>&1'
+      These settings are used for open directory by file manager for manipulate files.
+
+    configure file identification command.
+
+    @configs[:FILE_IDENTIFIER] = '/usr/bin/file -b -i %s 2>/dev/null'
+      These settings are used for identify file types when attach file to mail and etc.
+
 3. Make directory for store mail files
 
   $ mkdir ~/mave.mails
@@ -97,7 +108,7 @@ Requirement
 
   Example of definition)
     entries << { :MAIL => 'david-x@google.com',                     :ID => 'david',                                 }
-    entries << { :MAIL => 'john-y@yahoo.co.jp',                     :ID => 'john@private',  :SEND => 'johnny'       }
+    entries << { :MAIL => 'john-y@yahoo.co.jp',                     :ID => 'john@private',  :SEND => 'johnny',      }
 
   At Edit)                     At Send)
     To: --david--,          =>   To: david <david-x@google.com>, johnny <john-y@yahoo.co.jp>
@@ -119,7 +130,7 @@ Requirement
   . s) Sent (0/25)
   . t) Trash (0/18)
   ^ ^  ^^^^^  ^^^^
-  | |    |    Number of unread / all mails *not exactly yet
+  | |    |    Number of unread / all mails
   | |    +-Folder name
   | +-Shortcut key
   +-Folder got new mails mark(x)
@@ -199,14 +210,38 @@ Requirement
 
   Example)
     entries << { :MAIL => 'david-x@google.com',                     :ID => 'david',                                 }
-    entries << { :MAIL => 'john-y@yahoo.co.jp',                     :ID => 'john@private',  :SEND => 'johnny'       }
-    entries << { :MAIL => 'linus-z@abc.co.jp',                      :ID => 'linus@ABC',     :SEND => 'Mr. Zorvalds' }
+    entries << { :MAIL => 'john-y@yahoo.co.jp',                     :ID => 'john@private',  :SEND => 'johnny',      }
+    entries << { :MAIL => 'linus-z@abc.co.jp',                      :ID => 'linus@ABC',     :SEND => 'Mr. Zorvalds',}
 
-  Entries ware registerd to the address book DB by the execute script of address book.
+  Entries ware registered to the address book DB by the execute script of address book.
 
   $ ./mave_address
 
-16. Quit
+16. Attach file to mail
+
+  To viewing attachment files in received mail.
+
+    In summary view, Press Ctrl + x, x key to extract all attachment files in mail to related directory.
+    The related directory is paired for each mail, that holds some files.
+    In summary view, Press Ctrl + x, f key to open related directory by file manager.
+
+  To replying mail with attachment files that had some modify.
+
+    In summary view, Press Ctrl + x, r key to create reply mail that has X-Mave-Extract-Targets header for file extract.
+    After edit and save mail, attachment files are extract to related directory described under X-Mave-Extract-Targets header.
+    Press Ctrl + x, f key for reply mail to open related directory by file manager and modify it.
+    Press Ctrl + x, e key to edit mail. Extracted files are described under X-Mave-Relations header.
+    You can move file description to under X-Mave-Attachments header from under X-Mave-Relations header, if you want to attach and reply.
+    Move mail to 'Outbox' folder and press Ctrl + x, s key to send mail with attachment files.
+
+  To send new mail with new attachment files.
+
+    In summary view, Press Ctrl + x, n key to create new mail that has empty X-Mave-Relations header.
+    Describe filenames that you will attach under X-Mave-Relations header, empty files that have same filenames will create in related directory.
+    Press Ctrl + x, f key for new mail to open related directory by file manager and modify it.
+    You can send mail with attachment files by move file description to under X-Mave-Attachments header from under X-Mave-Relations header.
+
+17. Quit
 
   Press Ctrl + x, c key to kill mave.
 
@@ -227,7 +262,7 @@ Note:
   117     def enspc
   118 #       return(self)                                            # comment out without UTF-8
   119 ^       self.gsub(/[\xC0-\xE2][\x80-\xBF]+/) {|c|               #### for UTF8 temporally
-      +remove this '#'
+      +-remove this '#'
 
   And in experimentally, Mave is corresponding Windows console environment with SHIFT_JIS.
   Set SHIFT_JIS to ':TERMINAL_CHARSET' in mave.config, and try and error.
index bc9dd3f..5d245c6 100644 (file)
--- a/README.jp
+++ b/README.jp
     @configs[:VIEWER] = '/usr/bin/viewer %s'
       設定はエディタと同様です。
 
+    ファイルマネージャの環境を設定してください。
+
+    @configs[:FILE_MANAGER_TYPE] = ['system'|'forkexec']
+    @configs[:FILE_MANAGER] = '/usr/bin/nautilus %s >/dev/null 2>&1'
+      添付ファイルの保存先など、ファイル操作のためディレクトリを開く際に利用されます。
+
+    ファイル識別コマンドを設定してください。
+
+    @configs[:FILE_IDENTIFIER] = '/usr/bin/file -b -i %s 2>/dev/null'
+      添付ファイルを付加する場合など、ファイルタイプの識別の際に利用されます。
+
 3. メールを蓄積するディレクトリの作成
 
   $ mkdir ~/mave.mails
 
   定義の例)
     entries << { :MAIL => 'x-tanaka@google.com',                    :ID => '田中',                                  }
-    entries << { :MAIL => 'y-kato@yahoo.co.jp',                     :ID => '加藤@private',  :SEND => 'かとちゃん'   }
+    entries << { :MAIL => 'y-kato@yahoo.co.jp',                     :ID => '加藤@private',  :SEND => 'かとちゃん',  }
 
   編集時)                      送信時)
     To: --田中--,           =>   To: 田中 様 <x-tanaka@google.com>, かとちゃん <y-kato@yahoo.co.jp>
   . s) 送信済み (0/25)
   . t) ゴミ箱 (0/18)
   ^ ^  ^^^^^^  ^^^^
-  | |    |     未読数 / メール総数 ※現状、正確ではない
+  | |    |     未読数 / メール総数
   | |    +-フォルダ名
   | +-ショートカットキー
   +-新着メールあり(x)
 
   例)
     entries << { :MAIL => 'x-tanaka@google.com',                    :ID => '田中',                                  }
-    entries << { :MAIL => 'y-kato@yahoo.co.jp',                     :ID => '加藤@private',  :SEND => 'かとちゃん'   }
-    entries << { :MAIL => 'z-suzuki@abc.co.jp',                     :ID => '鈴木@ABC',      :SEND => '鈴木さん'     }
+    entries << { :MAIL => 'y-kato@yahoo.co.jp',                     :ID => '加藤@private',  :SEND => 'かとちゃん',  }
+    entries << { :MAIL => 'z-suzuki@abc.co.jp',                     :ID => '鈴木@ABC',      :SEND => '鈴木さん',    }
 
   アドレス帳スクリプトを実行することで、アドレス帳 DB に登録されます。
 
   $ ./mave_address
 
-16. 終了する
+16. 添付ファイルの操作
+
+  受信したメールの添付ファイルを閲覧する。
+
+    メール一覧ビューで、Ctrl + x、x と、キーを押すと、メール中のすべての添付ファイルが、関連ディレクトリに展開されます。
+    関連ディレクトリとは、メールと対となるディレクトリで、任意のファイルを保存しておけます。
+    関連ディレクトリは、メール一覧ビューで、ESC、f と、キーを押すことで、指定のファイルマネージャにて開くことができます。
+
+  受信したメールの添付ファイルを修正して返信する。
+
+    メール一覧ビューで、Ctrl + x、r と、キーを押し、返信メールを作成すると、X-Mave-Extract-Targets ヘッダが付加されています。
+    そのまま、メールを編集して保存すると、X-Mave-Extract-Targets ヘッダの下の記載に対応する添付ファイルが、返信メールの関連ディレクトリに展開されます。
+    返信メールに対して、ESC、f と、キーを押すと、関連ディレクトリが開くので、必要に応じて添付ファイルを修正します。
+    Ctrl + x、e と、キーを押して返信メールを編集します。展開された添付ファイルは、X-Mave-Relations ヘッダの下に記載されています。
+    返信メールに添付して返信したい場合、X-Mave-Relations ヘッダの下から、X-Mave-Attachments ヘッダの下に記載を移動します。
+    あとは、通常通り「送信箱」フォルダに移動し、Ctrl + x、s と、キーを押して送信すると、添付されて送信されます。
+
+  新規メールに、新規に添付ファイルを添付して送信する。
+
+    メール一覧ビューで、Ctrl + x、n と、キーを押して新規メールを作成すると、空の X-Mave-Relations ヘッダが付加されています。
+       X-Mave-Relations ヘッダの下に、新規に添付する予定のファイル名を記載して保存すると、関連ディレクトリ内に指定のファイル名の空ファイルが作成されます。
+    新規メールに対して、ESC、f と、キーを押すと、関連ディレクトリが開くので、必要に応じて空ファイルを編集します。
+    あとは、上記と同様に、X-Mave-Relations ヘッダの下から、X-Mave-Attachments ヘッダの下に記載を移動し、送信動作を行います。
+
+17. 終了する
 
   Ctrl + x、c と、キーを押すと、Mave は終了します。
 
   117     def enspc
   118 #       return(self)                                            # UTF-8 以外ならコメントを生かす
   119 ^       self.gsub(/[\xC0-\xE2][\x80-\xBF]+/) {|c|               #### for UTF8 いーかげん
-      +この「#」を消す
+      +-この「#」を消す
 
   また、試験的に SHIFT_JIS での Windows コンソール環境への対応も進めています。
   mave.config の「:TERMINAL_CHARSET」に SHIFT_JIS をセットするなどをお試し下さい。
index d5cedab..e01f29d 100644 (file)
@@ -63,12 +63,16 @@ class Intl
 
        @@catalog['Mail Identification'] \
                        = 'メール情報'
-       @@catalog['Message-ID: %s'] \
-                       = ' メッセージ ID: %s'
-       @@catalog['  FilePath: %s'] \
-                       = '  ファイルパス: %s'
-       @@catalog['  FileSize: %d'] \
-                       = 'ファイルサイズ: %s'
+       @@catalog['  Message-ID: %s'] \
+                       = '   メッセージ ID: %s'
+       @@catalog['    FilePath: %s'] \
+                       = '    ファイルパス: %s'
+       @@catalog['    FileSize: %d'] \
+                       = '  ファイルサイズ: %s'
+       @@catalog['Related Path: %s'] \
+                       = '関連ディレクトリ: %s'
+       @@catalog['Related File: %d) %s'] \
+                       = '    関連ファイル: %d) %s'
        @@catalog['Mail not selected.'] \
                        = 'メールが選択されていません。'
 
@@ -102,7 +106,7 @@ class Intl
                        = 'フォルダ名: '
 
        @@catalog['Change current account to [%s].'] \
-                       = '既定のアカウントを[%s]に変更しました。'
+                       = '既定のアカウントを [%s] に変更しました。'
        @@catalog['Create new message.'] \
                        = '新規にメールを編集します。'
        @@catalog['Create reply message.'] \
@@ -120,7 +124,7 @@ class Intl
        @@catalog['Failed to editing mail. reason=[%s]'] \
                        = 'メールの編集に失敗しました。理由=[%s]'
        @@catalog['The message was stored in the [%s] folder.'] \
-                       = '編集したメールを[%s]フォルダに保存しました。'
+                       = '編集したメールを [%s] フォルダに保存しました。'
        @@catalog['The message was overwrited.'] \
                        = '既存のメールを上書きしました。'
        @@catalog['The message was stored as another one (edit collision was detected).'] \
@@ -131,7 +135,7 @@ class Intl
        @@catalog['Create new folder.'] \
                        = '新規にフォルダを作成します。'
        @@catalog['Folder [%s] created.'] \
-                       = 'フォルダ[%s]を作成しました。'
+                       = 'フォルダ [%s] を作成しました。'
        @@catalog['Edit folder configs.'] \
                        = 'フォルダの設定を編集します。'
        @@catalog['Failed to editing folder configs. reason=[%s]'] \
@@ -144,6 +148,8 @@ class Intl
                        = '未編集のフォルダの設定を破棄しました。'
        @@catalog['The file was discarded (unexpected type).'] \
                        = 'ファイルを破棄しました(未知のファイル)。'
+       @@catalog['Failed to start file manager. reason=[%s]'] \
+                       = 'ファイルマネージャの起動に失敗しました。理由=[%s]'
 
        @@catalog['Copy to'] \
                        = 'コピー先'
@@ -165,18 +171,42 @@ class Intl
        @@catalog['[No previous search string]'] \
                        = '[検索文字列が未設定です]'
 
+       @@catalog['Create related file. file=[%s]'] \
+                       = '関連ファイルを新規作成しました。ファイル=[%s]'
+       @@catalog['Skipped to create related file. file=[%s] reason=[File exist]'] \
+                       = '関連ファイルの新規作成をスキップしました。ファイル=[%s] 理由=[ファイルが存在します]'
+       @@catalog['Extracted attached file. file=[%s]'] \
+                       = '添付ファイルを展開しました。ファイル=[%s]'
+       @@catalog['Skipped to extract attached file. file=[%s] reason=[File exist]'] \
+                       = '添付ファイルの展開をスキップしました。ファイル=[%s] 理由=[ファイルが存在します]'
+
+       @@catalog['X-Mave-Extract-Targets header is not collect. header=[%s]'] \
+                       = 'X-Mave-Extract-Targets ヘッダの記載が正しくありません。ヘッダ=[%s]'
+       @@catalog['Target folder is not found. folder=[%s]'] \
+                       = '指定のフォルダが存在しません。フォルダ=[%s]'
+       @@catalog['Target message_id is not found. message_id=[%s]'] \
+                       = '指定のメッセージ ID を持つメールが見つかりません。メッセージ ID=[%s]'
+       @@catalog['Target part is not found. seq=[%s]'] \
+                       = '指定番目のメールパートが見つかりません。番目=[%s]'
+       @@catalog['Failed to extract attachment. file=[%s] reason=[%s]'] \
+                       = '添付ファイルの展開に失敗しました。ファイル=[%s] 理由=[%s]'
+
        @@catalog['Aborted.'] \
                        = '中断しました。'
 
        @@catalog['Function not provided yet.'] \
                        = '該当機能は未だ実装されていません。'
 
-       @@catalog['Prepare the root directory [%s].'] \
-                       = 'データディレクトリ [%s] を作成して下さい。'
+       @@catalog['Prepare the root directory [%2$s]. reason=[%1$s]'] \
+                       = 'データディレクトリ [%2$s] を作成して下さい。理由=[%1$s]'
+       @@catalog['Another instance is already running [%1$s].'] \
+                       = '既に別の mave が起動しています。理由=[%1$s]'
        @@catalog['Prepare one or more enable accounts [mave.config].'] \
                        = '最低ひとつの有効メールアカウントを [mave.config] に登録して下さい。'
        @@catalog['%1$d editor%2$s alive.'] \
                        = 'エディタが %1$d つ起動中です。'
+       @@catalog['Unexpected error occurred [%1$s].'] \
+                       = '想定外のエラーが発生しました。理由=[%1$s]'
 
        @@catalog['Mave was full stopped.'] \
                        = '全系統稼働停止。'
index d114833..8f337f8 100644 (file)
@@ -25,6 +25,7 @@ account[:POP_KEEP_TIME]               = 24 * 60 * 60                                          #  サーバに残す時間(秒)
 
 account[:SMTP_SERVER]          = 'smtp.example.com'                            # メール送信(SMTP)サーバ
 
+                                                                                                                               # インポート設定
 #account[:IMPORT_COMMAND]      = %Q!/usr/bin/find /home/old_user/mave.mails -name '*.eml' | grep -E '/Inbox/' | sed 's/\\/.*\\//& /'| sort -k 2 | sed 's/ //'!
 
 @configs[:ACCOUNTS] << account
@@ -47,9 +48,37 @@ account[:SMTP_SERVER]                = 'smtp.yahoo.com'                                      # メール送信(SMTP)サーバ
 account[:SMTP_ACCOUNT]         = account['pop_account']                        #  送信アカウント
 account[:SMTP_PASSWORD]                = account['pop_password']                       #  送信パスワード
 account[:SMTP_AUTHTYPE]                = :plain
-                                                                                                                               # インポート設定
+
+@configs[:ACCOUNTS] << account
+
+#---------------------------------------------------------------
+#
+#      メールアカウント「gmail」の設定 ※要 tlsmail ライブラリ
+#
+account = {}
+account[:NAME]                         = 'Gmail'                                                       # アカウント名(必須)
+account[:ENABLE]                       = false                                                         # 有効/無効(必須)
+
+account[:USER_ADDRESS]         = 'taro-yamada@gmail.com'                       # メールアドレス(必須)
+
+account[:POP_SERVER]           = 'pop.gmail.com'                                       # メール受信(POP)サーバ
+account[:POP_PORT]                     = 995
+account[:POP_ACCOUNT]          = 'taro-yamada'                                         #  受信アカウント
+account[:POP_PASSWORD]         = 'password'                                            #  受信パスワード
+account[:POP_OVER_SSL]         = true                                                          #  SSL を使う
+
+account[:SMTP_SERVER]          = 'smtp.gmail.com'                                      # メール送信(SMTP)サーバ
+account[:SMTP_PORT]                    = 587                                                           #  25? / 465? / 587?
+account[:SMTP_ACCOUNT]         = account[:POP_ACCOUNT]
+account[:SMTP_PASSWORD]                = account[:POP_PASSWORD]
+account[:SMTP_AUTHTYPE]                = :plain
+account[:SMTP_OVER_TLS]                = true                                                          #  TLS を使う
+
 @configs[:ACCOUNTS] << account
 
+# tlsmail ライブラリをロード
+#require '/usr/lib/ruby/gems/1.8/gems/tlsmail-0.0.1/lib/tlsmail.rb'
+
 #---------------------------------------------------------------
 #
 #      メールアカウント「MailManual」の設定 ※添付のマニュアルのインポート用
@@ -76,6 +105,7 @@ account[:INBOX_FOLDER]               = 'Manual'
 @configs[:ACCOUNTS].each {|v|
 
        v[:POP_PORT]                    ||= 110
+       v[:POP_KEEP_TIME]               ||= 0
 
        v[:SMTP_PORT]                   ||= 25
        v[:SMTP_HELO]                   ||= 'localhost.localdomain'
@@ -108,7 +138,7 @@ account[:INBOX_FOLDER]              = 'Manual'
 #@configs[:ROOT_DIRECTORY]             = 'c:/Documents and Settings/username/My Documents/mails'
 @configs[:POP_DIRECTORY]               = @configs[:ROOT_DIRECTORY] + '/_pop'
 
-revision                                               = '$Revision: 3.95 $' =~ /:\s+(\d+)(\.\d+)/
+revision                                               = '$Revision: 3.96 $' =~ /:\s+(\d+)(\.\d+)/
 version                                                        = ($1.to_i - 1).to_s + $2
 sys_sig                                                        = (it = RUBY_PLATFORM) =~ /i.86-mswin32/ ? it : `uname -n -r -o`.chomp
 @configs[:MAILER]                              = "Mave version #{version} (#{$?.to_i == 0 ? sys_sig : 'unknown'})"
@@ -144,6 +174,15 @@ Intl.set_text_domain('mave-tokyo-utf8')
 #@configs[:VIEWER_TYPE]                        = 'forkexec'                                    # 別ウィンドウで起動するビューアの場合
 #@configs[:VIEWER]                             = '/usr/bin/gedit --new-window %s >/dev/null 2>&1'
 
+# ファイルマネージャ設定
+#@configs[:FILE_MANAGER_TYPE]  = 'system'                                              # 端末上で起動するファイルマネージャ(?)の場合
+@configs[:FILE_MANAGER_TYPE]   = 'forkexec'                                    # 別ウィンドウで起動するファイルマネージャの場合
+@configs[:FILE_MANAGER]                        = '/usr/bin/nautilus %s >/dev/null 2>&1'
+
+# ファイル識別コマンド設定
+@configs[:FILE_IDENTIFIER]             = '/bin/echo "application/octet-stream; charset=binary"'
+#@configs[:FILE_IDENTIFIER]            = '/usr/bin/file -b -i %s 2>/dev/null'
+
 #===============================================================================
 #
 #      時刻表現定義
index ee83d5a..512507e 100644 (file)
 #
 def bind?(mail, account)
 
-       # 同一のメールを重複して受信したら捨てる
+#      振り分け設定のデバッグ用
+#      debug("bind?: [%s] [%s] [%s]" % [@name, nil | ((it = mail.from.decode_mh) =~ /^田中/), it])
+
+       # 同一のメールを重複して受信したら捨てる設定
        unless(@name == account[:TRASH_FOLDER])
                # 重複するメールなら、ゴミ箱宛のマークを付けて、受け取らない
                mail.binding = 'dup' if(@sq_messageid[mail.message_id])
index 280e314..eb79e54 100644 (file)
@@ -72,6 +72,8 @@ keymap[                       (key['C-x'] <<  8) +    key['m']                ] = :mk_global_move
 keymap[                        (key['C-x'] <<  8) +    key['c']                ] = :mk_global_copy
 keymap[                        (key['C-x'] <<  8) +    key['d']                ] = :mk_global_delete
 
+keymap[                        (key['ESC'] <<  8) +    key['f']                ] = :mk_global_call_file_manager
+
 keymap[                                                                        key['q']                ] = :mk_global_kill_mave
 keymap[                        (key['C-x'] <<  8) +    key['C-c']              ] = :mk_global_kill_mave
 
@@ -149,6 +151,9 @@ keymap[                     (key['C-x'] <<  8) +    key['j']                ] = :mk_join
 keymap[                        (key['C-x'] <<  8) +    key['J']                ] = :mk_unjoin
 keymap[                        (key['ESC'] <<  8) +    key['j']                ] = :mk_rejoin
 
+keymap[                        (key['C-x'] <<  8) +    key['x']                ] = :mk_extract_attachments
+keymap[                        (key['C-x'] <<  8) +    key['a']                ] = :mi_enclose_attachments                     # 内部通信用
+
 keymap[                        (key['C-x'] <<  8) +    key['i']                ] = :mk_identify_mail
 
 keymap[                                                                        :PREFIX                 ] = prefix_keymap
@@ -170,11 +175,17 @@ keymap[                                                                   key['G']                ] = :mk_end_of_message
 keymap[                        (key['ESC'] <<  8) +    key['<']                ] = :mk_beginning_of_message
 keymap[                        (key['ESC'] <<  8) +    key['>']                ] = :mk_end_of_message
 
+keymap[                                                                        key['r']                ] = :mk_toggle_red
+keymap[                                                                        key['f']                ] = :mk_toggle_flag
+keymap[                                                                        key['n']                ] = :mk_toggle_notice
+
 keymap[                                                                        key['C-s']              ] = :mk_isearch_forward
 keymap[                                                                        key['C-r']              ] = :mk_isearch_backward
 keymap[                                                                        key['/']                ] = :mk_isearch_forward
 keymap[                                                                        key['?']                ] = :mk_isearch_backward
 
+keymap[                        (key['C-x'] <<  8) +    key['x']                ] = :mk_extract_attachment
+
 keymap[                        (key['C-x'] <<  8) +    key['i']                ] = :mk_identify_mail
 
 keymap[                                                                        :PREFIX                 ] = prefix_keymap
index ced5dd9..2c420c8 100755 (executable)
@@ -41,14 +41,14 @@ entries << {                # エラい人(?)のエントリ(詳細サンプル)
 
 # その他のエントリ(簡易サンプル)
 entries << { :MAIL => 'x-tanaka@google.com',                                   :ID => '田中',                                                                        }
-entries << { :MAIL => 'y-kato@yahoo.co.jp',                                            :ID => '加藤@private',        :SEND => 'かとちゃん'      }
-entries << { :MAIL => 'z-suzuki@abc.co.jp',                                            :ID => '鈴木@ABC',            :SEND => '鈴木さん'         }
+entries << { :MAIL => 'y-kato@yahoo.co.jp',                                            :ID => '加藤@private',        :SEND => 'かとちゃん',     }
+entries << { :MAIL => 'z-suzuki@abc.co.jp',                                            :ID => '鈴木@ABC',            :SEND => '鈴木さん',        }
 
 entries << { :MAIL => 'furutanian@gmail.com',                                  :ID => '開発者',                                                             }
 entries << { :MAIL => 'mave_user@example.com',                                 :ID => 'メイヴユーザ',                                                    }
 
 # DB への登録
-address_db = GDBM.new(@configs[:ROOT_DIRECTORY] + '/mave.address')
+address_db = GDBM.new(@configs[:ROOT_DIRECTORY] + '/mave.address', 0600)
 
 mails = {}; ids = {}                                                                                   # 無指定/重複チェック用
 entries.each {|e|
index 2901784..728167f 100644 (file)
@@ -117,6 +117,46 @@ class String
 
        #-----------------------------------------------------------
        #
+       #       RFC 2231 拡張表現のエンコーダ
+       #
+       #               http://tools.ietf.org/html/rfc2231
+       #
+       @@rfc2231_encoders = {}
+       @@current_rfc2231_encode_charset = 'UTF-8'
+
+       def self.bind_rfc2231_encoder(code)
+               @@rfc2231_encoders[code.upcase] = Proc.new
+       end
+
+       def self.set_rfc2231_encode_charset(charset)
+               @@current_rfc2231_encode_charset = charset
+       end
+
+       def rfc2231_encode(attr, n = 78)
+               @@rfc2231_encoders[@@current_rfc2231_encode_charset].call(self, attr, n, Proc.new)
+       end
+
+       #-----------------------------------------------------------
+       #
+       #       value のエンコーダ
+       #
+       def value_encode
+               self =~ /[^-.0-9A-Z_]/i ? "\"#{self.gsub(/"/, '\"')}\"" : self
+       end
+
+       #-----------------------------------------------------------
+       #
+       #       ext-octet のデコーダ、エンコーダ
+       #
+       def ext_decode
+               self.gsub(/%([0-9A-F]{2})/i) { $1.to_i(16).chr }
+       end
+       def ext_encode
+               self.gsub(/[^-.0-9A-Z_]/i) {|c| '%%%02X' % c[0] }
+       end
+
+       #-----------------------------------------------------------
+       #
        #       文字列を指定の長さに切り詰める
        #
        @@wsizer = {}
@@ -258,8 +298,9 @@ String.bind_decoder('7BIT') {|str|                                                          # 7bit decoder
 String.bind_decoder('8BIT') {|str|                                                             # 8bit decoder
        str
 }
-String.bind_decoder('BINARY') {|str|                                                   # binary decoder?
-       '-- binary --'
+String.bind_decoder('BINARY') {|str, out_code|                                 # binary decoder?
+#      '-- binary --'
+       str.inspect
 }
 String.bind_decoder('BASE64') {|str|                                                   # Base64 decoder
        str.unpack('m')[0]
@@ -285,6 +326,12 @@ String.bind_decoder('US-ASCII') {|str, out_code|                           # us-ascii decoder
 String.bind_decoder('ISO-2022-JP') {|str, out_code|                            # iso-2022-jp decoder
        str.kconv(String.charset(out_code), Kconv::JIS)
 }
+String.bind_decoder('ISO-2022-JP-1') {|str, out_code|                  # iso-2022-jp-1 decoder
+       str.kconv(String.charset(out_code), Kconv::JIS)
+}
+String.bind_decoder('ISO-2022-JP-2') {|str, out_code|                  # iso-2022-jp-2 decoder
+       str.kconv(String.charset(out_code), Kconv::JIS)
+}
 String.bind_decoder('SHIFT_JIS') {|str, out_code|                              # shift_jis decoder
        str.kconv(String.charset(out_code), Kconv::SJIS)
 }
@@ -333,6 +380,21 @@ String.bind_each_snipper('UTF-8') {|str, n, max, proc|                     # 指定の長さに切
        end
 }
 
+String.bind_rfc2231_encoder('UTF-8') {|str, attr, n, proc|             # RFC 2231 拡張表現にエンコードして返す(添付ファイル名指定用)
+       multi = false; head = ''; str =~ /[\xC0-\xFD]/ and multi = true and head = "utf8''"
+       w = n - attr.size - "\t*n*=;".size - head.size
+       nth = -1; nl = ''; el = ''; str.gsub(/./u) {|nc|
+               multi = true if(!multi and nc =~ /[\xC0-\xFD]/)
+               if(lnl = nl and lel = el and nl += nc and (el += (ec = nc.ext_encode)).size > w)
+                       proc.call("\t%s*%d%s=%s%s;" % [attr, nth += 1, multi ? '*' : '', head, multi ? lel : lnl.value_encode])
+                       multi = false; head = ''
+                       w = n - attr.size - "\t*n*=;".size - head.size
+                       nl = nc; el = ec
+               end
+       }
+       proc.call("\t%s%s%s=%s%s" % [attr, nth == -1 ? '' : "*#{(nth += 1).to_s}", multi ? '*': '', head, multi ? el : nl.value_encode])
+}
+
 #     漢字: 0xA1-0xFE 0xA1-0xFE
 # 半角カナ: 0x8E 0xA1-0xDF 
 # 補助漢字: 0x8F 0xA1-0xFE 0xA1-0xFE
index 344b113..bcd777b 100644 (file)
@@ -79,6 +79,8 @@ class MaveController
                        :mk_global_view                                 => method(:view_something),
                        :mk_global_view_raw                             => method(:view_raw_something),
 
+                       :mk_global_call_file_manager    => method(:call_file_manager),
+
                        :mi_pickup_file                                 => method(:pickup_file),
                }
        end
@@ -227,28 +229,32 @@ class MaveController
                                                        it = mail.to  and rcpt_to << it
                                                        it = mail.cc  and rcpt_to << it
                                                        it = mail.bcc and rcpt_to << it
-                                                       rcpt_to = rcpt_to.join(',').split(/\s*,\s*/)
+                                                       rcpt_to = rcpt_to.join(',').strip.split(/\s*,\s*/)
                                                        rcpt_to.each {|to|
                                                                to.gsub!(/.*\<(.+)\>.*/) { $1 }
                                                        }
                                                        @models[:STATUS].log(['rcpt to=%s', rcpt_to.inspect]) if(debug = false) # 送信先のデバッグ
 
+                                                       outbox_folder.enclose_attachments(mail) # 必要なら、メールに添付ファイルを入れ込む
+                                                       #### pre send script を呼ぶ機能を追加
+
                                                        result = smtp.ready(account.mail_from, rcpt_to) {|fw|
-                                                               mail.headers_each(nobcc = true) {|l|
-                                                                       fw.write(l + "\r\n")
+                                                               mail.headers_each(nobcc = true) {|line|
+                                                                       fw.write(line + "\r\n")
                                                                }
                                                                fw.write("\r\n")
-                                                               mail.body_each {|l|
-                                                                       fw.write(l.chomp.encode_body('ISO-2022-JP') + "\r\n")
+                                                               mail.raw_body_each {|line|
+                                                                       fw.write(line + "\r\n")
                                                                }
                                                        }
-                                                       outbox_folder.delete_mail(sq)
-                                                       sent_folder.add_mail(mail)
-
                                                        m_mail += 1; n_mail += 1
                                                        result_message = RUBY_VERSION >= '1.8.7' ? result.message : result
                                                        @models[:STATUS].log([_('Sent (%1$d/%2$d) [%3$s] to [%4$s] [%5$s]'),
                                                                n_mail, max_n_mail, result_message.chomp, mail.pseudo_to, mail.subject.decode_mh])
+
+                                                       flags = outbox_folder.delete_mail(sq)
+                                                       sent_folder.add_mail(mail, flags)
+                                                       outbox_folder.move_related_directory(mail.unique_name, sent_folder)
                                                }
                                        }
                                end
@@ -460,14 +466,20 @@ class MaveController
                                mail = MavePseudoMail.new({:CONFIGS => @configs, :FILE => File.new(@pop_directory.path + '/' + editfile[:HALFNAME])})
                                unless(editfile[:MODE] == :EDIT)                                                                # 新規
                                        folder = @models[:FOLDERS].open_folder(editfile[:ACCOUNT][:DRAFT_FOLDER])
+                                       create_new_relations(mail, folder)                                                      # 新規関連ファイル作成処理
+                                       extract_attachments(mail, folder)                                                       # 添付ファイル展開処理
                                        folder.add_mail(mail)
                                        @models[:FOLDERS].unred(folder)
                                        @models[:STATUS].log([_('The message was stored in the [%s] folder.'), folder.configs[:LIST_NAME]])
                                else
                                        if(editfile[:SOURCEHASH] == editfile[:MAIL].md5)                        # (編集前 == 現在)?
+                                               create_new_relations(mail, editfile[:MAIL].folder)              # 新規関連ファイル作成処理
+                                               extract_attachments(mail, editfile[:MAIL].folder)               # 添付ファイル展開処理
                                                editfile[:MAIL].folder.overwrite_mail(mail, editfile[:MAIL])
                                                @models[:STATUS].log([_('The message was overwrited.')])
                                        else
+                                               create_new_relations(mail, editfile[:MAIL].folder)              # 新規関連ファイル作成処理
+                                               extract_attachments(mail, editfile[:MAIL].folder)               # 添付ファイル展開処理
                                                editfile[:MAIL].folder.add_mail(mail)
                                                @models[:FOLDERS].unred(editfile[:MAIL].folder)
                                                @models[:STATUS].log([_('The message was stored as another one (edit collision was detected).')])
@@ -494,6 +506,83 @@ class MaveController
 
        #-----------------------------------------------------------
        #
+       #       新規に関連ファイルを作成する
+       #
+       def create_new_relations(mail, folder)
+               mail.x_mave_relations.each {|relation|
+                       if(folder.create_new_relation(mail.unique_name, relation))
+                               @models[:STATUS].log([_('Create related file. file=[%s]'), relation])
+#                      else
+#                              @models[:STATUS].log([_('Skipped to create related file. file=[%s] reason=[File exist]'), relation])
+                       end
+               }
+       end
+
+       #-----------------------------------------------------------
+       #
+       #       メールパート(添付)を展開する
+       #
+       def extract_attachments(mail, folder)
+               filenames = []; faileds = []
+               mail.each_x_mave_extract_target_info {|relation|
+                       begin
+                               relation.is_a?(String) and raise('format')
+                               rfolder = @models[:FOLDERS].open_folder(relation[:FOLDER], false) or raise('folder')
+                               rmail = rfolder.get_mail_by_messageid(relation[:MESSAGE_ID]) or raise('message_id')
+                               part = rmail.get_parts_info(true)[relation[:SEQ].to_i] or raise('seq')
+                               if(folder.extract_attachment(mail.unique_name, relation[:FILENAME], part[:PART]))
+                                       @models[:STATUS].log([_('Extracted attached file. file=[%s]'), relation[:FILENAME]])
+                               else
+                                       @models[:STATUS].log([_('Skipped to extract attached file. file=[%s] reason=[File exist]'), relation[:FILENAME]])
+                               end
+                               filenames << relation[:FILENAME]
+                       rescue
+                               case($!.message)
+                               when('format');         @models[:STATUS].log([_('X-Mave-Extract-Targets header is not collect. header=[%s]'), relation])
+                               when('folder');         @models[:STATUS].log([_('Target folder is not found. folder=[%s]'), relation[:FOLDER]])
+                               when('message_id');     @models[:STATUS].log([_('Target message_id is not found. message_id=[%s]'), relation[:MESSAGE_ID]])
+                               when('seq');            @models[:STATUS].log([_('Target part is not found. seq=[%s]'), relation[:SEQ]])
+                               else;                           @models[:STATUS].log([_('Failed to extract attachment. file=[%s] reason=[%s]'), relation[:FILENAME], $!.message.split(/\r?\n/)[0]])
+                               end
+                               faileds << relation if(relation.is_a?(String))
+                               faileds << 'folder=%s; message-id=%s; seq=%d; filename=%s' % \
+                                       [relation[:FOLDER], relation[:MESSAGE_ID], relation[:SEQ], relation[:FILENAME]] if(relation.is_a?(Hash))
+                       end
+               }
+               mail.set_x_mave_extract_targets(faileds)
+               mail.set_x_mave_relations(filenames)
+       end
+
+       #-----------------------------------------------------------
+       #  
+       #       ファイルマネージャを呼び出す
+       #
+       def call_file_manager
+               target_dir = nil
+               if((it = @views.current).is_a?(MaveMail))
+                       target_dir = it.related_path
+               elsif((it = @views.current).is_a?(MaveFolder))
+                       target_dir = it.path
+               end
+               if(target_dir)
+                       begin
+                               unless(@configs[:FILE_MANAGER_TYPE] == 'forkexec')
+                                       @views.close
+                                       system(@configs[:FILE_MANAGER] % target_dir)
+                                       @views.reopen
+                               else
+                                       pid = fork {
+                                               exec(@configs[:FILE_MANAGER] % target_dir)
+                                       }
+                               end
+                       rescue
+                               @models[:STATUS].log([_('Failed to start file manager. reason=[%s]'), $!.message.split(/\r?\n/)[0]])
+                       end
+               end
+       end
+
+       #-----------------------------------------------------------
+       #
        #       キャラクタセット情報の表示、切り替え(デバッグ用)
        #
        def toggle_what_charset
index 72dec52..74cc913 100644 (file)
@@ -563,6 +563,9 @@ class MaveSummaryView < MaveSelectView
                        :mk_global_copy                                 => method(:copy_mail),
                        :mk_global_delete                               => method(:delete_mail),
 
+                       :mk_extract_attachments                 => method(:extract_attachments),
+                       :mi_enclose_attachments                 => method(:enclose_attachments),
+
                        :mk_identify_mail                               => method(:identify_mail),
                })
        end
@@ -571,6 +574,7 @@ class MaveSummaryView < MaveSelectView
                @topsq = nil
                @folder = folder_model                                                                  # ビューにモデルを関連づける
                @folder.tie(self, :SUMMARY) if(@folder)                                 # 表示担当モデルに自分を通知する
+               set_title((_(@name.to_s.downcase) + ': ' + folder_model.configs[:LIST_NAME]).decode_cs(@views.charset, 'UTF-8').enspc)
                list_items
        end
 
@@ -714,6 +718,7 @@ class MaveSummaryView < MaveSelectView
                                state ? @folder.unred(sq) : @folder.red(sq)
                        }
                end
+#              @folders.dirty                                                                                  #### 届かない
        end
 
        def toggle_flag
@@ -882,15 +887,17 @@ class MaveSummaryView < MaveSelectView
        def move_mail(copy = false)                                                                     # メールを移動
                if(@marks.size == 0)
                        callback = Proc.new {|chosen|
-                               @folder.delete_mail(@items[@nth][:SQ]) unless(copy)     #### 先にファイルを消して問題ない?
-                               chosen.add_mail(@items[@nth][:INSTANCE])
+                               flags = @folder.delete_mail(@items[@nth][:SQ]) unless(copy)     #### 先にファイルを消して問題ない?
+                               chosen.add_mail(@items[@nth][:INSTANCE], flags)
+                               @folder.move_related_directory(@items[@nth][:INSTANCE].unique_name, chosen)     #### copy の場合
                                @views.activate(:SUMMARY)
                        }
                else
                        callback = Proc.new {|chosen|
                                @marks.keys.sort.each {|sq|
-                                       @folder.delete_mail(sq) unless(copy)
-                                       chosen.add_mail(@marks[sq])
+                                       flags = @folder.delete_mail(sq) unless(copy)
+                                       chosen.add_mail(@marks[sq], flags)
+                                       @folder.move_related_directory(@marks[sq].unique_name, chosen)
                                }
                                unmark_all
                                @views.activate(:SUMMARY)
@@ -907,19 +914,43 @@ class MaveSummaryView < MaveSelectView
        end
 
        def delete_mail                                                                                         # メールを削除
+               trash_folder = @views.is_trash?(@folder) ? nil : @views.current_trash_folder
                if(@marks.size == 0)
-                       @folder.delete_mail(@items[@nth][:SQ])
-                       @views.current_trash_folder.add_mail(@items[@nth][:INSTANCE]) unless(@views.is_trash?(@folder))
+                       flags = @folder.delete_mail(@items[@nth][:SQ])
+                       trash_folder.add_mail(@items[@nth][:INSTANCE], flags) if(trash_folder)
+                       @folder.move_related_directory(@items[@nth][:INSTANCE].unique_name, trash_folder)
                else
-                       is_trash = @views.is_trash?(@folder); current_trash_folder = @views.current_trash_folder
                        @marks.keys.sort.each {|sq|
-                               @folder.delete_mail(sq)
-                               current_trash_folder.add_mail(@marks[sq]) unless(is_trash)
+                               flags = @folder.delete_mail(sq)
+                               trash_folder.add_mail(@marks[sq], flags) if(trash_folder)
+                               @folder.move_related_directory(@marks[sq].unique_name, trash_folder)
                        }
                        unmark_all
                end
        end
 
+       #-------------------------------------- MaveSummaryView ----
+       #
+       #       メールの添付ファイルをすべて展開する
+       #
+       def extract_attachments
+               @folder.extract_attachments(@current) {|result, part|
+                       if(result)
+                               @status.log([_('Extracted attached file. file=[%s]'), part[:FILENAME]])
+                       else
+                               @status.log([_('Skipped to extract attached file. file=[%s] reason=[File exist]'), part[:FILENAME]])
+                       end
+               }
+       end
+
+       #-------------------------------------- MaveSummaryView ----
+       #
+       #       メールに添付ファイルを入れ込む
+       #
+       def enclose_attachments
+               @folder.enclose_attachments(@current)
+       end
+
        def identify_mail                                                                                       # メール情報を表示
                @status.log(['==== ' + _('Mail Identification') + ' ===='])
                if(@current)
@@ -987,6 +1018,14 @@ class MavePreviewView < MaveBaseView
                        :mk_isearch_forward                             => method(:isearch_forward),
                        :mk_isearch_backward                    => method(:isearch_backward),
 
+                       :mk_toggle_red                                  => method(:toggle_red),
+                       :mk_toggle_flag                                 => method(:toggle_flag),
+                       :mk_toggle_notice                               => method(:toggle_notice),
+
+                       :mk_global_delete                               => method(:delete_mail),
+
+                       :mk_extract_attachment                  => method(:extract_attachment),
+
                        :mk_identify_mail                               => method(:identify_mail),
                })
        end
@@ -1041,6 +1080,18 @@ class MavePreviewView < MaveBaseView
        def end_of_message
        end
 
+       def toggle_red
+               (it = @mail.folder).red?(sq = @mail.sq) ? it.unred(sq) : it.red(sq)
+       end
+
+       def toggle_flag
+               (it = @mail.folder).flag?(sq = @mail.sq) ? it.unflag(sq) : it.flag(sq)
+       end
+
+       def toggle_notice
+               (it = @mail.folder).notice?(sq = @mail.sq) ? it.unnotice(sq) : it.notice(sq)
+       end
+
        #-------------------------------------- MavePreviewView ----
        #
        #       インクリメンタル検索ビュー、起動処理
@@ -1079,6 +1130,33 @@ class MavePreviewView < MaveBaseView
                @topline -= found_n if(found_n)                                                 # (カーソル/画面)移動
        end
 
+       #-------------------------------------- MavePreviewView ----
+       #
+       #       メールの移動、コピー、削除
+       #
+#      def move_mail(copy = false)                                                                     # メールを移動
+#      def copy_mail                                                                                           # メールをコピー
+       def delete_mail                                                                                         # メールを削除
+               trash_folder = @views.is_trash?(@mail.folder) ? nil : @views.current_trash_folder
+               flags = @mail.folder.delete_mail(@mail.sq)
+               trash_folder.add_mail(@mail, flags) if(trash_folder)
+               @mail.folder.move_related_directory(@mail.unique_name, trash_folder)
+       end
+
+       #-------------------------------------- MavePreviewView ----
+       #
+       #       指定のメールの添付ファイルを展開する
+       #
+       def extract_attachment
+               @mail.folder.extract_attachments(@mail, @topline + @cur_pos) {|result, part|
+                       if(result)
+                               @status.log([_('Extracted attached file. file=[%s]'), part[:FILENAME]])
+                       else
+                               @status.log([_('Skipped to extract attached file. file=[%s] reason=[File exist]'), part[:FILENAME]])
+                       end
+               }
+       end
+
        def identify_mail                                                                                       # メール情報を表示
                @status.log(['==== ' + _('Mail Identification') + ' ===='])
                if(@mail)
@@ -1133,7 +1211,8 @@ class MavePreviewView < MaveBaseView
                        (@topline..@topline + 9999).each {|nth|
                                d0.call('~') and next if(nth < 0)
                                line = @mail[nth] or break
-                               d1.call(line.chomp.gsub(/[\x00-\x1F]/, '^x'), nth == cur_nth) or break
+####                   d1.call(line.chomp.gsub(/[\x00-\x1F]/, '^x'), nth == cur_nth) or break
+                               d1.call(line.chomp, nth == cur_nth) or break
                        }
                else
                        d1.call("-- #{_('no mail')} --", true)
index 23ac6a6..96b9df8 100644 (file)
@@ -18,7 +18,7 @@ class MaveShortcuts
        end
 
        def assign(hint, instance)
-               hint.gsub(/[^0-9a-zA-Z]/, '').concat(@@rsv).each_byte {|key|
+               hint.gsub(/[^0-9A-Z]/i, '').concat(@@rsv).each_byte {|key|
                        @rv[(@fw[key] = instance).object_id] = key and break unless(@fw[key])
                }
        end
@@ -94,14 +94,23 @@ class FlagGDBM < GDBM
                self[key] ? self[key][@pos_flag[flag]] : @default
        end
 
-       def reset_n(sym = @@n_mail_sym)
-               self[sym] = '0'
+       def set_flags(key, flags)
+               self[key] = flags
+       end
+
+       def get_flags(key)
+               self[key] ||= @default.chr * @max_flags
        end
 
        def get_n(sym = @@n_mail_sym)
                self[sym]
        end
 
+       def set_n(sym = @@n_mail_sym, n = 0)
+               self[sym] = n.to_s
+       end
+       alias :reset_n :set_n
+
        def n_is_zero?(sym = @@n_mail_sym)
                self[sym] == '0'
        end
@@ -190,6 +199,7 @@ class MaveAccount < MaveBaseModel
                @pop_port               = @account[:POP_PORT]
                @pop_account    = @account[:POP_ACCOUNT]
                @pop_password   = @account[:POP_PASSWORD]
+               @pop_over_ssl   = @account[:POP_OVER_SSL]
                @pop_keep_time  = @account[:POP_KEEP_TIME]
 
                @mail_from              = @account[:USER_ADDRESS]
@@ -200,11 +210,12 @@ class MaveAccount < MaveBaseModel
                @smtp_account   = @account[:SMTP_ACCOUNT]
                @smtp_password  = @account[:SMTP_PASSWORD]
                @smtp_authtype  = @account[:SMTP_AUTHTYPE]
+               @smtp_over_tls  = @account[:SMTP_OVER_TLS]
 
                @import_command = @account[:IMPORT_COMMAND]
 
                @hash_id                = Digest::MD5.hexdigest(@account[:USER_ADDRESS])[0, 8]
-               @pop_uids               =   GDBM.new(@configs[:ROOT_DIRECTORY] + "/pop_uids_#{name}")
+               @pop_uids               =   GDBM.new(@configs[:ROOT_DIRECTORY] + "/pop_uids_#{name}", 0600)
        end
 
        #-----------------------------------------------------------
@@ -221,29 +232,36 @@ class MaveAccount < MaveBaseModel
        #
        def pop
                now = Time.new.to_i
-               Net::POP3.start(@pop_server, @pop_port, @pop_account, @pop_password) {|pop|
-                       yield(_('Connected.'))
-                       popmails = []
-                       pop.mails.each {|popmail|
-                               if(@pop_uids[popmail.unique_id])                                # 既知のメール
-                                       if(@pop_uids[popmail.unique_id].to_i < now - @pop_keep_time)
-                                               popmail.delete
-                                               @pop_uids.delete(popmail.unique_id)
+               begin
+                       Net::POP3.enable_ssl(OpenSSL::SSL::VERIFY_NONE) if(@pop_over_ssl)
+                       Net::POP3.start(@pop_server, @pop_port, @pop_account, @pop_password) {|pop|
+                               yield(_('Connected.'))
+                               popmails = []
+                               pop.mails.each {|popmail|
+                                       if(it = @pop_uids[popmail.unique_id])           # 既知のメール
+                                               if(it.to_i < now - @pop_keep_time)
+                                                       popmail.delete
+                                                       @pop_uids.delete(popmail.unique_id)
+                                               end
+                                       else                                                                            # 未知のメール
+                                               popmails << popmail
                                        end
-                               else                                                                                    # 未知のメール
-                                       popmails << popmail
-                               end
-                       }
-                       yield(popmails.size)
-                       popmails.each {|popmail|
-                               yield(popmail)
-                               @pop_uids[popmail.unique_id] = now.to_s
-                               @dirty += 1
-                       }
-                       @pop_uids.keys.each {|unique_id|
-                               @pop_uids.delete(unique_id) if(@pop_uids[unique_id].to_i < now - @pop_keep_time)
-                       }
-               } if(@pop_server)
+                               }
+                               yield(popmails.size)
+                               popmails.each {|popmail|
+                                       yield(popmail)
+                                       @pop_uids[popmail.unique_id] = now.to_s
+                                       @dirty += 1
+                               }
+                               @pop_uids.keys.each {|unique_id|
+                                       @pop_uids.delete(unique_id) if(@pop_uids[unique_id].to_i < now - @pop_keep_time)
+                               }
+                       } if(@pop_server)
+               rescue StandardError, Timeout::Error
+                       raise($!.message.split(/\r?\n/)[0])
+               ensure
+                       Net::POP3.disable_ssl if(@pop_over_ssl)
+               end
        end
 
        #-----------------------------------------------------------
@@ -251,10 +269,17 @@ class MaveAccount < MaveBaseModel
        #       SMTP する
        #
        def smtp
-               Net::SMTP.start(@smtp_server, @smtp_port, @smtp_helo, @smtp_account, @smtp_password, @smtp_authtype) {|smtp|
-                       yield(_('Connected.'))
-                       yield(smtp)
-               } if(@smtp_server)
+               begin
+                       Net::SMTP.enable_tls(OpenSSL::SSL::VERIFY_NONE) if(@smtp_over_tls)
+                       Net::SMTP.start(@smtp_server, @smtp_port, @smtp_helo, @smtp_account, @smtp_password, @smtp_authtype) {|smtp|
+                               yield(_('Connected.'))
+                               yield(smtp)
+                       } if(@smtp_server)
+               rescue StandardError, Timeout::Error
+                       raise($!.message.split(/\r?\n/)[0])
+               ensure
+                       Net::SMTP.disable_tls if(@smtp_over_tls)
+               end
        end
 
        def close
@@ -344,9 +369,9 @@ class MaveDirectory < MaveBaseModel
                @cluster_ext    = @configs[:CLUSTER_EXT]
 
                unless(File.directory?(@path))                                                  # (クラスタ)ディレクトリ作成
-                       Dir.mkdir(@path)
+                       Dir.mkdir(@path, 0700)
                        (0...@cluster_dirs).each {|nth|
-                               Dir.mkdir('%s/%04d.%s' % [@path, nth, @cluster_ext])
+                               Dir.mkdir('%s/%04d.%s' % [@path, nth, @cluster_ext], 0700)
                        }
                end
 
@@ -356,7 +381,7 @@ class MaveDirectory < MaveBaseModel
                }
                @cluster_paths << '' if(@cluster_paths.empty?)
 
-               @filename_sq    = SqGDBM.new(@path + '/filename_sq')    # ベースファイル名<-メール連番
+               @filename_sq    = SqGDBM.new(@path + '/filename_sq', 0600)      # ベースファイル名<-メール連番
        end
 
        #---------------------------------------- MaveDirectory ----
@@ -365,7 +390,7 @@ class MaveDirectory < MaveBaseModel
        #
        def create_mailfile
                halfname = '%s%08d.eml' % [@cluster_paths[(it = @filename_sq.inc_sq.to_i) % @cluster_paths.size], it]
-               File.open(@path + '/' + halfname, 'w') {|fh|
+               File.open(@path + '/' + halfname, 'w', 0600) {|fh|
                        yield(fh)
                }
                @dirty += 1
@@ -377,7 +402,7 @@ class MaveDirectory < MaveBaseModel
        #       メールファイルを上書き
        #
        def overwrite_mailfile(halfname)
-               File.open(@path + '/' + halfname, 'w') {|fh|
+               File.open(@path + '/' + halfname, 'w', 0600) {|fh|
                        yield(fh)
                }
                @dirty += 1
@@ -403,6 +428,74 @@ class MaveDirectory < MaveBaseModel
 
        #---------------------------------------- MaveDirectory ----
        #
+       #       関連ディレクトリを返す
+       #
+       def related_path0
+               @path + '/attachments'
+       end
+       def related_path(unique_name)
+               related_path0 + '/' + unique_name
+       end
+
+       #---------------------------------------- MaveDirectory ----
+       #
+       #       ディレクトリ内に関連ディレクトリを生成する
+       #
+       def make_related_directory(unique_name)
+               dirname0 = related_path0
+               Dir.mkdir(dirname0, 0700) unless(File.directory?(dirname0))
+               dirname  = related_path(unique_name)
+               Dir.mkdir(dirname,  0700) unless(File.directory?(dirname))
+               dirname
+       end
+
+       #---------------------------------------- MaveDirectory ----
+       #
+       #       関連ディレクトリ内に、新規に関連ファイルを作成する
+       #       関連ディレクトリ内に、添付ファイルを展開する
+       #
+       def create_new_relation(unique_name, filename, part = nil)
+               filename = make_related_directory(unique_name) + '/' + filename
+               return(false) if(File.file?(filename))                                  # 既に存在しているなら上書きはしない
+               File.open(filename, 'w', 0600) {|fh|
+                       part.dump {|line|
+                               fh.write(line)
+                       } if(part)
+               }
+               filename
+       end
+       alias :extract_attachment :create_new_relation
+
+       #---------------------------------------- MaveDirectory ----
+       #
+       #       関連ディレクトリ内に存在するファイルを返す
+       #
+       def related_files(unique_name)
+               path = related_path(unique_name)
+               filenames = []; Dir.foreach(path) {|filename|
+                       filenames << filename unless(filename =~ /^\./)
+               } if(File.directory?(path))
+               filenames
+       end
+
+       #---------------------------------------- MaveDirectory ----
+       #
+       #       関連ディレクトリを移動/削除する
+       #
+       def move_related_directory(unique_name, to_dir)
+               from = related_path(unique_name)
+               if(to_dir)
+                       to0  = to_dir.related_path0
+                       to   = to_dir.related_path(unique_name)
+                       Dir.mkdir(to0, 0700) unless(File.directory?(to0))
+                       File.rename(from, to) if(File.directory?(from) and !File.exist?(to))
+               else                                                                                                    # to_dir が nil なら削除
+                       #### 再帰的に削除
+               end
+       end
+
+       #---------------------------------------- MaveDirectory ----
+       #
        #       最後の連番を返す
        #
        def last_sq
@@ -428,16 +521,16 @@ class MaveFolder < MaveDirectory
                super
                @name                   = params[:NAME]
 
-               @sq_rootsq              =   SqGDBM.new(@path + '/sq_rootsq')    # メール連番<-最新順ルート連番
+               @sq_rootsq              =   SqGDBM.new(@path + '/sq_rootsq', 0600)              # メール連番<-最新順ルート連番
 
-               @messageid_sq   =     GDBM.new(@path + '/messageid_sq') # メッセージID<-メール連番
-               @sq_messageid   =     GDBM.new(@path + '/sq_messageid') # メール連番<-メッセージID
+               @messageid_sq   =     GDBM.new(@path + '/messageid_sq', 0600)   # メッセージID<-メール連番
+               @sq_messageid   =     GDBM.new(@path + '/sq_messageid', 0600)   # メール連番<-メッセージID
 
-               @rootsq_sq              =     GDBM.new(@path + '/rootsq_sq')    # ルートメール連番<-メール連番
-               @parentsq_sq    =     GDBM.new(@path + '/parentsq_sq')  # 親メール連番<-メール連番
-               @childsqs_sq    =     GDBM.new(@path + '/childsqs_sq')  # 子メール連番群<-メール連番        #### 統合不可?
+               @rootsq_sq              =     GDBM.new(@path + '/rootsq_sq', 0600)              # ルートメール連番<-メール連番
+               @parentsq_sq    =     GDBM.new(@path + '/parentsq_sq', 0600)    # 親メール連番<-メール連番
+               @childsqs_sq    =     GDBM.new(@path + '/childsqs_sq', 0600)    # 子メール連番群<-メール連番        #### 統合不可?
 
-               @flags_sq               = FlagGDBM.new(@path + '/flags_sq')             # 各種フラグ群<-メール連番
+               @flags_sq               = FlagGDBM.new(@path + '/flags_sq', 0600)               # 各種フラグ群<-メール連番
                [:RED, :FLAG, :NOTICE, :FOLD].each {|flag|
                        @flags_sq.alloc_flag(flag)
                }
@@ -449,7 +542,7 @@ class MaveFolder < MaveDirectory
                begin
                        unless(File.exist?(config_filename))    ####
                                fr = File.open('mave.folderconfig.master')
-                               File.open(config_filename, 'w') {|fw| fw.write(fr.read) }
+                               File.open(config_filename, 'w', 0600) {|fw| fw.write(fr.read) }
                        end
                        File.open(config_filename) {|fh| instance_eval(fh.read) }
                rescue                                                                                                  # 設定ファイルが読めなければ適当に
@@ -482,6 +575,9 @@ class MaveFolder < MaveDirectory
        def get_mail(sq)
                sq ? MaveMail.new({:CONFIGS => @configs, :FILE => File.new(@path + '/' + @filename_sq[sq]), :FOLDER => self, :SQ => sq}) : nil
        end
+       def get_mail_by_messageid(messageid)
+               get_mail(@sq_messageid[messageid])
+       end
  
        #------------------------------------------- MaveFolder ----
        #
@@ -602,7 +698,7 @@ class MaveFolder < MaveDirectory
        #
        #       フォルダ内にメールを追加する
        #
-       def add_mail(mail)
+       def add_mail(mail, flags = nil)
                filename = create_mailfile {|fh|
                        mail.rewind
                        mail.each {|line|
@@ -642,8 +738,10 @@ class MaveFolder < MaveDirectory
                        end until(parent_sq == @rootsq_sq[parent_sq] or (parent_sq = @parentsq_sq[parent_sq] and false))
                end
 
-               # メール総数カウントアップ
-               @flags_sq.inc_n
+               @flags_sq.set_flags(sq, flags) if(flags)
+               red?(sq) and @flags_sq.inc_n('#r_mail#')                                # 既読メール総数カウントアップ
+
+               @flags_sq.inc_n                                                                                 # メール総数カウントアップ
 
                @dirty += 1
        end
@@ -669,9 +767,6 @@ class MaveFolder < MaveDirectory
                                }
                                @childsqs_sq.delete(sq)
                        end
-
-                       @flags_sq.delete(sq)
-                       delete(@filename_sq.delete(sq))                                         # ファイル本体を消す
                else
                        parent_sq = @parentsq_sq[sq]                                            # 自分の親の登録から抹消
                        @childsqs_sq[parent_sq] = (@childsqs_sq[parent_sq].split(',') - [sq]).join(',')
@@ -687,28 +782,33 @@ class MaveFolder < MaveDirectory
                                @childsqs_sq[parent_sq] = @childsqs_sq[parent_sq].split(',').concat(@childsqs_sq[sq].split(',')).sort.join(',')
                                @childsqs_sq.delete(sq)
                        end
-
-                       @flags_sq.delete(sq)
-                       delete(@filename_sq.delete(sq))                                         # ファイル本体を消す
                end
 
-               # メール総数カウントダウン
-               @flags_sq.dec_n                                                                                 #### 既読/未読の扱いは?
+               flags = @flags_sq.get_flags(sq)
+               red?(sq) and @flags_sq.dec_n('#r_mail#')                                # 既読メール総数カウントダウン
+               @flags_sq.dec_n                                                                                 # メール総数カウントダウン
+
+               @flags_sq.delete(sq)
+               delete(@filename_sq.delete(sq))                                                 # ファイル本体を消す
 
                @dirty += 1
+               flags
        end
 
        #------------------------------------------- MaveFolder ----
        #
-       #       ã\83\95ã\82©ã\83«ã\83\80å\86\85ã\81«ã\83¡ã\83¼ã\83«ã\82\92上書きする
+       #       ã\83\95ã\82©ã\83«ã\83\80å\86\85ã\81® old_mail ã\82\92 mail ã\81§上書きする
        #
-       def overwrite_mail(mail, old_mail)
+       def overwrite_mail(mail, old_mail)      
                filename = overwrite_mailfile(@filename_sq[old_mail.sq]) {|fh|
                        mail.rewind
                        mail.each {|line|
                                fh.write(line)                                                                  # ファイルコピー
                        }
                }
+               old_mail.rewind
+               old_mail.parse_header
+               old_mail.parse_body
 #              @messageid_sq[sq] = mail.message_id                                             #### メッセージ ID 等、変化するかも
 #              @sq_messageid[mail.message_id] = sq
                @dirty += 1
@@ -724,7 +824,7 @@ class MaveFolder < MaveDirectory
                }
        end
 
-       def each_sq(startsq = nil)                                                                      # 次を順に渡す
+       def each_sq(startsq = nil, into_folded = false)                         # 次を順に渡す
                unless(startsq)
                        rootsqi = @sq_rootsq.last_sq.to_i
                        started = true
@@ -734,7 +834,7 @@ class MaveFolder < MaveDirectory
                end
                while(rootsqi > 0)
                        if(sq = @sq_rootsq[rootsqi.to_s] and (it = @rootsq_sq[sq]) and it == sq)
-                               each_sq2(sq, 0) {|sq2, depth2|
+                               each_sq2(sq, 0, into_folded) {|sq2, depth2|
                                        started = true if(!started and sq2 == startsq)
                                        yield(sq2, depth2) if(started)
                                }
@@ -790,14 +890,14 @@ class MaveFolder < MaveDirectory
        #       各種フラグ処理
        #
        def red(sq)
-               red?(sq) or  @flags_sq.set_flag(sq, :RED, ?R) and @flags_sq.inc_n('#r_mail#')
+               red?(sq) or  (@flags_sq.set_flag(sq, :RED, ?R) and @flags_sq.inc_n('#r_mail#'))
                @dirty += 1
        end
        def red?(sq)
                @flags_sq.get_flag(sq, :RED) == ?R
        end
        def unred(sq)
-               red?(sq) and @flags_sq.set_flag(sq, :RED, ?_) and @flags_sq.dec_n('#r_mail#')
+               red?(sq) and (@flags_sq.set_flag(sq, :RED, ?_) and @flags_sq.dec_n('#r_mail#'))
                @dirty += 1
        end
 
@@ -839,6 +939,37 @@ class MaveFolder < MaveDirectory
                @dirty += 1
        end
 
+       #------------------------------------------- MaveFolder ----
+       #
+       #       メールの添付ファイルを展開する
+       #
+       def extract_attachments(mail, nth = nil)
+               target_part = nth ? mail.get_part(nth) : nil
+               mail.get_parts_info.each {|part|
+                       if(!target_part or target_part == part[:PART])
+                               result = extract_attachment(mail.unique_name, part[:FILENAME], part[:PART])
+                               yield(result, part)
+                       end
+               }
+       end
+
+       #------------------------------------------- MaveFolder ----
+       #
+       #       メールに添付ファイルを入れ込む
+       #
+       def enclose_attachments(source_mail)
+               return if(source_mail.x_mave_attachments.size == 0)
+               halfname = create_mailfile {|fh|                                                # 一時ファイルに書き出す
+                       MavePseudoMail.new({:CONFIGS => @configs, :MODE => :ENCLOSE, :MAIL => source_mail}).pseudo_each {|line|
+                               fh.write(line + "\n")
+                       }
+               }
+               mail = MavePseudoMail.new({:CONFIGS => @configs, :FILE => File.new(path + '/' + halfname)})
+               overwrite_mail(mail, source_mail)
+               delete(halfname) unless(RUBY_PLATFORM =~ /i.86-mswin32/)        ####
+               @dirty += 1     ####
+       end
+
        def close
                @sq_rootsq.reorganize;          @sq_rootsq.close
                @messageid_sq.reorganize;       @messageid_sq.close
@@ -871,17 +1002,22 @@ class MaveFolders < MaveBaseModel
                                        open_folder(name)
                                }
                        }
+               rescue Errno::ENOENT
+                       ex = ['Prepare the root directory [%2$s]. reason=[%1$s]', $!, @configs[:ROOT_DIRECTORY]]
+               rescue Errno::EAGAIN
+                       ex = ['Another instance is already running [%1$s].', $!]
                rescue
-                       print "#{_('Prepare the root directory [%s].').decode_cs(@configs[:TERMINAL_CHARSET], 'UTF-8') % @configs[:ROOT_DIRECTORY]}\n"
-                       exit
+                       ex = ['Unexpected error occurred [%1$s].', $!]
                end
+               print "#{_(ex.shift).decode_cs(@configs[:TERMINAL_CHARSET], 'UTF-8') % [ex.shift.message.split(/\r?\n/)[0], *ex]}\n" or exit if(ex)
        end
 
        #------------------------------------------ MaveFolders ----
        #
        #       メールフォルダ「群」を通して、メールフォルダを作成/開く
        #
-       def open_folder(name)
+       def open_folder(name, create = true)
+               return(false) unless(@folders[name] or create)
                unless(@folders[name])
                        it = @folders[name] = MaveFolder.new({:CONFIGS => @configs, :NAME => name})
                        @shortcuts.assign(it.configs[:SHORTCUT_HINT] + it.configs[:LIST_NAME] + it.name, it)
@@ -942,7 +1078,7 @@ class MaveFolders < MaveBaseModel
        #       メールフォルダの設定ファイルを上書きする
        #
        def overwrite_folder_configs(folder, new_configs)
-               File.open(folder.config_filename, 'w') {|fw| fw.write(new_configs.read) }
+               File.open(folder.config_filename, 'w', 0600) {|fw| fw.write(new_configs.read) }
                close_folder(folder.name); open_folder(folder.name)
        end
 end
@@ -1024,7 +1160,7 @@ class MaveMail < MaveBaseModel
                        elsif(line =~ /^\s*$/)
                                break
                        else
-                               raise "Mail format error '#{line.inspect}'"
+                               raise("Mail format error '#{line.inspect}'")
                        end
                }
        end
@@ -1056,11 +1192,11 @@ class MaveMail < MaveBaseModel
                ['type', 'transfer-encoding', 'disposition'].each {|shalf|
                        if(@header[it = 'Content-' + shalf])
                                qss = []
-                               tps = @header[it].gsub(/"([^"]*)"/) { qss << $1; '"' }.split(';')
+                               tps = @header[it].gsub(/"([^"]*)"/) { qss << $1; '"' }.strip.split(/\s*;\s*/)   #### \" の扱いに問題
                                @content[shalf]['type'] = tps.shift.downcase
                                tps.each {|ps|
                                        param = @content[shalf]['param']
-                                       param[$1.downcase] = $2 if(ps =~ %r|(\S+)=(\S+)|)
+                                       param[$1.downcase] = $2 if(ps =~ %r|(\S+)=(\S+)|)       #### xxx  =  xxx.yyy zzz を許容?
                                        param[$1.downcase] = qss.shift if($2 == '"')
                                }
                        end
@@ -1093,6 +1229,12 @@ class MaveMail < MaveBaseModel
        #
        #       メールボディの行を順に渡す
        #
+       def raw_body_each                                                                                       # headers_each の直後専用
+               @file.each {|line|
+                       yield(line.chomp)
+               }
+       end
+
        def body_each(start = 0)
                nth = start - 1; while(it = self[nth += 1])
                        yield(it)
@@ -1165,6 +1307,14 @@ class MaveMail < MaveBaseModel
 
        #--------------------------------------------- MaveMail ----
        #
+       #       Unique name(ファイル名として使える Message-ID)を返す
+       #
+       def unique_name
+               message_id =~ /<(.+)@(.+)>/ ? ($1 + '_at_' + $2).gsub(/[^0-9A-Z]/i, '_') : raise('Bad Message-ID.')
+       end
+
+       #--------------------------------------------- MaveMail ----
+       #
        #       In-Reply-To, References を返す
        #
        def in_reply_to
@@ -1182,6 +1332,53 @@ class MaveMail < MaveBaseModel
 
        #--------------------------------------------- MaveMail ----
        #
+       #       関連パス(添付ファイルの展開パス)を返す
+       #
+       def related_path
+               folder.related_path(unique_name)
+       end
+
+       #--------------------------------------------- MaveMail ----
+       #
+       #       関連ディレクトリ、添付ファイル展開関連のヘッダ情報を返す
+       #
+       def x_mave_extract_targets
+               (it = @header['X-mave-extract-targets']) ? it.strip.split(/\s*,\s*/) : []
+       end
+       def each_x_mave_extract_target_info
+               x_mave_extract_targets.each {|target|
+                       if(target =~ /folder=(.+);\s*message-id=(.+);\s*seq=(\d+);\s*filename=(.+)/i)
+                               yield({ :FOLDER         => $1.strip,
+                                               :MESSAGE_ID     => $2.strip,
+                                               :SEQ            => $3.strip,
+                                               :FILENAME       => $4.strip })
+                       else
+                               yield(target)                                                                   # 書式エラー
+                       end
+               }
+       end
+       def set_x_mave_extract_targets(filenames)
+               @header['X-mave-extract-targets'] = filenames.join(",\n\t")
+       end
+
+       def x_mave_attachments
+               (it = @header['X-mave-attachments']) ? it.strip.split(/\s*,\s*/) : []
+       end
+       def each_x_mave_attachments_fullname
+               x_mave_attachments.each {|attachment|
+                       yield((attachment =~ %r|^/| ? '' : related_path + '/') + attachment)
+               }
+       end
+
+       def x_mave_relations
+               (it = @header['X-mave-relations']) ? it.strip.split(/\s*,\s*/) : []
+       end
+       def set_x_mave_relations(relations)
+               @header['X-mave-relations'] = (x_mave_relations + relations).join(",\n\t")
+       end
+
+       #--------------------------------------------- MaveMail ----
+       #
        #       メールのサイズを返す
        #
        def size
@@ -1198,12 +1395,46 @@ class MaveMail < MaveBaseModel
 
        #--------------------------------------------- MaveMail ----
        #
+       #       指定番号行を含んでいる、MailPart インスタンスを返す
+       #
+       def get_part(nth)
+               @body.get_part(nth)
+       end
+
+       #--------------------------------------------- MaveMail ----
+       #
+       #       メールに含まれる、全 MailPart の情報を返す
+       #
+       def get_parts_info(all = false)                                                         #### キャッシュする
+               parts = []; nth = mth = -1; last = nil
+               while(it = get_part(nth += 1))
+                       next if(last == it)
+                       mth += 1
+                       parts << {      :PART           => it,
+                                               :FOLDER         => folder.name.value_encode,
+                                               :MESSAGE_ID     => message_id,
+                                               :SEQ            => mth,
+                                               :FILENAME       => it.filename || 'mailpart_%02d' % mth,
+                       } if(all or it.content['disposition']['type'])
+                       last = it
+               end
+               parts
+       end
+
+       #--------------------------------------------- MaveMail ----
+       #
        #       メール情報を返す
        #
        def identify
-               yield([_('Message-ID: %s'), message_id])
-               yield([_('  FilePath: %s'), path])
-               yield([_('  FileSize: %d'), size])
+               yield([_('  Message-ID: %s'), message_id])
+               yield([_('    FilePath: %s'), path])
+               yield([_('    FileSize: %d'), size])
+               unless((filenames = folder.related_files(self.unique_name)).size == 0)
+                       yield([_('Related Path: %s'), related_path])
+                       n = 0; filenames.each {|filename|
+                               yield([_('Related File: %d) %s'), n += 1, filename])
+                       }
+               end
        end
 end
 
@@ -1243,6 +1474,7 @@ class MavePseudoMail < MaveMail
                        :EDIT                   => method(:edit_message_each),
                        :VIEW                   => method(:view_message_each),
                        :VIEW_RAW               => method(:view_raw_message_each),
+                       :ENCLOSE                => method(:enclose_attachments_each),
                }
                @each_func              = @formtype[params[:MODE]] || nil
        end
@@ -1264,17 +1496,21 @@ class MavePseudoMail < MaveMail
                                if(line =~ /^(\S+?):/)
                                        header = $1.downcase
                                        if(header == 'from')
-                                               yield("From: #{@@address_book.encode(self.from, 'SEND:')}\n")
+                                               yield("From: #{@@address_book.encode(from, 'SEND:')}\n")
                                        elsif(header == 'to')
-                                               yield("To: #{  @@address_book.encode(self.to,   'SEND:')}\n")
+                                               yield("To: #{  @@address_book.encode(to,   'SEND:')}\n")
                                        elsif(header == 'cc')
-                                               yield("Cc: #{  @@address_book.encode(self.cc,   'SEND:')}\n")
+                                               yield("Cc: #{  @@address_book.encode(cc,   'SEND:')}\n")
                                        elsif(header == 'bcc')
-                                               yield("Bcc: #{ @@address_book.encode(self.bcc,  'SEND:')}\n")
+                                               yield("Bcc: #{ @@address_book.encode(bcc,  'SEND:')}\n")
                                        elsif(header == 'subject')
-                                               yield("Subject: #{self.subject.encode_mh}\n")
+                                               yield("Subject: #{subject.encode_mh}\n")
                                        elsif(header == 'date')
                                                yield("Date: #{Time.now.rfc2822}\n")    # Date は現時刻に変更
+                                       elsif(header == 'x-mave-extract-targets')
+                                               yield("X-Mave-Extract-Targets: #{x_mave_extract_targets.join(",\n\t")}\n")
+                                       elsif(header == 'x-mave-relations')
+                                               yield("X-Mave-Relations: #{x_mave_relations.join(",\n\t")}\n")
                                        else
                                                yield(line + "\n"); header = false              # ヘッダを仲介
                                        end
@@ -1283,7 +1519,7 @@ class MavePseudoMail < MaveMail
                                elsif(line =~ /^\s*$/)
                                        yield("\n"); in_body = true
                                else
-                                       raise "Mail format error '#{line.inspect}'"
+                                       raise("Mail format error '#{line.inspect}'")
                                end
                        else
                                yield((line + "\n").tojis)                                              #### ボディを仲介(現状は JIS 固定)
@@ -1315,8 +1551,9 @@ class MavePseudoMail < MaveMail
                yield('MIME-Version: 1.0')
                yield('Content-Type: text/plain; charset=ISO-2022-JP')  #### アカウントの指定による
                yield('Content-Transfer-Encoding: 7bit')
-               yield('X-Mave-Reference: ')                                                             # 参照用の擬似ヘッダ
-               yield('X-Mave-Attachment: ')                                                    # 添付用の擬似ヘッダ
+               yield('X-Mave-Extract-Targets: ')                                               # 展開用の疑似ヘッダ
+               yield('X-Mave-Attachments: ')                                                   # 添付用の擬似ヘッダ
+               yield('X-Mave-Relations: ')                                                             # 関連用の擬似ヘッダ
        end
 
        def quote_each
@@ -1331,7 +1568,8 @@ class MavePseudoMail < MaveMail
                yield('')
                @mail.body_each {|line|
                        line.chomp!
-                       yield((line =~ /^>/ ? ">#{line}" : "> #{line}").gsub(/[\x00-\x1F]/, '^x'))
+####           yield((line =~ /^>/ ? ">#{line}" : "> #{line}").gsub(/[\x00-\x1F]/, '^x'))
+                       yield(line =~ /^>/ ? ">#{line}" : "> #{line}")
                }
        end
 
@@ -1374,10 +1612,16 @@ class MavePseudoMail < MaveMail
                                        refs = []
                                        @mail.each_reference   {|id| refs |= [id] }
                                        @mail.each_in_reply_to {|id| refs |= [id] }
-                                       max_refs = 4; refs.slice!(max_refs >> 1, (it = refs.size - max_refs) > 0 ? it : 0)
+                                       max_refs = 4; refs.slice!(max_refs >> 1, refs.size - max_refs) if(refs.size > max_refs)
                                        it = @mail.message_id and refs |= [it]
                                        yield("References: #{refs.join(' ')}") if(refs.size > 0)
                                end
+                       elsif(line =~ /^X-Mave-Extract-Targets: /)                      # 添付ファイルリストをつける
+                               parts_list = []; @mail.get_parts_info.each {|part|
+                                       parts_list << 'folder=%s; message-id=%s; seq=%d; filename=%s' % \
+                                               [part[:FOLDER], part[:MESSAGE_ID], part[:SEQ], part[:FILENAME]]
+                               } if(@mail)
+                               yield("X-Mave-Extract-Targets: #{parts_list.join(",\n\t")}")
                        else
                                yield(line)
                        end
@@ -1409,10 +1653,16 @@ class MavePseudoMail < MaveMail
                                        refs = []
                                        @mail.each_reference   {|id| refs |= [id] }
                                        @mail.each_in_reply_to {|id| refs |= [id] }
-                                       max_refs = 4; refs.slice!(max_refs >> 1, (it = refs.size - max_refs) > 0 ? it : 0)
+                                       max_refs = 4; refs.slice!(max_refs >> 1, refs.size - max_refs) if(refs.size > max_refs)
                                        it = @mail.message_id and refs |= [it]
                                        yield("References: #{refs.join(' ')}") if(refs.size > 0)
                                end
+                       elsif(line =~ /^X-Mave-Extract-Targets: /)                      # 添付ファイルリストをつける
+                               parts_list = []; @mail.get_parts_info.each {|part|
+                                       parts_list << 'folder=%s; message-id=%s; seq=%d; filename=%s' % \
+                                               [part[:FOLDER], part[:MESSAGE_ID], part[:SEQ], part[:FILENAME]]
+                               } if(@mail)
+                               yield("X-Mave-Extract-Targets: #{parts_list.join(",\n\t")}")
                        else
                                yield(line)
                        end
@@ -1454,7 +1704,8 @@ class MavePseudoMail < MaveMail
                } if(@mail)
                yield('')
                @mail.body_each {|line|
-                       yield(line.chomp.gsub(/[\x00-\x1F]/, '^x'))
+####           yield(line.chomp.gsub(/[\x00-\x1F]/, '^x'))
+                       yield(line.chomp)
                } if(@mail)
        end
 
@@ -1486,7 +1737,8 @@ class MavePseudoMail < MaveMail
                } if(@mail)
                yield('')
                @mail.body_each {|line|
-                       yield(line.chomp.gsub(/[\x00-\x1F]/, '^x'))
+####           yield(line.chomp.gsub(/[\x00-\x1F]/, '^x'))
+                       yield(line.chomp)
                } if(@mail)
        end
 
@@ -1518,7 +1770,8 @@ class MavePseudoMail < MaveMail
                } if(@mail)
                yield('')
                @mail.body_each {|line|
-                       yield(line.chomp.gsub(/[\x00-\x1F]/, '^x'))
+####           yield(line.chomp.gsub(/[\x00-\x1F]/, '^x'))
+                       yield(line.chomp)
                } if(@mail)
        end
 
@@ -1527,14 +1780,71 @@ class MavePseudoMail < MaveMail
        #       閲覧用メールの作成
        #
        def view_raw_message_each
+               @mail.rewind
+               @mail.each {|line|
+                       yield(line.chomp)
+               } if(@mail)
+       end
+
+       #--------------------------------------- MavePseudoMail ----
+       #
+       #       ファイル添付メールの作成
+       #
+       def enclose_attachments_each
+               boundary = "FFR-41MR_MAVE_with_#{((rand 65536) + 1).to_s}6th_TFS"
                header = false
+               attachments = []
                @mail.headers_each {|line|
-                       yield(line)
+                       if(line =~ /^(\S+?):/)
+                               header = $1.downcase
+                               if(header == 'content-type')
+                                       yield("Content-Type: multipart/mixed; boundary=\"#{boundary}\"")
+                               elsif(header == 'content-transfer-encoding')
+                                       # マルチパートになるので捨てる
+                               elsif(header == 'x-mave-attachments')
+                                       @mail.each_x_mave_attachments_fullname {|fullname|
+                                               attachments << fullname
+                                       }
+                               else
+                                       yield(line); header = false
+                               end
+                       else
+                               yield(line) unless(header)
+                       end
                } if(@mail)
+
                yield('')
-               @mail.body_each {|line|
+               yield('This is a multi-part message in MIME format.')
+
+               yield("--#{boundary}")                                                                  # 本文パート
+               yield('Content-Type: text/plain; charset=ISO-2022-JP')
+               yield('Content-Transfer-Encoding: 7bit')
+               yield('')
+               @mail.each {|line|
                        yield(line.chomp)
                } if(@mail)
+
+               attachments.each {|fullname|
+                       yield("--#{boundary}")                                                          # 各添付パート
+                       mime_type = `#{@configs[:FILE_IDENTIFIER] % fullname}`.chomp
+                       mime_type = $?.to_i == 0 ? mime_type : 'application/octet-stream; charset=binary' 
+
+                       yield("Content-Type: #{mime_type};")
+                       (it = File.basename(fullname)).rfc2231_encode('name') {|line| yield(line) }
+
+                       yield("Content-Disposition: attachment;")
+                       it.rfc2231_encode('filename') {|line| yield(line) }
+
+                       yield('Content-Transfer-Encoding: base64')                      #### エンコーディング処理は外部に
+                       yield('')
+                       File.open(fullname) {|fh|
+                               while(bytes = fh.read(57))                                              # 57 * 4/3 = 76
+                                       yield([bytes].pack('m').gsub(/\n/, ''))
+                               end
+                       }
+               }
+
+               yield("--#{boundary}--")
        end
 end
 
@@ -1546,7 +1856,7 @@ class MaveAddressBook < MaveBaseModel
 
        def initialize(params)
                super
-               @address_db             =   GDBM.new(@configs[:ROOT_DIRECTORY] + '/mave.address')
+               @address_db             =   GDBM.new(@configs[:ROOT_DIRECTORY] + '/mave.address', 0600)
        end
 
        #-------------------------------------- MaveAddressBook ----
@@ -1741,6 +2051,7 @@ end
 class MaveBasePart
 
        attr_reader :index
+       attr_reader :content
 
        def initialize(file, content, boundary)
                @file = file
@@ -1748,6 +2059,67 @@ class MaveBasePart
                @content = content
                @boundary = boundary
        end
+
+       #----------------------------------------- MaveBasePart ----
+       #
+       #       指定番号行を含んでいる、MailPart インスタンスを返す
+       #
+       def get_part(nth)
+               return(nil) unless(self[nth])
+               (it = @index[nth - @offset]).is_a?(MaveMail) ? it.get_part(nth) : self
+       end
+
+       #----------------------------------------- MaveBasePart ----
+       #
+       #       MailPart に付けられている filename を返す
+       #
+       #               RFC には反するが、通例として B/Q エンコーディングをデコード
+       #
+       def filename
+               filename = (it = @content['disposition']['param']['filename']) ? it.decode_mh : nil
+               filename and filename.gsub(%r|(.*)/|, '')                               #### 適当にサニタイズ
+       end
+
+       #----------------------------------------- MaveBasePart ----
+       #
+       #       MailPart の内容をデコードして順に返す(添付ファイル抽出用)
+       #
+       def dump
+               encoding = @content['transfer-encoding']['type'].upcase
+               @file.pos = @pos
+               while(line = @file.gets)
+                       break if(@boundary and line.index(@boundary))
+                       yield(line.decode_ec(encoding))
+               end
+       end
+
+       #----------------------------------------- MaveBasePart ----
+       #
+       #       RFC 2231 拡張表現をデコードして返す(添付ファイル名抽出用)
+       #
+       #               http://tools.ietf.org/html/rfc2231
+       #
+       def decode_rfc2231(params, out_code = 'UTF-8')
+               dparams = {}
+               ps = {}; params.each {|attr, value|
+                       if(attr =~ /^([^*]+)\*(\d*)(\*?)$/)
+                               ps[$1] ||= []
+                               ps[$1][$2.to_i] = $2.size == 0 ? ['*', value] : [$3, value]
+                       end
+               }
+               value = ''; ps.each {|attr, clvals|
+                       charset = 'us-ascii'
+                       clvals.each {|c, val|
+                               if(c == '*')
+                                       charset = $1 and val = $3 if(val =~ /(.*)'(.*)'(.+)/)
+                                       val = val.ext_decode.decode_cs(out_code, charset)
+                               end
+                               value << val
+                       }
+                       dparams[attr] = value
+               }
+               dparams
+       end
 end
 
 #===============================================================================
@@ -1861,6 +2233,8 @@ class MaveUnknownPart < MaveBasePart
                        @index << "==\n"
                        @index << "== Unknown Content-type [#{@content['type']['type']}] ==\n"
                        dtype = @content['disposition']['type'] || 'unknown'
+                       dparams = decode_rfc2231(@content['disposition']['param'])
+                       (it = dparams['filename']) and @content['disposition']['param']['filename'] = it
                        dfilename = (it = @content['disposition']['param']['filename']) ? it.decode_mh : 'unknown'
                        @index << "== Content-Desposition [#{dtype}/#{dfilename}] ==\n"
                        @index << "==\n"