web-dev-qa-db-ja.com

リモートIMAPアカウントでメールをフィルタリングする方法はありますか?

状況:IMAPのみにアクセスできるメールサーバー。問題:メールをフィルタリングできるようにしたい(いくつかのメールをさまざまなフォルダーに配置したり、既読としてマークしたりするなど)。

ほとんどの新しい電子メールクライアントにはこの機能がありますが、このサーバーに接続するにはさまざまな電子メールクライアントを使用する必要があるため、スタンドアロンのフィルタリングプログラムが必要です。

一般的に-procmailのようなものですが、IMAPで動作します。

ソフトウェアはLinuxまたはSolarisで実行されます。

9
user13185

簡単なグーグルがスローする IMAPFilter これはあなたが望むことをするように見えます:

  • 次のようなIMAPプロトコルで利用可能な多くの基準を使用したメッセージの検索:
    • メッセージのステータス(最近、未読など)。
    • メッセージのサイズ。
    • メッセージの年齢。
    • メッセージのヘッダーまたは本文での文字列または正規表現パターンの一致。
  • メッセージの検索中に論理演算子(および/または/ not)を使用する機能。
  • 次のようなメッセージの処理に使用できるさまざまな機能:
    • メッセージを削除しています。
    • 同じサーバーまたは異なるサーバーのメールボックスにメッセージを移動する
    • 同じサーバーまたは異なるサーバーのメールボックスにメッセージをコピーする。
    • メッセージのマークまたはメッセージフラグの変更。
  • IMAP CHILDREN拡張機能のサポートとともに、使用可能および/またはサブスクライブされたメールボックスのリスト。
  • メールボックスの作成、削除、名前変更、購読、または購読解除
  • 国際化(I18N)のサポート。
  • IMAPNAMESPACE拡張機能を使用したサーバー名前空間のサポート。
  • Secure Socket Layer(SSL)またはTransport Layer Security(TLS)で暗号化されたimap(ポート993)接続。
  • IMAPSTARTTLS拡張機能を使用した暗号化された接続。
  • チャレンジ/レスポンス認証メカニズム(CRAM)、特にCRAM-MD5を使用したユーザー認証。
  • Perl互換正規表現(PCRE)のサポート。
8
TRS-80

IMAPサーバーによっては、 sieve の実装を使用するだけで済みます。ふるいに対する最善のサポートはcyrusによって提供されると思います。

1
innaM

すでに述べたように、procmailはこれを行う正しい方法であるため、万が一の場合に備えて、電子メールプロバイダーにサポートしているかどうかを尋ねることができます。

それ以外の場合、おそらく最も簡単な方法は、並べ替えなどを行う電子メールクライアントを常に開くことです。以前は、同じIMAPメールボックスにアクセスする複数のクライアントにロックの問題がありましたが、私は何年も見ていません。

1
Marie Fischer

完全な軽量化のために、 Sift を試してみることができます。

1
David North

さらに別の方法は、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を使用するために多くのことを知る必要はありません。著者は近い将来、さらに多くの例を提供することを約束しており、機能のリクエストとプルにオープンですリクエスト。

1
flajann

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はポーリング間の秒数です)。

0
Steve HHH