バーチャル バケーション(Virtual Vacation)の設定(CentOS4.x/5.x編)


Postfix AdminによりPostfixでバーチャルドメインで運用している場合に、Vacation運用する方法を紹介します。基本は、VIRTUAL_VACATIONディレクトリにあるINSTALL.TXTに順じています。
なお、Postfix Admin2.1.0のバーチャル バケーション機能にはバグが存在することと、日本語の不在メッセージが扱えないためパッチで対応しました。更に、メーリングリスト等、不在メッセージを返信したくない自動返信除外アドレスを登録できるようにしました。

■バケーション機能の概要

Postfix Admin2.1.0のバーチャル バケーション機能の概要は以下のとおりです。。

  1. バケーション登録は、「件名」と「本文」を登録する。

  2. バケーションの削除は、「自動応答」を選択し「設定解除」をクリックする。登録後に登録内容の変更はできないため、一旦削除してから再度新規登録する。

  3. バケーション登録にメールが到着すると、登録された内容が自動返信される。一度返信した相手には、登録が解除されるまで再度返信されることはない。

  4. 自動応答除外登録されたアドレスには自動返信されないので、メーリングリストや自動送信元を登録する。

  5. 下記アドレスも自動返信されないようになっている。

    1. owner-***@*****
    2. ***-request@*****
    3. ***-owner@*****
    4. mailer-daemon***@*****
    5. postmaster***@*****


■ローカルアカウントの作成

バーチャル バケーションを動かすためのローカルアカウント(vacation:vacation)を以下で作成します。

  1. まずは、vacation というグループを ID:66501 で作成する。

    # groupadd -g 65501 vacation

  2. 続けて vacation ユーザを作成する。vacation ユーザは、ログイン不可、ホームディレクトリなし、ID:66501で作成する。

    # useradd -g vacation -u 65501 vacation -c 'Virtual Vacation' -d /nonexistent -s /sbin/nologin

■PostfixAdmin関係の設定

Postfix Admin2.1.0のバーチャル バケーション機能にはバグが存在すること、日本語での不在メッセージが扱えないためパッチを適用します。なお、ここではpostfixadminは日本語化が済み導入も済んでいるものとして記載しますが、新規の場合は、下記のパッチを適用したものをベースにこちらで基本的なバーチャルドメイン対応を行い、更にこちらのバーチャル バケーション対応を行えば大丈夫です。

  1. Postfix Admin2.1.0をダウンロードして、バグ対処・日本語対応のパッチをあてる。

    # cd /usr/local/src
    # wget http://downloads.sourceforge.net/postfixadmin/postfixadmin-2.1.0.tgz?modtime=1105140809&big_mirror=0&filesize=160525
    # tar zxfv postfixadmin-2.1.0.tgz
    # wget http://www.aconus.com/~oyaji/suse9.2/postfixadmin-2.1.0-vacation_jp.patch
    # patch -p0 < postfixadmin-2.1.0-vacation_jp.patch

  2. 日本語対応パッチをあてた下記ファイルを既存のファイルと置き換える。(自動返信除外関係は新規)

    # cd /usr/local/src/postfixadmin-2.1.0
    # cp admin/backup.php /var/www/html/postfixadmin/admin/
    # cp languages/ja.lang /var/www/html/postfixadmin/languages/
    # cp templates/edit-vacation.tpl /var/www/html/postfixadmin/ templates/
    # cp templates/users_main.tpl /var/www/html/postfixadmin/ templates/
    # cp templates/users_menu.tpl /var/www/html/postfixadmin/ templates/
    # cp users/edit-vacation.php /var/www/html/postfixadmin/users/

  3. vacation の作業用ディレクトリを作成し、そこに vacation.pl ファイルをコピーし、オーナとパーミッションを変更する。

    # mkdir -p /var/spool/vacation
    # cd /usr/local/src/postfixadmin-2.1.0
    # cp VIRTUAL_VACATION/vacation.pl /var/spool/vacation/vacation.pl
    # chown -R vacation:vacation /var/spool/vacation
    # chmod 700 /var/spool/vacation/vacation.pl

  4. vacation.pl の postfixadmin 用パスワードを変更する。

    my $db_pass = 'new password2';

  5. vacation機能を有効にするため、postfixadminのconfig.inc.phpを変更する。「yourdomain.com」の部分は、自分のドメインに変更する。なお、「autoreply.yourdomain.com」は実在するサブドメインである必要はないが自分のドメイン以外は避けるべきである。なお、このサブドメインはDNSに登録されている必要もない。因みに、この設定は、「ここで指定したサブドメイン宛のメールをvacationに配送する。」というものなので、実在するドメインでは逆にまずいことになる。

    $CONF['vacation'] = 'YES';
    $CONF['vacation_domain'] = 'autoreply.mail.aconus.com';

  6. バケーション機能の日本語化対応では Jcode.pm を使用するので、インストールしてなければ下記でCPANからインストールする。

    # perl -MCPAN -e shell
    cpan> install Jcode

  7. 自動返信除外アドレスの管理用mysqlテーブルを追加する。新規の場合は、DATABASE_MYSQL.TXTにパッチがあててあるのでこちらでテーブルを作成すればよい。

    # mysql -u root -p
    Enter password:xxxxx[Enter]

    Welcome to the MySQL monitor. Commands end with ; or \g.
    Your MySQL connection id is 1661 to server version: 5.0.26

    Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

    mysql> use postfix[Enter]
    Database changed
    mysql> CREATE TABLE vacation_exclusion ([Enter]
        ->   email varchar(255) NOT NULL default '',[Enter]
        ->   exclusion text NOT NULL,[Enter]
        ->   active tinyint(1) NOT NULL default '1',[Enter]
        ->   PRIMARY KEY (email),[Enter]
        ->   KEY email (email)[Enter]
        -> ) TYPE=MyISAM COMMENT='Postfix Admin - Virtual Vacation Exclusion';[Enter]
    Query OK, 0 rows affected, 1 warning (0.04 sec)

    mysql> flush privileges;[Enter]
    Query OK, 0 rows affected (0.03 sec)

    mysql> \q[Enter]
    Bye

