メールデータ移行

最終更新日: 2017.02.18

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

■概要

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

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

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


■メールデータ移行

※メールデータ移行中にメールを受け付けないようにするため、メールサーバーは停止しておくこと

(1)Maildir変換ツール入手
[root@centos ~]# wget http://perfectmaildir.home-dn.net/perfect_maildir/perfect_maildir.pl -O /usr/local/bin/perfect_maildir.pl
 ← Maildir変換ツールダウンロード
--13:49:46--  http://perfectmaildir.home-dn.net/perfect_maildir/perfect_maildir.pl
           => `/usr/local/bin/perfect_maildir.pl'
perfectmaildir.home-dn.net をDNSに問いあわせています... 194.146.227.112
perfectmaildir.home-dn.net[194.146.227.112]:80 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 4,103 [text/x-perl]

100%[=================================================>] 4,103         14.50K/s             

13:49:46 (14.49 KB/s) - `/usr/local/bin/perfect_maildir.pl' saved [4,103/4,103]

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

(2)Maildir変換に必要なPerlのTimeDateモジュールインストール
[root@centos ~]# cpan2rpm --install TimeDate ← TimeDateモジュールインストール
※cpan2rpmコマンドについてはPerlモジュールパッケージ管理システム導入(cpan2rpm)参照

[root@centos ~]# rm -f /usr/src/redhat/RPMS/noarch/perl-TimeDate* ← 作成されたRPMを削除

[root@centos ~]# rm -f /usr/src/redhat/SRPMS/perl-TimeDate* ← 作成されたSRPMを削除

[root@centos ~]# rpmbuild --rmsource --rmspec /usr/src/redhat/SPECS/TimeDate.spec ← RPM作成後始末

(3)Maildir一括変換スクリプト作成
[root@centos ~]# vi migrate-maildir ← 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 {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

(4)メールデータ移行(共有ディレクトリ形式⇒Maildir形式)
現在のメールボックス形式がデフォルトの「/var/spool/mail/ユーザー名」の場合
[root@centos ~]# sh migrate-maildir mbox ← Maildir一括変換スクリプト実行
※Maildir一括変換スクリプト実行結果は/tmp/migrate-maildir.logに保存される

(5)メールデータ移行(ホームMailbox形式⇒Maildir形式)
現在のメールボックス形式が「/home/ユーザー名/Mailbox」の場合
[root@centos ~]# sh migrate-maildir Mailbox ← Maildir一括変換スクリプト実行
※Maildir一括変換スクリプト実行結果は/tmp/migrate-maildir.logに保存される

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

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

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



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

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