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.
テキストベースメーラ「Mave」の更新履歴
+・Version 2.96
+ * 添付ファイルの抽出、付加機能を追加(RFC 2231 拡張表現をサポート)
+ * SSL/TLS 通信に対応(Gmail を送受信可能)
+ * 関連ファイルのパーミッションを適正化
+
・Version 2.95
* メールの送信機能を追加
* アドレス帳機能を追加
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
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
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
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
@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
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
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
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
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
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
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
\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
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
. 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
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
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
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
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
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
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
\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
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
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
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
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
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
--- /dev/null
+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
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
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
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
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
@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
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
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
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
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
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
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
\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
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
. 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
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
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
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
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
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
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
\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
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
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
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
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
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
--- /dev/null
+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
@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
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>
. 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)
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.
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.
@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 をセットするなどをお試し下さい。
@@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.'] \
= 'メールが選択されていません。'
= 'フォルダ名: '
@@catalog['Change current account to [%s].'] \
- = '既定のアカウントを[%s]に変更しました。'
+ = '既定のアカウントを [%s] に変更しました。'
@@catalog['Create new message.'] \
= '新規にメールを編集します。'
@@catalog['Create reply message.'] \
@@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).'] \
@@catalog['Create new folder.'] \
= '新規にフォルダを作成します。'
@@catalog['Folder [%s] created.'] \
- = 'フォルダ[%s]を作成しました。'
+ = 'フォルダ [%s] を作成しました。'
@@catalog['Edit folder configs.'] \
= 'フォルダの設定を編集します。'
@@catalog['Failed to editing folder configs. reason=[%s]'] \
= '未編集のフォルダの設定を破棄しました。'
@@catalog['The file was discarded (unexpected type).'] \
= 'ファイルを破棄しました(未知のファイル)。'
+ @@catalog['Failed to start file manager. reason=[%s]'] \
+ = 'ファイルマネージャの起動に失敗しました。理由=[%s]'
@@catalog['Copy to'] \
= 'コピー先'
@@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.'] \
= '全系統稼働停止。'
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
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」の設定 ※添付のマニュアルのインポート用
@configs[:ACCOUNTS].each {|v|
v[:POP_PORT] ||= 110
+ v[:POP_KEEP_TIME] ||= 0
v[:SMTP_PORT] ||= 25
v[:SMTP_HELO] ||= 'localhost.localdomain'
#@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'})"
#@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'
+
#===============================================================================
#
# 時刻表現定義
#
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])
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
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
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
# その他のエントリ(簡易サンプル)
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|
#-----------------------------------------------------------
#
+ # 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 = {}
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]
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)
}
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
: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
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
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).')])
#-----------------------------------------------------------
#
+ # 新規に関連ファイルを作成する
+ #
+ 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
: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
@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
state ? @folder.unred(sq) : @folder.red(sq)
}
end
+# @folders.dirty #### 届かない
end
def toggle_flag
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)
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)
: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
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 ----
#
# インクリメンタル検索ビュー、起動処理
@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)
(@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)
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
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
@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]
@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
#-----------------------------------------------------------
#
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
#-----------------------------------------------------------
# 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
@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
}
@cluster_paths << '' if(@cluster_paths.empty?)
- @filename_sq = SqGDBM.new(@path + '/filename_sq') # ベースファイル名<-メール連番
+ @filename_sq = SqGDBM.new(@path + '/filename_sq', 0600) # ベースファイル名<-メール連番
end
#---------------------------------------- MaveDirectory ----
#
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
# メールファイルを上書き
#
def overwrite_mailfile(halfname)
- File.open(@path + '/' + halfname, 'w') {|fh|
+ File.open(@path + '/' + halfname, 'w', 0600) {|fh|
yield(fh)
}
@dirty += 1
#---------------------------------------- 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
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)
}
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 # 設定ファイルが読めなければ適当に
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 ----
#
#
# フォルダ内にメールを追加する
#
- def add_mail(mail)
+ def add_mail(mail, flags = nil)
filename = create_mailfile {|fh|
mail.rewind
mail.each {|line|
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
}
@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(',')
@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
}
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
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)
}
# 各種フラグ処理
#
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
@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
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)
# メールフォルダの設定ファイルを上書きする
#
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
elsif(line =~ /^\s*$/)
break
else
- raise "Mail format error '#{line.inspect}'"
+ raise("Mail format error '#{line.inspect}'")
end
}
end
['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
#
# メールボディの行を順に渡す
#
+ 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)
#--------------------------------------------- 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
#--------------------------------------------- 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
#--------------------------------------------- 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
: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
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
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 固定)
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
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
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
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
} 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
} 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
} 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
# 閲覧用メールの作成
#
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
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 ----
class MaveBasePart
attr_reader :index
+ attr_reader :content
def initialize(file, content, boundary)
@file = file
@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
#===============================================================================
@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"