MDaemonからExim + Dovecotへの移行

ようこそ、Habrの住人。



最近、職場で状況が発生しました。新しいメールサーバーを選択し、すべての現在のアカウントと古いサーバーからメールフォルダーの構造を転送する必要がありました。 これにはいくつかの理由があります。

  1. アカウントの数は250アカウントに制限されていました。
  2. 最近、メールサーバーがフリーズし始めたため、ハードリセットのみに役立ちました(かつて、そのHDDがかなり激しく使用される前に気付きました)。


その時点で(SuperMicroプラットフォームで)起こったことを次に示します。



約240のアカウントが使用され、Usersフォルダー(すべてのメール)の重量は約200 GBです。



何が起こったのか(Dell PowerEdge 2850プラットフォーム)



さて、これですべてが整いました。



1. FreeBSD、Exim、DoveCot、SpamAssassinのインストール

1.1。 FreeBSDをインストールする

選択はFreeBSD 9.0に落ちました。 インストールに問題はありませんでした。 ftpからisoイメージをダウンロードし、ディスクに切り取って起動しました。 インストールプロセスが開始されます(スクリーンショットなしで申し訳ありません)。



しばらく待ってから、システムのインストールを開始するウィンドウが表示されます。 [インストール]ボタンをクリックし、目的のキーボードレイアウト、エンコードを選択するか、[いいえ]をクリックします。 次に、インストールする対象のコンポーネントを選択します。 ゲーム以外の選択されたものはすべて残し(サーバーにゲームが必要な理由、Eximも良いおもちゃです)、ポートを追加して続行しました。 ディスクのパーティション分割は、次のスキームに従って手動で行われました。



# Device Mountpoint FStype Size /dev/mfid0p2 / ufs 20G /dev/mfid0p3 /var ufs 50G /dev/mfid0p4 /home ufs 328G /dev/mfid0p5 none swap 4G
      
      







/ homeにはすべてのmaildir'yが含まれます。



マークした後、システムのインストールを待ち、rootのパスワードを入力します。 次に、ネットワーク、ユーザー、および再起動を構成します(インストールの詳細な説明は必要ありません。これらはすべてインターネットで確認できます)。



インストール後、それぞれ設定、sudo、perlなどのインストール



1.2。 Eximをインストールする

Eximのインストールについて詳しく説明します。

まず、タスクと必要な条件を決定します。



1)メールボックスの形式はmaildirです。

2)SMTP認証。

3)SPF、DKIMのサポート(将来、まだねじれていません);

4)見積りのサポート(これまではappendfileでのみ、その後dovecot quotaプラグインでのみ);

5)MySQLサポート。

6)SSLサポート。



MySQL 5.1をインストールすることから始めましょう。

 echo "DEFAULT_MYSQL_VER=51" >> /etc/make.conf cd /usr/ports/databases/mysql51-server make install clean #   Mysql mysql_install_db #   echo 'mysql_enable="YES"' >> /etc/rc.conf echo 'mysql_db_dir="/var/db/mysql"' >> /etc/rc.conf /usr/local/etc/rc.d/mysql start
      
      





すべてが順調に進んだ場合、マッスルが起動し、rootパスワードを設定するためだけに残ります

 mysqladmin -u root password my_password
      
      





eximのユーザーを作成する

 pw useradd exim -s /sbin/nologin -b /var/mail/mqueue -g mail
      
      





データベースを作成します。

 mysqladmin -u root -p create database exim_db
      
      





