Home > 備忘録 > レンタルサーバ変更に伴うWeb、メールサーバーの切替メモ

レンタルサーバ変更に伴うWeb、メールサーバーの切替メモ

  • 2009-04-29 (水) 16:28
  • 備忘録
  • 投稿者:hitotsu
2009/04/28
[レンタルサーバ移行作業のメモ]
今回は、Webサーバー、メールサーバーの順番に切り替えを行いました。
—————————————————————————
【Webサーバーの切替】
Webサーバーはもともとhtmlで自社テストサーバ(違うドメイン名)に移動するようにしていたので、
新サーバーに同じhtmlファイルを置き、DNSのWebサーバの設定を新サーバーに変更。

自社テストサーバーのコンテンツは最終的に新サーバーに移動させますが、現時点で一部の
PHPスクリプトが動作しないので、動くようになってから新サーバーでの運用を開始します。
—————————————————————————
【メールサーバーの切替】
DNSのMXレコードを移行先のメールサーバに変更すれば完了です!
と言えればラクチンですが、現実にはそうはいきません^^;
単に切り替えて使い始めてしまうと、切り替え前後に一部のメールが届かない不具合が発生してしまいます。
(メールのやりとりがほとんどない場合は気にしなくていいのかもしれませんが・・・)

そこで、切り替え前後で届いているメールの受信もれがないように以下の手順で受信します。
(切り替え前のメールソフトの設定は旧サーバーを使って送信・受信しているものとします)

(1)新メールサーバーにメールアカウントを登録
(2)旧メールサーバーにてメールを受信
(3)DNSのメール設定を新サーバーに変更
(4)メールソフトのメール送信・受信の設定を新サーバーに変更
(5)テストメールを送信してメールを受信できることを確認(送受信テスト)

(*)以下の(6)はまだ実施しません。
(6)旧レンタルサーバーのドメイン設定を解除

(5)まで行うと、基本的にメール切り替えが完了していますが、DNSのメール設定が
全世界に反映されるまでの間は、旧サーバーにメールが届きます。

そこで、(6)の実施は少し時間を置きます。(私は24時間後に実施しました)

(参考)旧メールサーバーを使う他の利用者からのメールは「(6)のドメイン解除」を行なうまでは、
旧メールサーバに届きます。同じレンタルサーバーを使っている取引先がある場合には要注意です。

(6)の実施前に旧メールサーバーにメールが届いているかどうか確認します。
メールが届いておれば、メールソフトのメール受信設定を旧メールサーバーに戻して受信します。
メールサーバー名が新サーバーと旧サーバーで同じ場合は、旧メールサーバーのかわりにIPアドレスを入れて受信します。

受信が完了したら、メールソフトの設定を新サーバーに戻して(6)の解除を行ないます。
これで、移転作業は完了です。

—————————————————————————
【最後に】
上のように書いたことを眺めると簡単そうですね。
現実は、手間をかけて自分が動かないと実現できません。
移転作業をされる方は、じっくりがんばってください^^。

私の場合、メールアカウントに届いているメールの確認作業をとても手作業でできず、
プログラムを書きましたので、参考までにご紹介します。

旧サーバーにメールが残っているかを確認するのは、メールアカウントが数個なら
それほど手間はありません。しかし、個数が多くなると確認するだけでも大変です。
(確認の結果1通もメールがなかったら確認した手間が無駄になったような気になりますが、
1通も失うことがないようにするためには、この確認は必須です)

私はテストアカウントを100個以上登録していたので、手作業ではしんどい状態でした^^;。
そこで、以下のようなPHPスクリプトを書いてすべてのメールアカウントを確認しました。

無保証、無サポートですが使いたい方は、ご自由にお使いください。

<?php
// 2009/04/28-29
// 指定アカウントのメールボックスにメールが残っているかどうかを調べます
// 0件なら正常、アクセスエラー、1件以上ある場合はエラー表示します
// $account、$hostを適切に記述して使ってください

error_reporting( 0 ); // 0件の時「PHP Notice: Unknown: Mailbox is empty (errflg=1) in Unknown on line 0」と表示されるのを抑制
$account = array(
    array("name1@somedomain.name","user1","pass1"),
    array("name2@somedomain.name","user2","pass2"),
);
$host = "pop.somedomain.name";
$port = 110;
for ( $i = 0; $i < count( $account ); $i++ ) {
    $email = $account[ $i ][ 0 ];
    $user = $account[ $i ][ 1 ];
    $pass = $account[ $i ][ 2 ];
    $sum = get_mbox( $host, $user, $pass, $port );
    if ( $sum < 0 ) {
        $msg = "(x)$email POP access error.\r\n";
    } else if ( $sum > 0 ) {
        $msg = "(x)$email has $sum message.\r\n";
    } else {
        $msg = "(o)$email\r\n";
    }
    echo $msg;
}

function get_mbox( $host, $user, $pass, $port = 110 )
{
    $sum = –1;
    $str = "{".$host.":".$port."/pop3}INBOX";
    $mbox = @imap_open( $str , $user, $pass );
    if ( $mbox !== false ) {
        $sum = @get_msgnum( $mbox );
        imap_close( $mbox );
    }
    return $sum;
}

function get_msgnum( $mbox )
{
    $check = imap_check($mbox);
    return $check->Nmsgs;
}
?>