状況:IMAPのみにアクセスできるメールサーバー。問題:メールをフィルタリングできるようにしたい(いくつかのメールをさまざまなフォルダーに配置したり、既読としてマークしたりするなど)。
ほとんどの新しい電子メールクライアントにはこの機能がありますが、このサーバーに接続するにはさまざまな電子メールクライアントを使用する必要があるため、スタンドアロンのフィルタリングプログラムが必要です。
一般的に-procmailのようなものですが、IMAPで動作します。
ソフトウェアはLinuxまたはSolarisで実行されます。
簡単なグーグルがスローする IMAPFilter これはあなたが望むことをするように見えます:
- 次のようなIMAPプロトコルで利用可能な多くの基準を使用したメッセージの検索:
- メッセージのステータス(最近、未読など)。
- メッセージのサイズ。
- メッセージの年齢。
- メッセージのヘッダーまたは本文での文字列または正規表現パターンの一致。
- メッセージの検索中に論理演算子(および/または/ not)を使用する機能。
- 次のようなメッセージの処理に使用できるさまざまな機能:
- メッセージを削除しています。
- 同じサーバーまたは異なるサーバーのメールボックスにメッセージを移動する
- 同じサーバーまたは異なるサーバーのメールボックスにメッセージをコピーする。
- メッセージのマークまたはメッセージフラグの変更。
- IMAP CHILDREN拡張機能のサポートとともに、使用可能および/またはサブスクライブされたメールボックスのリスト。
- メールボックスの作成、削除、名前変更、購読、または購読解除
- 国際化(I18N)のサポート。
- IMAPNAMESPACE拡張機能を使用したサーバー名前空間のサポート。
- Secure Socket Layer(SSL)またはTransport Layer Security(TLS)で暗号化されたimap(ポート993)接続。
- IMAPSTARTTLS拡張機能を使用した暗号化された接続。
- チャレンジ/レスポンス認証メカニズム(CRAM)、特にCRAM-MD5を使用したユーザー認証。
- Perl互換正規表現(PCRE)のサポート。
IMAPサーバーによっては、 sieve の実装を使用するだけで済みます。ふるいに対する最善のサポートはcyrusによって提供されると思います。
すでに述べたように、procmailはこれを行う正しい方法であるため、万が一の場合に備えて、電子メールプロバイダーにサポートしているかどうかを尋ねることができます。
それ以外の場合、おそらく最も簡単な方法は、並べ替えなどを行う電子メールクライアントを常に開くことです。以前は、同じIMAPメールボックスにアクセスする複数のクライアントにロックの問題がありましたが、私は何年も見ていません。
完全な軽量化のために、 Sift を試してみることができます。
さらに別の方法は、Ruby gemimap-filterを使用することです。
https://github.com/flajann2/imap-filter/blob/master/README.org
そしてDSLの例、
https://github.com/flajann2/imap-filter/blob/master/examples/default.imap
DSLはRubyベースですが、Rubyを使用するために多くのことを知る必要はありません。著者は近い将来、さらに多くの例を提供することを約束しており、機能のリクエストとプルにオープンですリクエスト。
LinuxおよびUnixオペレーティングシステムでは、fetchmail
を使用してIMAP電子メールアカウントをポーリングし、新しいメッセージをprocmail
に渡すことができます。受信したメッセージの正規表現パターンの一致に基づいてスクリプトを実行するようにprocmailを構成できます。
これを行うには、fetchmailおよびprocmailパッケージをインストールする必要があります。次の構成により、新しい電子メールメッセージが私の電子メールアカウントで受信されるたびにスクリプトを実行できました。 Ubuntu 12.04 LTSを使用しました。
~/.fetchmailrc
:
# .fetchmailrc checks my e-mail account for new messages, sends them to procmail
set logfile /home/myusername/fetchmail.log
poll mail.domain.com protocol IMAP
user "emailaccountname"
password 'emailpassword'
folder 'INBOX'
keep
ssl
mda "/usr/bin/procmail -f %F"
上記のkeep
ディレクティブに注意してください。これにより、メッセージが取得された後にIMAPサーバーから削除されなくなります。
~/.procmailrc
:
# .procmailrc received e-mails from fetchmail and runs a script
PATH=/usr/bin:/usr/local/bin
LOGFILE=/home/username/procmail.log
Shell=/bin/sh
# This rule triggers for every e-mail message:
:0
| `/home/username/myscript.sh`
Fetchmailとprocmailのチュートリアルがオンラインにたくさんあり、2つを統合する方法のチュートリアルもあります(これが私が上記を思いついた方法です)。
ここで、fetchmail
またはfetchmail -v
を実行すると、スクリプト/home/username/myscript.sh
が新しいメッセージごとに1回実行されます。 cronでfetchmailを実行するか、set daemon 600
の.fetchmailrc
ディレクティブを使用してデーモンとして実行するようにfetchmailを構成できます(600はポーリング間の秒数です)。