DB構造:

 DROP TABLE IF EXISTS `accounts`; CREATE TABLE `accounts` ( `login` varchar(128) COLLATE utf8_bin NOT NULL DEFAULT '', `password` varchar(128) COLLATE utf8_bin NOT NULL DEFAULT '', `uid` int(11) NOT NULL DEFAULT '1002', `gid` int(11) NOT NULL DEFAULT '6', `domain` varchar(128) COLLATE utf8_bin NOT NULL DEFAULT 'domain.ru', `quota` varchar(16) COLLATE utf8_bin NOT NULL DEFAULT '250M', `status` int(11) NOT NULL DEFAULT '1', PRIMARY KEY (`login`,`domain`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin; DROP TABLE IF EXISTS `aliases`; CREATE TABLE `aliases` ( `address` varchar(128) COLLATE utf8_bin DEFAULT NULL, `goto` varchar(128) COLLATE utf8_bin DEFAULT NULL, `domain` varchar(128) COLLATE utf8_bin DEFAULT 'domain.ru' ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin; DROP TABLE IF EXISTS `domains`; CREATE TABLE `domains` ( `domain` varchar(128) COLLATE utf8_bin NOT NULL DEFAULT '', `status` int(11) NOT NULL DEFAULT '1', PRIMARY KEY (`domain`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
      
      





uidフィールドとgidフィールドは、システム上のEximユーザーのUIDとGIDです。 私にとっては、UID = 1002およびGID = 6でした。 便宜上、デフォルトでこれらの値を使用してテーブルフィールドを設定します。

Eximデータベースユーザーを追加

 mysql -u root -p Password: *** mysql> grant all privileges on exim_newdb.* to exim@localhost identified by 'exim_password'; mysql> \q
      
      





SSL接続用の証明書を作成します。

 mkdir -p /etc/ssl/certs cd /etc/ssl/certs openssl req -x509 -newkey rsa:1024 -keyout favmail.pem -out favmail.pem -days 9999 -nodes
      
      





たくさんの質問に答えると、証明書の準備ができました。

Eximをインストールするための準備手順が完了しました。これで、インストールと構成を開始できます。

Eximをインストールします。

 cd /usr/ports/mail/exim make install clean
      
      





興味のあるオプションを選択し、不要なオプションを削除します。 サポートmaildir、spf、dkim、mysqlを選択しました。 インストールが完了するのを待っています。 Eximには多数の依存関係が組み込まれていますが、それほど時間はかかりません。

sendmailをオフにする

 echo 'sendmail_enable="NONE"' >> /etc/rc.conf /etc/rc.d/sendmail stop
      
      





/etc/mail/mailer.confを編集します

 cat /etc/mail/mailer.conf # $FreeBSD: release/9.0.0/etc/mail/mailer.conf 93858 2002-04-05 04:25:14Z gshapiro $ # # Execute the "real" sendmail program, named /usr/libexec/sendmail/sendmail # sendmail /usr/local/sbin/exim send-mail /usr/local/sbin/exim mailq /usr/local/sbin/exim -bp newaliases /usr/local/sbin/exim -bi hoststat /usr/local/sbin/exim purgestat /usr/local/sbin/exim
      
      







インストール後、構成の編集に進みます。 3つの異なるマニュアルの構成を構成しました。ソースは次のとおりです。



起こったことは次のとおりです。

 cat /usr/local/etc/exim/configure primary_hostname = domain.ru hide mysql_servers = localhost/exim_db/exim/exim_password domainlist local_domains = ${lookup mysql{select domain from domains where domain='${domain}'}} domainlist relay_to_domains = ${lookup mysql{select domain from domains where domain='${domain}'}} hostlist relay_from_hosts = localhost : 127.0.0.1 acl_smtp_rcpt = acl_check_rcpt acl_smtp_data = acl_check_data tls_certificate = /etc/ssl/certs/favmail.pem tls_privatekey = /etc/ssl/certs/favmail.pem daemon_smtp_ports = 25 : 465 tls_on_connect_ports = 465 qualify_domain = domain.ru allow_domain_literals = false exim_user = exim exim_group = mail never_users = root host_lookup = * rfc1413_hosts = * rfc1413_query_timeout = 5s ignore_bounce_errors_after = 2h timeout_frozen_after = 7d return_size_limit = 10K split_spool_directory = true syslog_timestamp = no begin acl acl_check_rcpt: acl_check_rcpt: accept hosts = : deny domains = +local_domains local_parts = ^[.] : ^.*[@%!/|] deny domains = !+local_domains local_parts = ^[./|] : ^.*[@%!] : ^.*/\\.\\./ accept senders=${lookup mysql{SELECT senders FROM whitelist \ WHERE senders='${quote_mysql:$sender_address}'}} deny message = HELO/EHLO required by SMTP RFC condition = ${if eq{$sender_helo_name}{}{yes}{no}} deny message = Go Away! You are spammer. condition = ${if match{$sender_host_name} \ {bezeqint\\.net|net\\.il|dialup|dsl|pool|peer|dhcp} \ {yes}{no}} deny message = rejected because $sender_host_address \ is in a black list at $dnslist_domain\n$dnslist_text hosts = !+relay_from_hosts !authenticated = * log_message = found in $dnslist_domain dnslists = bl.spamcop.net : \ cbl.abuseat.org : \ dnsbl.njabl.org : \ pbl.spamhaus.org warn set acl_m0 = 25s warn hosts = +relay_from_hosts set acl_m0 = 0s warn authenticated = * set acl_m0 = 0s warn logwrite = Delay $acl_m0 for $sender_host_name \ [$sender_host_address] with HELO=$sender_helo_name. Mail \ from $sender_address to $local_part@$domain. delay = $acl_m0 drop message = Rejected - Sender Verify Failed log_message = Rejected - Sender Verify Failed hosts = * !verify = sender/no_details/callout=2m,defer_ok !condition = ${if eq{$sender_verify_failure}{}} accept domains = +local_domains endpass message = unknown user verify = recipient accept domains = +relay_to_domains endpass message = unrouteable address verify = recipient accept hosts = +relay_from_hosts accept authenticated = * deny message = relay not permitted acl_check_data: warn message = X-Spam-Score: $spam_score ($spam_bar) hosts = !+relay_from_hosts spam = nobody:true warn message = X-Spam-Report: $spam_report hosts = !+relay_from_hosts spam = nobody:true warn message = Subject: [***SPAM***] $h_Subject: hosts = !+relay_from_hosts spam = nobody deny message = This message scored $spam_score spam points. spam = nobody:true hosts = !+relay_from_hosts condition = ${if >{$spam_score_int}{120}{1}{0}} deny message = Blacklisted file extension detected ($mime_filename) condition = ${if match \ {${lc:$mime_filename}} \ {\N(\.exe|\.pif|\.bat|\.scr|\.lnk|\.com|\.vbs|\.cpl)$\N} \ {1}{0}} accept begin routers dnslookup: driver = dnslookup domains = ! +local_domains transport = remote_smtp ignore_target_hosts = 0.0.0.0 : 127.0.0.0/8 no_more system_aliases: driver = redirect allow_fail allow_defer data = ${lookup mysql{select goto from aliases where address='${quote_mysql:$local_part}' and domain='${quote_mysql:$domain}'}} user = exim group = mail file_transport = address_file pipe_transport = address_pipe userforward: driver = redirect check_local_user no_verify no_expn check_ancestor file_transport = address_file pipe_transport = address_pipe reply_transport = address_reply data = ${lookup mysql{select goto from aliases where address='${quote_mysql:$local_part}' and domain='${quote_mysql:$domain}'}} localuser: driver = accept domains = ${lookup mysql{select domain from domains where domain='${domain}'}} local_parts = ${lookup mysql{select login from accounts where login='${local_part}' and domain='${domain}'}} transport = local_delivery cannot_route_message = Unknown user begin transports remote_smtp: driver = smtp local_delivery: driver = appendfile maildir_format maildir_tag = ,S=$message_size directory = /home/mail/$domain/$local_part create_directory delivery_date_add envelope_to_add return_path_add group = mail mode = 0660 no_mode_fail_narrower address_pipe: driver = pipe return_output address_file: driver = appendfile delivery_date_add envelope_to_add return_path_add address_reply: driver = autoreply begin retry * * F,2h,15m; G,16h,1h,1.5; F,4d,6h begin rewrite begin authenticators auth_plain: driver = plaintext server_set_id = $2 server_prompts = : public_name = PLAIN server_condition = ${lookup mysql{select login from accounts where login='${quote_mysql:${local_part:$2}}' and password='${quote_mysql:$3}'}{yes}{no}} auth_login: driver = plaintext public_name = LOGIN server_set_id = $1 server_prompts = Username:: : Password:: server_condition = ${lookup mysql{select login from accounts where login='${quote_mysql:${local_part:$1}}' and password='${quote_mysql:$2}'}{yes}{no}} auth_cram_md5: driver = cram_md5 public_name = CRAM-MD5 server_secret = ${lookup mysql{select password from accounts where login='${quote_mysql:${local_part:$1}}'}{$value}fail} server_set_id = $1
      
      





構成を確認します。

 exim -bV Exim version 4.77 #0 (FreeBSD 9.0) built 04-Jul-2012 19:16:56 Copyright (c) University of Cambridge, 1995 - 2007 Probably Berkeley DB version 1.8x (native mode) Support for: crypteq iconv() use_setclassresources PAM Perl Expand_dlfunc OpenSSL Content_Scanning DKIM Experimental_SPF Lookups (built-in): lsearch wildlsearch nwildlsearch iplsearch cdb dbm dbmnz dnsdb dsearch mysql nis nis0 passwd Authenticators: cram_md5 dovecot plaintext spa Routers: accept dnslookup ipliteral manualroute queryprogram redirect Transports: appendfile/maildir autoreply lmtp pipe smtp Fixed never_users: 0 Size of off_t: 8 Configuration file is /usr/local/etc/exim/configure
      
      





OK、エラーは見つかりませんでした。 Eximのログローテーションを行います。

 crontab -u exim -e @daily /usr/local/exim/exicyclog
      
      





ローカルユーザーの認識を確認します。

 exim -bt admin admin@domain.ru router = localuser, transport = local_delivery
      
      





そして非ローカル

 exim -bt user@www.com user@www.com router = dnslookup, transport = remote_smtp host ASPMX.L.GOOGLE.com [173.194.71.27] MX=10 host ALT2.ASPMX.L.GOOGLE.com [209.85.225.26] MX=20 host ALT1.ASPMX.L.GOOGLE.com [173.194.77.26] MX=20 host ASPMX4.GOOGLEMAIL.com [173.194.78.27] MX=30 host ASPMX5.GOOGLEMAIL.com [74.125.130.27] MX=30 host ASPMX3.GOOGLEMAIL.com [74.125.127.27] MX=30 host ASPMX2.GOOGLEMAIL.com [173.194.69.27] MX=30
      
      





素晴らしい、あなたは走ることができます

 echo 'exim_enable="YES"' >> /etc/rc.conf /usr/local/etc/rc.d/exim start
      
      





Exim承認を確認します。 これを行う方法については、 ここで詳しく説明します

この時点で、Eximの構成を終了できます。

1.3。 Dovecotをインストールする

ポートからもdovecotを入れます

 cd /usr/ports/mail/dovecot make install clean
      
      





カスタマイズ可能(上記のリンクでも構成されます)

 cat /usr/local/etc/dovecot.conf base_dir=/var/run/dovecot/ protocols=imap imaps pop3 pop3s ssl=yes ssl_cert_file=/etc/ssl/certs/favmail.pem ssl_key_file=/etc/ssl/certs/favmail.pem protocol imap { listen=*:143 ssl_listen=*:993 } protocol pop3 { listen=*:110 ssl_listen=*:995 } disable_plaintext_auth=no shutdown_clients=yes log_timestamp="%b %d %H:%M:%S " syslog_facility=mail login_dir=/var/run/dovecot/login login_chroot=yes login_user=dovecot login_process_size=64 login_process_per_connection=yes login_processes_count=3 login_max_processes_count=3 login_greeting=Dovecot ready login_log_format_elements=user=<%u> method=%m rip=%r lip=%l %c login_log_format=%$: %s first_valid_uid=1002 first_valid_gid=6 mail_access_groups=mail mail_debug=yes verbose_proctitle = yes mail_location=maildir:/home/mail/%d/%n protocol imap { imap_client_workarounds=delay-newmail outlook-idle netscape-eoh tb-extra-mailbox-sep } protocol pop3 { pop3_uidl_format=%08Xu%08Xv pop3_client_workarounds=outlook-no-nuls oe-ns-eoh } protocol lda { postmaster_address=admin@domain.ru auth_socket_path=/var/run/dovecot/auth-master } auth default { default_realm=domain.ru mechanisms=plain socket listen { master { path=/var/run/dovecot/auth-master mode=0600 user=exim } } passdb sql { args=/usr/local/etc/dovecot-sql.conf } userdb sql { args=/usr/local/etc/dovecot-sql.conf } user=root verbose=yes } plugin { } ####################################### cat /usr/local/etc/dovecot-sql.conf driver=mysql connect=host=127.0.0.1 dbname=exim_db user=exim password=exim_password! default_pass_scheme=PLAIN password_query=select password from accounts where login='%n' and domain='%d' user_query=select uid, gid from accounts where login='%n' and domain='%d'
      
      





デーモンを実行します。

 echo 'dovecot_enable="YES"' >> /etc/rc.conf /usr/local/etc/rc.d/dovecot start
      
      





POP(S)、IMAP(S)telnet'om、または任意のクライアントをチェックします。 すべてが問題なければ、Dovecotのセットアップを完了できます。



1.4。 SpamAssassinをインストールし、Eximを構成します

SpamAssassinは2つの方法でインストールできます。



1)perl -MCPAN -eシェル。

2)ポートから。



ポートから出ました。 SpamAssassinは真珠モジュールであり、それをインストールするには、同じ真珠モジュールからの依存関係の束が必要です。 それらをインストールします。

 cd /usr/ports/security/p5-Digest-MD5 make install clean cd /usr/ports/www/p5-HTML-Parser make install clean cd /usr/ports/dns/p5-Net-DNS make install clean cd /usr/ports/japanese/p5-Mail-SpamAssassin make install clean
      
      





インストール中に、特定のモジュールの機能に関連する膨大な質問があります。

インストール後、SpamAssassinを構成します。 ここに私のlocal.cfがあります。これは私が数年間使用しています。

 cat /usr/local/etc/mail/spamassassin/local.cf trusted_networks 192.168.2/24 required_score 5.0 report_safe 0 rewrite_header subject [***SPAM***] use_bayes 1 bayes_path /usr/local/etc/mail/spamassassin/bayes/ bayes_file_mode 0666 bayes_min_spam_num 1 bayes_min_ham_num 1 bayes_learn_to_journal 1 skip_rbl_checks 0 bayes_auto_learn 0 ok_languages ru en ok_locales ru_en score BAYES_00 0.0001 0.0001 -6.0 -6.0 score BAYES_05 0.0001 0.0001 -3.0 -3.0 score BAYES_20 0.0001 0.0001 -1.0 -1.0 score BAYES_50 0.0001 0.0001 1.6 1.6 score BAYES_60 0.0001 0.0001 2.0 2.0 score BAYES_80 0.0001 0.0001 4.0 4.0 score BAYES_95 0.0001 0.0001 6.5 6.5 score BAYES_99 0.0001 0.0001 10.0 10.0 score RDNS_NONE 0.0001 0.0001 3.0 3.0 score SUBJ_FULL_OF_8BITS 0.00 score HTML_COMMENT_8BITS 0.01 score HEADER_8BITS 0.00 score TO_NO_USER 0.01 score FORGED_MUA_OUTLOOK 0.5 score X_AUTH_WARNING 0.01 score SUBJ_HAS_UNIQ_ID 9.99 score HTTP_USERNAME_USED 9.99 score FORGED_YAHOO_RCVD 9.99 score FORGED_JUNO_RCVD 16 score UNWANTED_LANGUAGE_BODY 1.02 score MLM 5.55 score RCVD_NUMERIC_HELO 4.95
      
      





古いサーバーからMDaemonに転送しました。 SpamDは、不名誉にトリミングされたSpamAssassinです。

次に、exim configの行をacl行に追加します

 spamd_address = 127.0.0.1 783
      
      





ACLでは、acl_check_dataルール

 acl_check_data: #deny message = Virus found ($malware_name) #malware = * warn message = X-Spam-Score: $spam_score ($spam_bar) hosts = !+relay_from_hosts spam = nobody:true warn message = X-Spam-Report: $spam_report hosts = !+relay_from_hosts spam = nobody:true warn message = Subject: [***SPAM***] $h_Subject: hosts = !+relay_from_hosts spam = nobody deny message = This message scored $spam_score spam points. spam = nobody:true hosts = !+relay_from_hosts condition = ${if >{$spam_score_int}{120}{1}{0}} accept
      
      





spamdを実行してEximを再起動します

 echo 'spamd_enable="YES"' >> /etc/rc.conf /usr/local/etc/rc.d/sa-spamd start /usr/local/etc/rc.d/exim restart
      
      





できた これで新しいメールサーバーができました。ユーザーの移行に対処できます



2. MDaemonからEximへのユーザーの移行

2.1。 アカウントとエイリアス



Mdaemonは、すべてのユーザーアカウントをDATファイルに保存します。DATファイルはappディレクトリにあります。 実際、これは通常のテキストファイルであり、直接解析できますが、同じMDaemonはレコードをCSVファイルにエクスポートできます。 そのため、メニューコマンドを使用してすべてのアカウントをエクスポートします:アカウント->エクスポート->アカウントをカンマで区切ってテキストファイルにエクスポートします(はい、メニューの非常に長い名前です。 Accounts.csvファイルはappディレクトリに作成されるため、必要です。

アカウントがあり、現在はエイリアスです。 ここでは、datファイルを取得する必要があります。 彼はAlias.datと呼ばれます。 これをコピーして編集し、エイリアスのみが残り、すべてのコメントが炉内にあるようにします。

これらのファイルを解析してEximデータベースにアカウントを追加するために、真珠に小さなスクリプトを重ねました。その内容は次のとおりです。

 use strict; use Digest::MD5 qw(md5_hex); use DBI; my $dsn='DBI:mysql:exim_db:192.168.2.7'; my $db_user='exim'; my $db_pass='exim_password!'; my $dbh=DBI->connect($dsn, $db_user, $db_pass) or die "Cann\'t connect to DB\n"; my $acc_file="c:\\Accounts.csv"; my $alias_file="c:\\Alias.dat"; open(ACFILE, $acc_file); open(ALIASFILE, $alias_file); my @line=<ACFILE>; my @alias=<ALIASFILE>; my @arr; my @arr1; my $login; my $password; my $mquota; my $mdir; my $sq sub sql_query { my ($query)=@_; #print $query."\n"; my $sth=$dbh->prepare($query); $sth->execute; $sth->finish; } print "Adding user accounts\n"; foreach my $s(@line) { @arr=split(/,/, $s); if ($arr[0] =~ m/Email/g) { next; } $login=$arr[0]; $password=$arr[5]; $login =~ s/\"//g; $login =~ s/\@domain.ru//; if($arr[17]>0) { $mquota=$arr[17]/1000; } else { $mquota=0; } $sql=qq(INSERT INTO accounts(login, password, quota) VALUES("$login", $password, $mquota)); sql_query($sql); print $login." added OK\n"; } print "\nAdding aliases\n"; foreach my $s(@alias) { @arr1=split(/ /, $s); $arr1[2] =~ s/\n//; $arr1[0] =~ s/\@domain.ru//; $arr1[2] =~ s/\@domain.ru//; my $goto=$arr1[2]; my $address=$arr1[0]; #print $goto."\n"; $sql=qq(insert into aliases(address, goto) values('$address', '$goto')); sql_query($sql); print "Alias ".$address." => ".$goto." added OK\n"; }
      
      





まあ、それはほとんどそれです。 ユーザーメールをドラッグします。



2.2。 メールボックスの同期

ユーザーボックスを同期するために、私はimapsyncユーティリティを使用しました。これは、ENT部門で移行のトピックを取り上げたときに通知されました。

ポートからimapsyncを配置します

 cd /usr/ports/mail/imapsync make install clean
      
      





次に、スクリプトをいくつか作成しましたが、1人でスクリプトを作成することもできます。 最初のスクリプトはimapsyncのcsvファイルを生成し、2番目のスクリプトはそれを実行します。 ここにその内容があります

 # Creating CSV file for imapsync # #!//usr/bin/perl use strict; use DBI; my $dsn="DBI:mysql:exim_db:localhost"; my $db_user="exim"; my $db_password="exim_password"; my $dbh=DBI->connect($dsn, $db_user, $db_password) or die "Cannt connect to DB"; my $f_csv="imap_users.csv"; open(CSV, ">".$f_csv); my $sql="select login, password from accounts"; my $result=$dbh->prepare($sql); $result->execute; while ((my $login, my $password)=$result->fetchrow_array) { print CSV $login.";".$password.";".$login.";".$password."\n"; } print "File $f_csv is created\n"; close(CSV); $result->finish; #------------------------------------------------------------------- # imapsync #!/usr/bin/perl my $f_csv="imap_users.csv"; my $src="192.168.2.3"; my $dst="127.0.0.1"; open(CSV, $f_csv); while(<CSV>) { chomp; my ($u1, $p1, $u2, $p2)=split(";"); #print $p1."\n"; print "Sync user $u1\n"; my $r_sync=system("imapsync --debug --host1 $src --user1 $u1 --password1 $p1 --host2 $dst --user2 $u2 --password2 $p2"); } close(CSV);
      
      





後者を起動してから、200GBがすべて古いサーバーから新しいサーバーに移行するまで、長く、長い時間待機します。



3.まとめ

数時間後、この記事を終えたばかりで、同期が完了しました。 さまざまなクライアントでいくつかのメールボックスをチェックしました。 変更は認められず、すべてがそのままであり、そのままでした。 すべての文字が配置されています。 唯一の欠点は、POP3を使用する場合、すべての文字が未読になると思われますが、重要ではありません。

この記事が誰かを助けることを願っています。 質問がある場合は、コメントで質問してください。



ご清聴ありがとうございました。



All Articles