[Subject Prev][Subject Next][Thread Prev][Thread Next][Subject Index][Thread Index]

[linux-users:72131] Re: 受信メールを自動的に読む方法


さかいです.

<200008021648.AA01350 _at_ jiro.pluto.dti.ne.jp>の記事において
catmoon _at_ pluto.dti.ne.jpさんは書きました。

>> .forward からパイプでプログラムに流し込むしくみや方法について
>> だいたい理解できました。

よかったです.:-)

>> 実際に行いたいことは、メールの中にファイル名を記述しておきます。
>> メールが届いたら、リアルタイムで、あるプロセスがそのファイルを
>> 読みに行く、ということを行いたいのです。

リアルタイムで,という意味がちょっとよくわかりませんが...

>> それで、処理の内容として考えたことは
>> 1.メールを受信したら、.forward ファイルによって、メールを読む
>>   プロセス(A)が起動する
>> 2.メールを読むプロセス(A)は、メールの中身のエラーチェック後、
>>   メールに書かれたファイル名を読むための別プロセス(B)に
>>   メッセージを送る(メッセージキューによるプロセス間通信を行う)
>> 3.メールを読むプロセス(A)はメッセージを送るとexitする

>> Q1. .forward ファイルの中に "| プログラム名"という記述をしておくと
>>    して、プログラム内では標準入力からメールの最後をなんというコードで
>>    認識したらよろしいのでしょうか?(何をもってメールのEOFとみなすか?)

繰り返しますが,*ふつうのテキストデータ*ですので,getchar() で読むなら,
while ((c = getchar()) != EOF) { /* 処理 */ }
です.
Perl なら,
while (<>) { }
ですね.
# 厳密に言えば,read() システムコールが 0 を返すまで,ということかな

>> Q2.仮に同時刻に、同じユーザ宛てに複数のメールが届いたとすると
>>    .forward によって起動されるメールを読むプロセス(A)は複数と
>>    考えてよろしいでしょうか?

当然,複数です.

>>    つまり、1プロセスにつき1件のメールを処理する、と考えて
>>    問題ないでしょうか?

sendmail がそのつどプロセスを作るので,問題ないです.

>> Q3.他に何かよい方法ありますか?
>>    例えばシェルだけで可能とか・・。(シェルについてあまり詳しくないので
>>    よく分からないのです)

Perl でやるのがいいとおもいます.楽ですよ.
(プロセス間通信とかをやろうとかならなおさら楽)
シェルだけでもできるとは思いますが,こういうことこそ,Perl でやるべき
ことだと思います.
長く使うこととかを考えると,たとえ1からPerlを勉強したとしても,
Cでぜんぶやるより楽に作れるでしょう.

それに,

>> 2.メールを読むプロセス(A)は、メールの中身のエラーチェック後、
>>   メールに書かれたファイル名を読むための別プロセス(B)に
>>   メッセージを送る(メッセージキューによるプロセス間通信を行う)

ここまでする必要は無いのでは? と思います.
ただ単にプロセスAが目的の作業を行えばいいのではないのでしょうか?
リアルタイム,というのが理由なのかな?

あとセキュリティには十分注意する必要がありますね.
/etc の下は読まれないようにするとか.



この情報があなたの探していたものかどうか選択してください。
yes/まさにこれだ!   no/違うなぁ   part/一部見つかった   try/これで試してみる

あなたが探していた情報はどのようなことか、ご自由に記入下さい。特に「まさにこれだ!」と言う場合は記入をお願いします。
例:「複数のマシンからCATV経由でipmasqueradeを利用してWebを参照したい場合の設定について」
Follow-Ups: References: