2024年2月4日日曜日

Roundcubeでメール振り分け等のフィルター機能を有効にする

OSSのWebメールクライアントである「Roundcube」は、標準ではメール振り分けといったメールフィルターの機能を使用することができない。

Roundcubeはプラグインとして、機能を追加することができる。今回はRoundcubeにて「ManageSieve」のプラグインを有効化し、フィルター機能を利用できるようにする。

なお、ManageSieveを利用する際には、Dovecot PigeonholeをインストールしSieveスクリプトによるメール制御を行うことで、フィルター機能を実現することから、Postfix及びDovecot への設定追加が必要となる。

環境

Roundcubeのインストール手順は以下を参照いただきたい。

Roundcubeはあくまでもメールクライアントであるため、PostfixやDovecotによるメールサーバーの設定も必要となる。なお、今回は、バーチャルドメインのIMAPメールサーバーに対して設定を行っている。PostfixとDovecotの構築手順は以下を参照いただきたい。

構築環境としては以下となる。

  • OS : AlmaLinux 8.8
  • DB : MariaDB 10.3.35
  • Roundcube : 1.6.2
  • PHP : 7.4
  • Apache HTTP Server : 2.4.37
  • Postfix : 3.5.8
  • Dovecot : 2.3.16

Rondcubeフィルター有効化手順

1. Dovecot Pigeonholeをインストール

Dovecot Pigeonholeとは、メールの処理方法を定義する「Sieve」と呼ばれるスクリプト言語を用いてDovecot のメール配送処理を制御するためのソフトウェアとなる。

Dovecot Pigeonholeはdnfコマンドにてインストールできる。

dnf install dovecot-pigeonhole -y

2. Dovecot設定追加

Sieveを使えるようにするため、LDA (ローカル配送エージェント) 及びLMTP (Local Mail Transfer Protocol) の設定にsieveを追加する。

/etc/dovecot/conf.d/15-lda.conf

protocol lda {
  # Space separated list of plugins to load (default is global mail_plugins).
  mail_plugins = $mail_plugins sieve    # <- sieveを追加
}

/etc/dovecot/conf.d/20-lmtp.conf

protocol lmtp {
  # Space separated list of plugins to load (default is global mail_plugins).
  mail_plugins = $mail_plugins sieve    # <- sieveを追加
}

Dovecotにて、ManageSieveと呼ばれるSieveのアップロード等を管理するための機能を有効化する。設定ファイルの前半のコメントアウトされている行をアンコメントし有効化する。

/etc/dovecot/conf.d/20-managesieve.conf

# Uncomment to enable managesieve protocol:
protocols = $protocols sieve

# Service definitions

service managesieve-login {
  inet_listener sieve {
    port = 4190
  }

  inet_listener sieve_deprecated {
    port = 2000
  }

  # Number of connections to handle before starting a new process. Typically
  # the only useful values are 0 (unlimited) or 1. 1 is more secure, but 0
  # is faster. <doc/wiki/LoginProcess.txt>
  service_count = 1

  # Number of processes to always keep waiting for more connections.
  process_min_avail = 0

  # If you set service_count=0, you probably need to grow this.
  vsz_limit = 64M
}

Sieveのスクリプトファイル名は、デフォルトで.dovecot.sieveと隠しファイルになっているが、先頭に.が付いているとメールフォルダと誤認してしまう場合があるため、dovecot.sieveというファイル名に変更しておく。

/etc/dovecot/conf.d/90-sieve.conf

plugin {
  sieve = file:~/sieve;active=~/dovecot.sieve
}

以上が完了したら、Dovecotのサービスを再起動させる。

# systemctl restart dovecot

3. Postfix設定追加

Dovecotのローカル配送エージェントであるdovecot-ldaにメール配送をできるよう、master.cfに以下設定を追加する。

userはバーチャルメールボックスで使用するユーザー、グループであるvmailを指定する。

/etc/postfix/master.cf

dovecot   unix  -       n       n       -       -       pipe
  flags=DRhu user=vmail:vmail argv=/usr/libexec/dovecot/dovecot-lda -f ${sender} -d ${recipient}

設定したdovecot-ldaへメールを配送するよう、main.cfに以下設定を追加する。

/etc/postfix/main.cf

virtual_transport = dovecot

以上が完了したら、Postfixのサービスを再起動させる。

systemctl restart postfix

4. Roundcubeで「ManageSieve」のプラグインを有効化

以下の設定を追加する。なお、設定は即時に反映されるため、サービス等の再起動は不要となる。

/etc/roundcubemail/config.inc.php

$config['plugins'] = array('managesieve');

5. 動作確認

実際にRoundcubeにログインすると、「設定」画面に「フィルター」が表示されるようになっていることがわかる。

ここで動作確認のため、以下の通りフィルターを作成する。

  • フィルター名 : テスト
  • 規則 : 「件名」、「含む」、「テストメール」
  • 操作 : 「次にメッセージを移動」、「test」フォルダ

実際に「これはテストメールです。」という件名のメールを送信すると、以下の通り、「test」フォルダにメールが配送されていることがわかる。

なお、Sieveのスクリプトファイルは、以下のように作成されていた。

# cat /var/spool/virtual/[mydomain]/[myuser]/Maildir/dovecot.sieve
require ["fileinto"];
# rule:[テスト]
if allof (header :contains "subject" "テストメール")
{
        fileinto "INBOX.test";
}

以上で、Roundcubeにて「ManageSieve」のプラグインを有効化する手順は完了となる。

0 件のコメント:

コメントを投稿

人気の投稿