データを失うことなく、ある imap サーバーから別の imap サーバーに全量のデータ (すべてのサブフォルダー) を転送したい。
2 に答える
PHP が方程式にどのように適合するかがわからないため、「PHP メールの移行」が何を意味するのかわかりません。
そうは言っても、あなたが説明していることを達成できるMAP移行ツールがいくつかあります。私はこれを行うことができるYippieMoveという製品の共同創設者ですが、 imapsyncのような他のオープン ソースの代替手段もあります。Google をよく調べてみると、さらに多くのオプションが見つかります。
vpetersson が述べたように、ある Imap から別の Imap サーバーへの電子メールの移行は、Microsoft Outlook、Mozilla Thunderbird、Apple Mail クライアントなどの任意の imap クライアント ソフトウェアでも簡単に実行できるため、PHP の部分には完全には適合しません。すぐ。やり方は簡単です。移行する必要がある電子メール アカウントの数が限られている場合は、Mozilla Thunderbird のサンプル ワークフローを次に示します。他のクライアントでも同じプロセスに従うことができます。
- 新しい Imap アカウントを作成し、Source という名前を付けます。[プロトコルとして POP ではなく IMAP を選択していることを確認してください]
- 現在のソース Imap サーバーに接続できるように設定します。そのアカウントのメールの量とネットの速度によっては、すべてのメールを同期するのに時間がかかる場合があります。
- 同期が完了したら、ターゲット サーバー用の新しいアカウントを作成し、名前を Target にして、IMAP として構成します。
- ターゲット アカウントは明らかに空になります。ソース アカウントからターゲット アカウントにすべてのフォルダーをコピーするだけです。
- Thunderbird はすべてのコピー プロセスを処理し、すべてのメールを自動的に新しいサーバーにアップロードします (IMAP アカウントのデフォルトの動作として)。完了すると、両方のサーバーでメール アカウントの完全なクローンが作成されます。
または、PHP で実行する必要がある場合は、おそらく何百ものメール アカウントがあり、上記の方法を使用するのは現実的ではないため、以下の手順に従ってください。
PHP_Imap ライブラリも使用できますが、サーバーを制御できる場合は、PEAR の Net_IMAP ライブラリを使用することをお勧めします。このライブラリには、PHP の標準 IMAP ライブラリにはいくつかの機能がありません。
- すべてのアカウントとアカウントごとに for ループを作成する
サーバーに接続する
$imapServer = 新しい Net_IMAP($emailHost, 143); $loggedIn = $imapServer->login($loginName , $password); if($loggedIn == true){ //コードがここに入る }
すべてのフォルダを検索
$mBoxes = $imapServer->getMailboxes('', 0, true);
フォルダごとに
$mBox = $imapServer->selectMailbox($folderName);
すべてのメッセージを検索
$msgsList = $imapServer->getMessagesList();
生メッセージを取得します。
foreach($msgUid){ $fullRawMail = $imapServer->getMessages($msgUid,false); }
ターゲットサーバーに接続
ターゲットサーバーにソースと同じフォルダーがあるかどうかを確認し、そうでない場合はフォルダーを作成します
生メッセージをターゲット サーバー [特定のフォルダー] にアップロードします。そのためにphpのimap_append関数を使用できます。
imap_append($ImapStream, $folderName, $fullRawMail , "\Seen");