メール環境, 極めーる

#Counter


まずはじめに

このページは, 「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

ついでにって訳じゃないけど, 実は改造が施してあるのだ。ふっふふふ。
しばらく動かしていると変身するのだ。・・ てゆーんじゃなくって, 送信したメールに日時を付ける部分を追加してあるのさっ。 プログラムのソースのリンクはこのページのどこかにあるでよ。えへえへ。


Mail Syncの謎

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の動作

さてー, んじゃ それらの動作を も少し詳しくみていこう。
Mail Syncが始まると, pilot-mail が起動する訳なんだけど, そこでまず Palmデバイス上の MailDB.pdb が読みだされる。 続いて シグネチャだね。 σ(^^) は Mail Syncでシグネチャ付けたことないんだけど, たぶん普通に付くはず。・・ 付かなかったら泣こう。

送信のカテゴリーに入っているメッセージは 一つ一つ取り出され, Sendmail.exe あるいは別のプログラムに渡されるのだ。 この 子プログラムには, 標準入力に対してメッセージが送り付けられる。送り付けてるのはもちろん pilot-mailだよ。 送り付けられる内容は, ヘッダー そして空行(null行) をおいてボディーが続く。

Sendmail.exeなら, ここですぐにメールを送信することだろー。きっと。 でも, PMMail用のソレだとか そのほかのものは, ここでソレらメーラーのフォルダーに更新をかけにいくって訳なのだ。 メールの送信は, つまりそのメーラーが起動した時になるだよ。 で, 各種のメーラーのフォルダー構造 は, ちょくちょく扱っていく予定。 ま, どうなるか分かんないけどね。 (←ぉぃ)

送信の終わったメールのメッセージは, そのままか, 削除されるか, または保存のカテゴリーに移る。ってのは, 最初に設定するはず。 変更したかったら, も一度 makefolder.cmd を起動しよう。
あ, それから, σ(^^)改良を加えたってのが, この「保存のカテゴリーに移る」時の処理なのさっ。

そして, すべての送信が終わると, 受信モードに移る。くっくっくっ, ここから POP3 だー。
この部分の処理は, POP3 サーバーの互換性を意識してか, LIST <番号>RETR <番号> しか使っていない。 コレを, サーバーからエラーが返ってくるまで繰り返して, そこまでを受信するよーに作られている。 そう。問題はここにある。

でも, ま, そのうちなんとかなるでしょ。はっはっは。(^o^) (←ぉぃぉぃ)


Netscape Mailでのサンプル

てことで, 受信はともかく(後でどーにかするとして), 先に送信する部分を・・, いや, メーラーに引き渡す部分を作ってみよー。 って, やっぱアレだね, 関係が難しくって分りづらいかもね。ま, いいか。(^^)

サンプルとして, ネットスケープ・メーラーに転送するプログラムを作っちゃうよん。
もいちどゆーけど, こーゆー「子プログラム」ってば, 普通なら 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^)/~ (←フォローは?)



Copyright (C) 2000 Rexx使いの織華
email: ori@drive.co.jp