■Postfix関係の設定

Postfix 関係の設定を下記で行っていきます。

  1. /etc/postfix/master.cf に下記を追加し、メール配送 vacation として vacation.pl への配送を定義する。

    #/etc/postfix/master.cf:
    vacation    unix  -       n       n       -       -       pipe
      flags=Rq user=vacation argv=/var/spool/vacation/vacation.pl -f ${sender} -- ${recipient}

  2. /etc/postfix/main.cf に下記設定(transport_maps)を追加し、配送条件をtransportファイルで指定する。既にtransportを利用している場合は、本項は不要である。

    #/etc/postfix/main.cf:
    transport_maps = hash:/etc/postfix/transport

  3. /etc/postfix/transport ファイルに下記のような設定を追加する。
    「yourdomain.com」の部分は、自分のドメインに変更する。
    また、このドメインは、config.inc.php の " $CONF['vacation_domain'] " と一致させる必要がある。

    # /etc/postfix/transport
    # ex. autoreply.mail.aconus.com vacation:
    autoreply.yourdomain.com     vacation:

  4. 下記コマンドでハッシュDBを作成する。

    # postmap /etc/postfix/transport

  5. postfixを再起動する。

    # postfix reload

■動作確認

設定が正しくできていれば、一般ユーザでログインすると、下記のように「自動応答」と「自動応答除外」のメニューが追加されているはずである。




■不在メッセージの文字化け対策

おやじの場合、上記テストでバケーション機能は問題なく動作したが、不在メッセージが文字化けし使い物にならなかった。具体的にはMySQLに登録された文字が「?????」に化けてしまうというもので、PHPとMySQL間での整合が取れていないことに起因する問題であった。
本件に関しては、ググルといろいろ情報がでてきたので対処してみたが、結果、文字化けは解消しなかった。そこで、MySQLの設定を変更した後、DBを最初から構築しなおしたところ問題なくしようできるようになった。具体的には、下記のように /etc/my.cnf のmysqldに下記を追加設定しました。

[mysqld]
character-set-server = ujis
collation-server = ujis_japanese_ci
init-connect = SET NAMES ujis
skip-character-set-client-handshake

 (snip)




Topページへ