ラベル Roundcube の投稿を表示しています。 すべての投稿を表示
ラベル Roundcube の投稿を表示しています。 すべての投稿を表示
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」のプラグインを有効化する手順は完了となる。

2023年11月11日土曜日

Roundcubeを使ってWebメール環境を構築する

先日、Postfix+DovecotでバーチャルドメインのIMAPメールサーバーを構築する手順を記事にした。

通常メールを確認する際は、Thunderbirdなどのメールクライアントの導入が必要となるが、メールクライアントをダウンロードしてPCにインストールしアカウントの設定を行うといった作業は、何度も実施すると結構な負荷となる。

そこで今回は、Webサーバ上で動作するメールクライアント「Roundcube」を使って、Webメール環境を構築してみることにした。

環境

Roundcubeの必要とするDBやPHPのシステム要件は、以下を参照すること。

上記を踏まえ、今回Roundcubeをインストールした環境は以下の通りとした。

  • 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

以下記事の手順にて、Postfix+DovecotによるSMTP/IMAPサーバが構築済みであることが前提となる。

Roundcubeインストール手順

1. 必要パッケージのインストール

Roundcubeは必要となるパッケージが多岐にわたる。順にインストールしていこう。

まずはDBとしてMariaDBをインストールする。

dnf install httpd mariadb-server -y

次にPHPをインストールする。PHPのバージョンは7.3以上であることがシステム要件となることから、今回はPHP 7.4を選定した。また、Roundcubeは公式サイトのファイルではなく、Remiリポジトリに存在するRPMパッケージにてインストールを行う。

dnf module enable php:7.4 -y
dnf install http://rpms.remirepo.net/enterprise/remi-release-8.rpm -y
dnf --enablerepo=remi install roundcubemail -y

PHPにてMariaDBを利用するためのライブラリであるphp-mysqlnd (MySQL Native Driver) をインストールする。

dnf install php-mysqlnd -y

ImageMagicをインストールするために必要なパッケージがインストールする。gccmakeはこの後実行するpeclコマンドで必要となる。

dnf install php-devel php-pear gcc make ImageMagick ImageMagick-devel -y

単純にRPMパッケージをインストールするだけではRoundcubeからImageMagicを認識しないため、さらにpeclコマンドを実行し、ImageMagicのインストールを行う。

# pecl install imagick
WARNING: channel "pecl.php.net" has updated its protocols, use "pecl channel-update pecl.php.net" to update
downloading imagick-3.7.0.tgz ...
Starting to download imagick-3.7.0.tgz (360,138 bytes)
.........................................................................done: 360,138 bytes
33 source files, building
running: phpize
Configuring for:
PHP Api Version:         20190902
Zend Module Api No:      20190902
Zend Extension Api No:   320190902
Please provide the prefix of ImageMagick installation [autodetect] :
 ↑★そのままエンター

~(中略)~

Build process completed successfully
Installing '/usr/lib64/php/modules/imagick.so'
Installing '/usr/include/php/ext/imagick/php_imagick_shared.h'
install ok: channel://pecl.php.net/imagick-3.7.0
configuration option "php_ini" is not set to php.ini location
You should add "extension=imagick.so" to php.ini

ImageMagicのライブラリのパスを記載したPHPの設定ファイルを作成する。

# cat << EOF > /etc/php.d/20-imagick.ini
extension=/usr/lib64/php/modules/imagick.so
EOF

2. MariaDB設定

ここで一度MariaDBを起動する。

systemctl start mariadb
systemctl enable mariadb

MariaDBを起動したのちに、Roundcubeで用いるDB、ユーザ、パスワードを設定する。今回は以下の通り設定した。

  • DB : roundcubemail
  • ユーザ : roundcube
  • パスワード : password
# mysql -uroot
MariaDB [(none)]> CREATE DATABASE roundcubemail CHARACTER SET utf8 COLLATE utf8_general_ci;
MariaDB [(none)]> GRANT ALL PRIVILEGES ON roundcubemail.* TO roundcube@localhost IDENTIFIED BY 'password';
MariaDB [(none)]> FLUSH PRIVILEGES;
MariaDB [(none)]> quit

DBとDBユーザ作成後、初期設定用のSQLを流し込む。

# mysql -u roundcube roundcubemail -p < /usr/share/roundcubemail/SQL/mysql.initial.sql
Enter password: ←★先ほど作成したroundcubeユーザのパスワードを入力
# ←★エラーなくプロンプトが表示されればOK

3. Apache/PHP設定

PHPの設定ファイルであるphp.iniは最低限タイムゾーンの設定を変更しておく。

sed -i "s#;date.timezone =#date.timezone = 'Asia/Tokyo'#g" /etc/php.ini

Apacheの設定ファイルとして/etc/httpd/conf.d/roundcubemail.confがインストール時に作成されるが、そのままではローカルからのアクセスのみ許可されていることから、外部からのアクセスができるよう以下コマンドを行い設定を置換する。

sed -i 's/Require local/Require all granted/g' /etc/httpd/conf.d/roundcubemail.conf

最後にApacheを起動する。

systemctl start httpd
systemctl enable httpdd

4. インストールウィザードにアクセス

問題なくApacheが起動すれば、Roundcubeのインストールウィザード画面にアクセスできるはずだ。ブラウザから以下URLにアクセスしてみよう。

  • http://[Roundcubeのホスト名/IPアドレス]/roundcubemail/installer/

インストールウィザードでは、各種PHPのライブラリのインストール状況やDBの状況が表示される。ここでは原則すべての項目が「OK」になっていることを確認しよう(DBのみMySQLが「OK」となっていれば問題ない)。


5. config作成

インストールウィザードではRoundcubeの各種設定を行うことができる。多数の設定項目が存在するが、最低限以下表の通り設定を行えば問題ない。

設定項目 説明
Database setup > Database password (omit for sqlite) DBのroundcubeユーザのパスワードを入力する。
IMAP Settings > username_domain ここにドメインを記載すると、ログイン時にドメインを省略できる。
SMTP Settings > smtp_host 今回は同じサーバでSMTPサーバが動作していることから、localhost:25を指定する。
Display settings & user prefs > language 日本語環境にするため、ja_JPを指定する。

設定後、画面下部の「CREATE CONFIG」ボタンを選択する。

6. configをアップロード

設定した内容でconfig.inc.phpの設定ファイルが作成され表示される。

表示されたconfigの内容をブラウザ上でコピーし、/etc/roundcubemail/config.inc.phpのファイルを作成して貼り付ける。

# vi /etc/roundcubemail/config.inc.php
<?php

/* Local configuration for Roundcube Webmail */

~(中略)~

// You can connect to any other googie-compliant service by setting 'spellcheck_uri' accordingly.
$config['spellcheck_engine'] = 'enchant';

Roundcubeの設定反映のためApacheを再起動する。

systemctl restart httpd

7. ログイン確認

これでRoundcubeにログインできるはずだ。以下URLにアクセスしログイン画面が表示されることを確認しよう。

DovecotのIMAP認証に用いるものと同じユーザ (ローカルパートのみでOK) とパスワードを用いてログインできれば成功となる。

以上で、Roundcubeを使ってWebメール環境を構築する手順は完了となる。

人気の投稿