メールデータ移行

最終更新日: 2012.06.22

<<トップページ <<新着情報 <<サイト内検索 <<CentOSで自宅サーバー構築 <<Fedoraで自宅サーバー構築 <<前のページへ戻る

■概要

メールサーバーが受信したメールを格納する形式には、以下のものがある。

・共有ディレクトリ形式(「/var/spool/mail/ユーザ名」というファイルに全てのメールが蓄積されていく形式)
・ホームMailbox形式(「/home/ユーザ名/Mailbox」というファイルに全てのメールが蓄積されていく形式)
・Maildir形式(「/home/ユーザ名/Maildir/new」というディレクトリに新着メール、/home/ユーザ名/Maildir/cur」というディレクトリに既読メール、/home/ユーザ名/Maildir/tmp」というディレクトリに配送中メールを格納し、各ディレクトリ内でもメール1通を1ファイルとして管理する形式)

Linuxのデフォルトメールサーバーであるsendmailのメール格納形式は共有ディレクトリ形式だが、アクセス性能改善及び、セキュリティ強化の観点からMaildir形式へ移行する。
ここでは、既に共有ディレクトリ形式または、ホームMailbox形式によるメールサーバーを運用中の場合を想定し、全ユーザのメールデータをMaildir形式へ移行するようにする。


■メールサーバー停止

※メールデータ移行中にメールを受け付けないようにするため、現在稼動しているメールサーバーを停止する
[root@scientific ~]# /etc/rc.d/init.d/postfix stop ← Postfix停止
Shutting down postfix:                                     [  OK  ]

■メールデータ移行

(1)Maildir変換ツール入手
[root@scientific ~]# wget http://perfectmaildir.home-dn.net/perfect_maildir/perfect_maildir.pl -O /usr/local/bin/perfect_maildir.pl
 ← Maildir変換ツールダウンロード

[root@scientific ~]# chmod +x /usr/local/bin/perfect_maildir.pl ← Maildir変換ツールへ実行権限付加

(2)Maildir変換に必要なPerlのTimeDateモジュールインストール
[root@scientific ~]# yum -y install perl-TimeDate ← PerlのTimeDateモジュールインストール

(3)Maildir一括変換スクリプト作成
[root@scientific ~]# vi migrate-maildir.sh ← Maildir一括変換スクリプト作成
#!/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}":"${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}":"${user}" "$newdir"
    find "$newdir" -type f  -exec chmod 600 {} \;
fi
[ -a $MIGRATELOG ] && cat $MIGRATELOG;rm -f $MIGRATELOG

(4)メールデータ移行(共有ディレクトリ形式⇒Maildir形式)
現在のメールボックス形式がデフォルトの「/var/spool/mail/ユーザ名」の場合
[root@scientific ~]# sh migrate-maildir.sh mbox ← Maildir一括変換スクリプト実行
Use of uninitialized value $date in string at /usr/local/bin/perfect_maildir.pl line 93.
Use of uninitialized value $delivered_time in concatenation (.) or string at /usr/local/bin/perfect_maildir.pl line 109.
Use of uninitialized value $delivered_time in utime at /usr/local/bin/perfect_maildir.pl line 135.
Inserted X messages into maildir /home/XXXXXXXX/Maildir/ in 0 seconds
・
・
・
Inserted X messages into maildir /home/XXXXXXXX/Maildir/ in 0 seconds

(5)メールデータ移行(ホームMailbox形式⇒Maildir形式)
現在のメールボックス形式が「/home/ユーザ名/Mailbox」の場合
[root@scientific ~]# sh migrate-maildir.sh Mailbox ← Maildir一括変換スクリプト実行
Use of uninitialized value $date in string at /usr/local/bin/perfect_maildir.pl line 93.
Use of uninitialized value $delivered_time in concatenation (.) or string at /usr/local/bin/perfect_maildir.pl line 109.
Use of uninitialized value $delivered_time in utime at /usr/local/bin/perfect_maildir.pl line 135.
Inserted X messages into maildir /home/XXXXXXXX/Maildir/ in 0 seconds
・
・
・
Inserted X messages into maildir /home/XXXXXXXX/Maildir/ in 0 seconds

(6)メールデータ移行後始末
[root@scientific ~]# rm -f migrate-maildir.sh ← Maildir一括変換スクリプト削除

[root@scientific ~]# rm -f /usr/local/bin/perfect_maildir.pl ← Maildir変換ツール削除

※メールデータ移行後は、メールサーバーのメール格納形式をMaildir形式へ移行すること

■メールサーバー起動

※メールデータ移行の際に停止したメールサーバーを起動する
[root@scientific ~]# /etc/rc.d/init.d/postfix start ← Postfix起動
Starting postfix:                                          [  OK  ]




▲このページのトップへ戻る

LPIロゴ Copyright© 2011-2017 fallenangels, All rights reserved.
ご自由にリンクしてください(連絡は不要です)
本ページへのご意見・ご要望、誤字・脱字・リンク切れ等のご連絡はこちらからお願いします