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
[Blog:技術系メモ http://go.kaz.bz/5s ] に新規投稿しました。 「 postfix + dovecot で仮想メールボック�... 」