●概要
メールサーバーが受信したメールを格納する形式には、以下のものがあります。
・共有ディレクトリ形式(「/var/spool/mail/ユーザ名」というファイルに全てのメールが蓄積されていく形式)
・ホームMailbox形式(「/home/ユーザ名/Mailbox」というファイルに全てのメールが蓄積されていく形式)
・Maildir形式(「/home/ユーザ名/Maildir/new」というディレクトリに新着メール、/home/ユーザ名/Maildir /cur」というディレクトリに既読メール、/home/ユーザ名/Maildir/tmp」とい うディレクトリに配送中メールを格納し、各ディレクトリ内でもメール1通を1ファイルとして管理する形式)
Linuxのデフォルトメールサーバーであるsendmailのメール格納形式は共有ディレクトリ形式ですが、アクセス性能改善及びセキュリティ強化の観点からMaildir形式へ移行します。
ここでは、既に共有ディレクトリ形式または、ホームMailbox形式によるメールサーバーを運用中の場合を想定し、全ユーザのメールデータをMaildir形式へ移行するようにします。
●メールサーバー停止
メールデータ移行中にメールを受け付けないようにするため、現在稼動しているメールサーバーを停止します。
・sendmailの場合
●メールデータ移行
・Maildir変換ツール入手
Maildir変換ツールダウンロード
・Maildir変換に必要なPerlのTimeDateモジュールインストール
現在のメールボックス形式がデフォルトの「/var/spool/mail/ユーザ名」の場合
現在のメールボックス形式が「/home/ユーザ名/Mailbox」の場合
※メールデータ移行後メールサーバー再起動後したにもかかわらず、/var/spool/mail/ユーザ名」にメールが保存されてしまう場合、「全ユーザ共通設定」及び「ユーザ毎の設定」を参照して「/etc/procmailrc」を設定してください。
●メールサーバー起動
メールデータ移行の際に停止したメールサーバーを起動します。
・sendmailの場合
メールサーバーが受信したメールを格納する形式には、以下のものがあります。
・共有ディレクトリ形式(「/var/spool/mail/ユーザ名」というファイルに全てのメールが蓄積されていく形式)
・ホームMailbox形式(「/home/ユーザ名/Mailbox」というファイルに全てのメールが蓄積されていく形式)
・Maildir形式(「/home/ユーザ名/Maildir/new」というディレクトリに新着メール、/home/ユーザ名/Maildir /cur」というディレクトリに既読メール、/home/ユーザ名/Maildir/tmp」とい うディレクトリに配送中メールを格納し、各ディレクトリ内でもメール1通を1ファイルとして管理する形式)
Linuxのデフォルトメールサーバーであるsendmailのメール格納形式は共有ディレクトリ形式ですが、アクセス性能改善及びセキュリティ強化の観点からMaildir形式へ移行します。
ここでは、既に共有ディレクトリ形式または、ホームMailbox形式によるメールサーバーを運用中の場合を想定し、全ユーザのメールデータをMaildir形式へ移行するようにします。
●メールサーバー停止
メールデータ移行中にメールを受け付けないようにするため、現在稼動しているメールサーバーを停止します。
・sendmailの場合
# /etc/rc.d/init.d/sendmail stop・Postfixの場合
# /etc/rc.d/init.d/postfix stop・qmailの場合
# /etc/rc.d/init.d/qmail stop
●メールデータ移行
・Maildir変換ツール入手
Maildir変換ツールダウンロード
# wget http://perfectmaildir.home-dn.net/perfect_maildir/perfect_maildir.pl -O /usr/local/bin/perfect_maildir.pl
# chmod +x /usr/local/bin/perfect_maildir.pl <−− Maildir変換ツールへ実行権限付加
・Maildir変換に必要なPerlのTimeDateモジュールインストール
# yum -y install perl-TimeDate・Maildir一括変換スクリプト作成
# vi migrate-maildir.sh以下が、その内容です。
#!/bin/bash # #Maildir一括変換スクリプト # #メールボックス=>Maildir形式変換スクリプト #http://perfectmaildir.home-dn.net/ FOLDERCONVERT=/usr/local/bin/perfect_maildir.pl #一般ユーザリスト USERLIST=`ls /home/` #ログ MIGRATELOG=/tmp/migrate-maildir.log rm -f $MIGRATELOG #引数(変換元メールボックス形式)チェック if [ "$1" != "mbox" ] && [ "$1" != "Mailbox" ]; then echo "Usage: migrate-maildir.sh {mbox|Mailbox}" exit fi #一般ユーザメールボックス移行 for user in $USERLIST; do if [ "$1" = "mbox" ]; then inbox="/var/spool/mail/${user}" else inbox="/home/${user}/Mailbox" fi if [ -f "${inbox}" ]; then newdir="/home/${user}/Maildir/" mkdir -p "$newdir" mkdir -p "$newdir"/cur mkdir -p "$newdir"/new mkdir -p "$newdir"/tmp chmod -R 700 "${newdir}" $FOLDERCONVERT "$newdir" < "${inbox}" >> $MIGRATELOG 2>&1 chown -R ${user}. "$newdir" find "$newdir" -type f -exec chmod 600 {} \; fi done #rootユーザメールボックス移行 user="root" if [ "$1" = "mbox" ]; then inbox="/var/spool/mail/${user}" else inbox="/${user}/Mailbox" fi if [ -f "${inbox}" ]; then newdir="/${user}/Maildir/" mkdir -p "$newdir" mkdir -p "$newdir"/cur mkdir -p "$newdir"/new mkdir -p "$newdir"/tmp chmod -R 700 "${newdir}" $FOLDERCONVERT "$newdir" < "${inbox}" >> $MIGRATELOG 2>&1 chown -R ${user}. "$newdir" find "$newdir" -type f -exec chmod 600 {} \; fi [ -a $MIGRATELOG ] && cat $MIGRATELOG;rm -f $MIGRATELOG・メールデータ移行(共有ディレクトリ形式→Maildir形式)
現在のメールボックス形式がデフォルトの「/var/spool/mail/ユーザ名」の場合
sh migrate-maildir.sh mbox <−− 一括変換スクリプト実行
Inserted X messages into maildir /home/XXXXXXXX/Maildir/ in 0 seconds
・
・
・
Inserted X messages into maildir /home/XXXXXXXX/Maildir/ in 0 seconds
・メールデータ移行(ホームMailbox形式⇒Maildir形式)
現在のメールボックス形式が「/home/ユーザ名/Mailbox」の場合
# sh migrate-maildir.sh Mailbox <−− 一括変換スクリプト実行
Inserted X messages into maildir /home/XXXXXXXX/Maildir/ in 0 seconds
・
・
・
Inserted X messages into maildir /home/XXXXXXXX/Maildir/ in 0 seconds
・メールデータ移行後始末
# rm -f migrate-maildir.sh <−− Maildir一括変換スクリプト削除 # rm -f /usr/local/bin/perfect_maildir.pl <−− Maildir変換ツール削除※メールデータ移行後は、メールサーバーのメール格納形式をMaildir形式へ移行すること。
※メールデータ移行後メールサーバー再起動後したにもかかわらず、/var/spool/mail/ユーザ名」にメールが保存されてしまう場合、「全ユーザ共通設定」及び「ユーザ毎の設定」を参照して「/etc/procmailrc」を設定してください。
●メールサーバー起動
メールデータ移行の際に停止したメールサーバーを起動します。
・sendmailの場合
# /etc/rc.d/init.d/sendmail start・Postfixの場合
# /etc/rc.d/init.d/postfix start・qmailの場合
# /etc/rc.d/init.d/qmail start