メールデータ移行

最終更新日: 2014.02.19

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

■概要

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

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

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


■メールサーバー停止

※メールデータ移行中にメールを受け付けないようにするため、現在稼動しているメールサーバーを停止する

(1)sendmailの場合(デフォルト)
[root@fedora ~]# /etc/rc.d/init.d/sendmail stop ← sendmail停止
sendmail を停止中:                                         [  OK  ]
sm-client を停止中:                                        [  OK  ]

(2)Postfixの場合
[root@fedora ~]# /etc/rc.d/init.d/postfix stop ← Postfix停止
Shutting down postfix:                                     [  OK  ]

(3)qmailの場合
[root@fedora ~]# /etc/rc.d/init.d/qmail stop ← qmail停止
Shutting down qmail

■メールデータ移行

(1)Maildir変換ツール入手
[root@fedora ~]# wget http://perfectmaildir.home-dn.net/perfect_maildir/perfect_maildir.pl -O /usr/local/bin/perfect_maildir.pl
 ← Maildir変換ツールダウンロード
--13:01:21--  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 (4.0K) [text/x-perl]

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

13:01:23 (13.82 KB/s) - `/usr/local/bin/perfect_maildir.pl' を保存しました [4103/4103]

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

(2)Maildir変換に必要なPerlのTimeDateモジュールインストール
[root@fedora ~]# yum -y install perl-TimeDate ← PerlのTimeDateモジュールインストール
Loading "installonlyn" plugin
Setting up Install Process
Setting up repositories
core                                                                 [1/5]
crash-hat                                                            [2/5]
core-source                                                          [3/5]
extras                                                               [4/5]
updates                                                              [5/5]
Reading repository metadata in from local files
Excluding Packages in global exclude list
Finished
Parsing package install arguments
Resolving Dependencies
--> Populating transaction set with selected packages. Please wait.
---> Downloading header for perl-TimeDate to pack into transaction set.
perl-TimeDate-1.16-3.2.no 100% |=========================| 8.5 kB    00:00
---> Package perl-TimeDate.noarch 1:1.16-3.2 set to be updated
--> Running transaction check

Dependencies Resolved

=============================================================================
 Package                 Arch       Version          Repository        Size
=============================================================================
Installing:
 perl-TimeDate           noarch     1:1.16-3.2       core               33 k

Transaction Summary
=============================================================================
Install      1 Package(s)
Update       0 Package(s)
Remove       0 Package(s)
Total download size: 33 k
Downloading Packages:
(1/1): perl-TimeDate-1.16 100% |=========================|  33 kB    00:00
Running Transaction Test
Finished Transaction Test
Transaction Test Succeeded
Running Transaction
  Installing: perl-TimeDate                ######################### [1/1]

Installed: perl-TimeDate.noarch 1:1.16-3.2
Complete!

(3)Maildir一括変換スクリプト作成
[root@fedora ~]# 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@fedora ~]# sh migrate-maildir.sh mbox ← Maildir一括変換スクリプト実行
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@fedora ~]# sh migrate-maildir.sh Mailbox ← Maildir一括変換スクリプト実行
Inserted X messages into maildir /home/XXXXXXXX/Maildir/ in 0 seconds
・
・
・
Inserted X messages into maildir /home/XXXXXXXX/Maildir/ in 0 seconds

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

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

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

■メールサーバー起動

※メールデータ移行の際に停止したメールサーバーを起動する

(1)sendmailの場合(デフォルト)
[root@fedora ~]# /etc/rc.d/init.d/sendmail start ← sendmail起動
sendmail を起動中:                                         [  OK  ]
sm-client を起動中:                                        [  OK  ]

(2)Postfixの場合
[root@fedora ~]# /etc/rc.d/init.d/postfix start ← Postfix起動
Starting postfix:                                          [  OK  ]

(3)qmailの場合
[root@fedora ~]# /etc/rc.d/init.d/qmail start ← qmail起動
Starting qmail


■関連コンテンツ




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

プライバシーポリシー