このページは, 「Pilot-Link への誘い」分室(?)で, MailSync についての情報を集めたものです。
Palmデバイスでカキカキしたメールを, あるものによって PC側のメーラーに転送し, また同時に PC側で受信したメールを Palmデバイスに転送する。その『あるもの』とゆーのがズバリ MailSyncとゆーことなんれす。
さてさて, その MailSyncのプログラム。Pilot-Linkに含まれるソレとゆーのは, メールを受信する時に CoreDumpするとゆー 大変な暴れん坊。 (←なんだそりゃ)
てことで, まずは まともっぽいソレ を紹介しよう。つっても以前から公開してる物なので, 一度ダウンロードしてた方は大丈ぶい。
Date Time FileSize EA-size Attr. Full name ========== ======== ========= ========= ===== ============> 2000-03-11 17:25:38 33785 0 A pilomail.lzh 2000-01-27 4:45:48 20400 0 A pilot-mail.c 2000-01-31 0:57:28 101747 0 A pilot-mail.exe
ついでにって訳じゃないけど, 実は改造が施してあるのだ。ふっふふふ。
しばらく動かしていると変身するのだ。・・ てゆーんじゃなくって, 送信したメールに日時を付ける部分を追加してあるのさっ。
プログラムのソースのリンクはこのページのどこかにあるでよ。えへえへ。
OS/2 版の pilot-link では, そのフォルダーの中に 「Mail Sync using Sendmail」 っつーのと, 「Mail Sync using PMMail」 っつーのが付いてくる。
なんで, OS/2 版だとことわってるかとゆーと, 他の環境ではソレがなさそうな雰囲気だったから。
他の環境でも付いてくるのなら, もしかして同じよーにアレできるかもしれない。にゃはは。
↑に書いているPMMail とゆーのは, OS/2用の英語版のメーラーのことで, だから そのままだじゃ日本語のメッセージは読み書きできないんだけど, あることをするってーと, たちまちのうちに日本語メールを送受信できるよーになる。
ま, ソレはおいといて ・・・ Sendmailプログラムがメールを送ることが出来るのは当然として, なんで PMMailでも送信できるのか, ソレが問題だ。
と, ゆーのも, フォルダーに入っているそのどちらのプログラムも, 実体は pilot-mail で, 引き数を替えてソレが起動されているだけなのだから。
そのカラクリは とゆーと, pilot-mail は, 子プロセスで Sendmail.exe を起動してるんだけど, PMMailのばやいも Sendmailと同じインタフェース(呼び出し方)で, 実は他のプログラム(pilotpmmail.exe)を呼び出してるだけだからなのさっ。
つまり, そのインタフェースで他のメーラーのも作ってしまえば, ☆の数ほどあると うわさされる各種のメーラーにも対応できる と, こーゆー訳なのら。
さて秘密のベールに包まれた謎が, ついに解き明かされようとしている。きみはついて来れるか? (^o^)/
さてー, んじゃ それらの動作を も少し詳しくみていこう。
Mail Syncが始まると, pilot-mail が起動する訳なんだけど, そこでまず Palmデバイス上の MailDB.pdb が読みだされる。
続いて シグネチャだね。 σ(^^) は Mail Syncでシグネチャ付けたことないんだけど, たぶん普通に付くはず。・・ 付かなかったら泣こう。
送信のカテゴリーに入っているメッセージは 一つ一つ取り出され, Sendmail.exe あるいは別のプログラムに渡されるのだ。 この 子プログラムには, 標準入力に対してメッセージが送り付けられる。送り付けてるのはもちろん pilot-mailだよ。 送り付けられる内容は, ヘッダー そして空行(null行) をおいてボディーが続く。
Sendmail.exeなら, ここですぐにメールを送信することだろー。きっと。 でも, PMMail用のソレだとか そのほかのものは, ここでソレらメーラーのフォルダーに更新をかけにいくって訳なのだ。 メールの送信は, つまりそのメーラーが起動した時になるだよ。 で, 各種のメーラーのフォルダー構造 は, ちょくちょく扱っていく予定。 ま, どうなるか分かんないけどね。 (←ぉぃ)
送信の終わったメールのメッセージは, そのままか, 削除されるか, または保存のカテゴリーに移る。ってのは, 最初に設定するはず。 変更したかったら, も一度 makefolder.cmd を起動しよう。
あ, それから, σ(^^) が改良を加えたってのが, この「保存のカテゴリーに移る」時の処理なのさっ。
そして, すべての送信が終わると, 受信モードに移る。くっくっくっ, ここから POP3 だー。
この部分の処理は, POP3 サーバーの互換性を意識してか, LIST <番号> と RETR <番号> しか使っていない。
コレを, サーバーからエラーが返ってくるまで繰り返して, そこまでを受信するよーに作られている。
そう。問題はここにある。
でも, ま, そのうちなんとかなるでしょ。はっはっは。(^o^) (←ぉぃぉぃ)
てことで, 受信はともかく(後でどーにかするとして), 先に送信する部分を・・, いや, メーラーに引き渡す部分を作ってみよー。 って, やっぱアレだね, 関係が難しくって分りづらいかもね。ま, いいか。(^^)
サンプルとして, ネットスケープ・メーラーに転送するプログラムを作っちゃうよん。
もいちどゆーけど, こーゆー「子プログラム」ってば, 普通なら Sendmail.exeが呼び出されてメールを送信しちゃう訳にょ。
んで, ソレの代わりに pilotpmmail.exeが呼び出されるってーと, PMMailのフォルダーに転送されるってこと。
で, ↓コレだと, ネットスケープ・メーラーに転送される訳だお。
/* Netscape Mail でのサンプル */ /* filename: pilotnetscape.cmd */ options 'ETmode' True = 1; False = 0; nl = '0d0a'x call RxFuncAdd 'SysLoadFuncs', 'rexxutil', 'SysLoadFuncs' call SysLoadFuncs call RxFuncAdd 'RxJisLoadFuncs', 'RXJIS', 'RxJisLoadFuncs' call RxJisLoadFuncs mdir = GetMailDir() if DBRight(mdir, 1) \== '\' then mdir = mdir'\' mfolder = mdir'Outbox' parse value date() with dd mon yyyy call lineout mfolder, 'From -' left(date('W'), 3) mon dd time() yyyy call lineout mfolder, 'X-Mozilla-Status: 0801' call lineout mfolder, 'X-Mailer: MailSync (PiloNE)' stdin = 'stdin:' do while lines(stdin) > 0 call lineout mfolder, linein(stdin) end call lineout mfolder exit
GetMailDir: procedure /* -- Netscape Drive&Base_dir を得る */ Rc = SysIni('User', 'Netscape', 'All:', 'keys.') if Rc == 'ERROR:' then do say 'Netscape エントリーが見つからない (T-T)' Inif = '/Netscape' end else do n = keys.0 Inif = SysIni('User', 'Netscape', keys.n) end /* -- Netscape MailDirectory を得る */ Inif = Inif'/Netscape.ini' fol = SysIni(Inif, 'Mail', 'MailDirectory') if fol == 'ERROR:' then do say Inif 'が見つからない (T-T)' fol = '/Netscape/Users' end return fol
あとは, コレを Sendmail.exeとか pilotpmmail.exeを呼び出してる手法で, pilotnetscape.cmdを呼び出すよーにするだけ。 そのばやい, ↑のプログラムをそーゆー名前で保存してないとね。
こーんな簡単なプログラムでオッケーだったなんて・・・ なーんて思ったあなたは甘い。シロップの練乳がけ はちみつ和えみたく甘い !
コレはまだ漢字コードを何もアレしていないのら。だもんで, このまま転送 → 送信 しちゃったら, 8ビットで送ることになるにょ。・・たぶん。
てことで, あとはソレの部分。改造できそうなら改造してみよう。ではー (^O^)/~ (←フォローは?)