1通受信毎にDELコマンドNo.34026
きらりん さん 08/05/17 16:19
 
メールを1通受信する毎にDELコマンドを送ることはできますか?

めずらしい使い方だと思いますが、2台のPCで一つの
メールアドレスを使っています。

どちらかのPCでメールは受信できればいいので、
メールを1通受信する毎に、DELコマンドでサーバー内のメールを
削除したいのです。

メール件数が多い(1日数万件)ので、未読全受信後に削除ではなく、
1件受信毎に削除。または、数十件受信毎に削除。
したいです。

[ ]
RE:34026 1通受信毎にDELコマンドNo.34027
kahara さん 08/05/17 19:09
 
kahara と申します。

ある時点でメールがサーバにある状態を基点として、

方法(1)
・全ての未読メールをサーバから取得する
・受信済みのサーバ上のメールを全て削除する

方法(2)
・1件(or数件)の未読メールをサーバから取得し、サーバから削除する
・上述を未読メールがなくなるまで繰り返す

この方法(1)と(2)で、全ての未読メールがサーバから削除される
までの時間はそれほど変わりません。

>メールを1通受信する毎にDELコマンドを送ることはできますか?

従って、この機能を実装したとしても、効果は無いと思います。

もしくは、トータルの受信時間を短縮したいので、複数のPCから
同時並行的に(なるべく重複しないように)未読メールを落としたい、
ということでしょうか?

サーバ上のメールを複数のPC側から同時並行的に受信することは、
たいていのサーバでは許容していないのではないでしょうか?

仮に出来たとしても、UIDL管理上かなり変則(1台は古いメールか
ら、もう1台は新しいメールから取得していく)的なことをしない
とご要望の効果が発生しないと思います。

定期受信の最短間隔が1秒なのですから、受信メールのダウンロー
ド時間+その他の処理時間で24時間(もしくは秀丸メールが起動
されている時間)を越えない限り、1台で十分な気がします。

この限度を超えるということであれば、そもそも、受信サーバから
POP的な手法でメールデータを落とすという方式そのものを変え
るべき状況と考えます。

[ ]
RE:34027 1通受信毎にDELコマンドNo.34031
きらりん さん 08/05/18 11:09
 
さっそく、ありがとうございます。

実は、すこし大きなシステムを運用していまして、
ユーザーに送られるメールなどを、運用上、万が一に備えて
BCC受信し、beckyで保管しておこうという考えです。

1日数万件のメールがあります。


>もしくは、トータルの受信時間を短縮したいので、複数のPCから
>同時並行的に(なるべく重複しないように)未読メールを落としたい、
>ということでしょうか?

はい、その通りです。

1台で受信することも可能なのですが、実は、beckyがよく落ちます。
(cのランタイムエラーやメモリ不足エラー)
ですので、今は、2台で受信しています。



数万件のメールを受信中にbeckyが落ちる

DELコマンドが送られていないので、メールはサーバーに残っている。

メールサーバーにメールが大量に残っていると、LISTに時間がかかる。

beckyを起動し直して受信開始。LISTに時間がかかりつつも、メール受信開始

で、また、beckyが落ちて、受信したメールがメールサーバーに残ったまま。

とにかく、beckyが落ちずに未読全件受信し、DELコマンドを
送ってくれるよう、ひたすら祈る。



万が一に備えてのBCC受信ですので、少しばかりの取りこぼしや重複受信は、
全然問題ありません。


自分なりの解決方法は、

(1)beckyが落ちなければ、OK
(2)1通(or数十通)のメール受信毎にDELコマンドで
   サーバーからメールを削除できれば、OK

1は、ハードトラブルが起こることもあるので、今回考慮せず、2についての
投稿をしています。


>この限度を超えるということであれば、そもそも、受信サーバから
>POP的な手法でメールデータを落とすという方式そのものを変え
>るべき状況と考えます。

たしかに、その通りと考えています。
しかし、いろいろ模索したのですが、確実でわかりやすくて運用しやすいのが、
このBCC受信+beckyかと思っています。

[ ]
RE:34031 1通受信毎にDELコマンドNo.34032
きらりん さん 08/05/18 11:12
 
すいません。

