カテゴリ

postfix_dovecot シェルスクリプト(主にbash)

postfix + dovecot で仮想メールボックスを作成するスクリプト。
テスト送信+受信付。
ただしエラー処理はほとんどない。。

事前に下記のような設定をしておく。

[/etc/postfix/main.cf]
下記を追記

virtual_mailbox_domains = example.com
virtual_mailbox_base = /var/mail/vhosts
virtual_mailbox_maps = hash:/etc/postfix/vmailbox
virtual_minimum_uid = 100
virtual_uid_maps = static:5000
virtual_gid_maps = static:5000

[/etc/dovecot.conf]
下記のようになるように設定

auth default {
 passdb pam {
 }
 passdb passwd-file {
  args = /var/mail/pw
 }
 userdb passwd {
 }
 userdb passwd-file {
  args = /var/mail/pw
 }
}

で、本題のスクリプト。

スクリプト名 作成するメールアドレス(@前) パスワード

の形式で実行です。

#! /bin/sh

DOMAIN=example.com
USERNAME=$1
USERMAIL=$1@${DOMAIN}
PW=$2


TMPFILE=/tmp/dovcotpwcreatetmpfile
VMAILBOX=/etc/postfix/vmailbox
PWFILE=/var/mail/pw


create_mail_account(){

        # メールボックス設定
        echo "${USERMAIL}    ${DOMAIN}/${USERNAME}/Maildir/" >> ${VMAILBOX}

        # POPユーザ作成
        echo -n ${USERMAIL}":" > ${TMPFILE}

        expect -c "
        spawn  dovecotpw -s CRAM-MD5
        expect \"Enter new password:\"
        send   \"${PW}\n\"
        expect \"Retype new password:\"
        send   \"${PW}\n\"
        interact
        " | tail -1 | tr -d "\r\n" >> ${TMPFILE} 

        echo ":5000:5000::/var/mail/vhosts/${DOMAIN}/${USERNAME}/" >> ${TMPFILE}

        cat ${TMPFILE} >> ${PWFILE}
        rm -rf ${TMPFILE}

        postmap ${VMAILBOX}

        echo "${USERMAIL} を作成しました。"
}

send_test_mail(){
        echo "テストメールを送信します。"
        expect -c "
        spawn telnet localhost smtp
        expect \"220 *\"
        send   \"helo localhost\n\"
        expect \"250 *\"
        send   \"mail from: localhost\n\"
        expect \"250 *\"
        send   \"rcpt to:${USERMAIL}\n\"
        expect \"250 *\"
        send   \"data\n\"
        expect \"354 *\"
        send   \"Subject: Test Mail\n\nMail.\n.\n\"
        expect \"250 *\"
        send   \"quit\n\"
        expect \"221 *\"
        interact
        "
}

pop_test(){
        echo "POPテストをします。"
        expect -c "
        set timeout 10
        spawn telnet localhost pop3
        expect \"+OK*\"
        send   \"user ${USERMAIL}\n\"
        expect \"+OK*\"
        send   \"pass ${PW}\n\"
        expect \"+OK*\"
        send   \"list\n\"
        expect \".*\"
        send   \"retr 1\n\"
        expect \".*\"
        send   \"quit\n\"
        expect \"+OK*\"
        interact
        "
}

if [ -z "$( grep "${USERMAIL}" ${VMAILBOX} )" ] ; then
    if [ -z "$( grep "${USERMAIL}" ${PWFILE} )" ] ;then
        create_mail_account \
        && send_test_mail \
        && pop_test
    else
        echo "POPパスワードファイルに既に ${USERMAIL} の設定があります。"
        echo "処理を中止します。"
    fi
else
    echo "仮想メールボックスファイルに既に ${USERMAIL} の設定があります。"
    echo "処理を中止します。"
fi

コメント

いただいたコメント
  1. [Blog:技術系メモ http://go.kaz.bz/5s ] に新規投稿しました。 「 postfix + dovecot で仮想メールボック�... 」