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 で仮想メールボック�... 」