前の発言でbeckyと発言していますが、秀丸メールの
書き間違いです。

同じことをbeckyと秀丸メールで試していて、
両者とも、同じ現象で悩んでいます。

ちなみに、他のメーラーでは試していません。

[ ]
RE:34032 1通受信毎にDELコマンドNo.34033
たまちゃん3 さん 08/05/18 11:31
 
動作しているマシン固有の問題のような気がしますが,マシンを代えても同じ問題が
生じるでしょうか。

当方の環境(XP SP3)では1万通くらいのメールは1回で何ら問題なく受信できてい
ます(10万通ほど受信したこともあります)。

bcc ということは Postfix の always_bcc のようなものをお使いだと思いますが,
すべてのメールを(読むのではなく)バックアップ用途として保存しておくのであれ
ば,メールソフトですべて吸い上げるのではなく別の解法があると思います(私なら
そうします)。

[ ]
RE:34031 1通受信毎にDELコマンドNo.34035
アルビレオ さん 08/05/18 12:15
 
ユーザーのアルビレオです。

もしもプログラムを作る能力があれば、専用の受信プログラムを作るのが一番か
もしれません。

その場合の処理はこんな感じになります。

1.POPサーバに接続
2.STATコマンドでメール総数を取得
3.RETRコマンドでメールを一個受信
4.受信した内容をそのままファイルとして保存
5.DELEコマンドで受信したメールを削除
6.全部のメールを受信するまで3〜5を繰り返し

ポイントは、
○どうせ全部のメールを受信するのでRETR/DELEコマンドで指定するのは
 1 から始まる連番でよく、遅いLISTコマンドが不要になる。
○受信内容をデコードしないでそのまま保存するので、無駄な処理を減らせる。
 メールの内容を確認したいときだけ、秀丸メールなどでログをインポート
 すれば内容を確認できる。

この2つでずいぶん効率がよくなるし、デコードしないのでプログラム自体も簡
単になります。
nPOP のようなメール受信をする Perl スクリプトを改造するのが一番手っ取り
早そうですね。

数万通となるとログファイルが1メール1ファイル形式ではきつそうなので、
メールを閲覧するのとき秀丸メールを使うなら「秀丸メール形式」(各メール先
頭に 0x0C 0x21 0x20 0x0D 0x0A の区切りマークを入れる)を使うのが無難だと
思います。

[ ]
RE:34031 1通受信毎にDELコマンドNo.34037
kahara さん 08/05/18 15:31
 
kahara と申します。


>>この限度を超えるということであれば、そもそも、受信サーバから
>>POP的な手法でメールデータを落とすという方式そのものを変え
>>るべき状況と考えます。
>
>たしかに、その通りと考えています。
>しかし、いろいろ模索したのですが、確実でわかりやすくて運用しやすいのが、
>このBCC受信+beckyかと思っています。

そういうことであれば、BCC受信するPCを24時間運転しておいて、
5分おきにでも定期受信すれば解決すると思います。
要するに、サーバにためる量を減らす、ということですね。
(停電対策で、自動シャットダウン用のUPS程度はあったほうが
 いいですが)

[ ]
RE:34035 1通受信毎にDELコマンドNo.34043
きらりん さん 08/05/19 08:55
 

>もしもプログラムを作る能力があれば、専用の受信プログラムを作るのが一番か
>もしれません。

ありがとうございます。
たしかにそうですね。

運用のためなので、LINUX+PHP+自作POP受信
で作り込みたいと思います。

[ ]
RE:34043 1通受信毎にDELコマンドNo.34045
秀まるお2 さん 08/05/19 09:56
 
 今さらのお返事なのでなんですが、秀丸メールが落ちてしまうってことであれ
ば、落ちたときに秀丸メールのデータ用フォルダに生成されにdump.txtを僕に送
っていただければ、それで原因を調べることが出来ます。

 あと、DELEコマンドを送っても実際にその瞬間にメールが削除される訳ではな
くて、一番最後のQUITコマンドを送った時に削除されるっていうメールサーバー
が多いと思います。

 QUITを送らなければDELEされたメールは削除されずに残るという、そういう安
全設計になってるメールサーバーの方が多いんじゃないかと思います。(僕の経
験的に)

[ ]