| IMAPSYNC(1) | User Contributed Perl Documentation | IMAPSYNC(1) |
نام (NAME)
imapsync - ابزار همگامسازی یکطرفه و بدون تکرار میان دو حساب کاربری IMAP
نسخه (VERSION)
این مستندات مربوط به Imapsync $Revision: 2.314 $ است.
نحوه استفاده (USAGE)
برای همگامسازی حساب کاربری مبدأ IMAP "test1" بر روی سرور "test1.lamiral.info" با گذرواژه "secret1" به حساب کاربری مقصد IMAP "test2" بر روی سرور "test2.lamiral.info" با گذرواژه "secret2" دستور زیر را اجرا کنید: imapsync \ - -ser1 test1 -assword1 secret1 \ - -ser2 test2 -assword2 secret2
توضیحات (DESCRIPTION)
گاهی اوقات نیاز داریم صندوقهای پستی (mailboxes) را از یک سرور IMAP به سرور دیگر منتقل کنیم.
دستور imapsync ابزاری است که امکان انتقال افزایشی (incremental) و بازگشتی (recursive) را از یک صندوق پستی به صندوق دیگر فراهم میکند. اگر جمله قبلی را متوجه نشدید، کاملاً طبیعی است؛ این یک اصطلاح تخصصی رایانهای است.
تمام پوشهها به صورت بازگشتی منتقل میشوند؛ بدین معنا که کل سلسلهمراتب پوشهها شامل تمام زیرپوشهها، تمام پیامهای درون آنها و تمام پرچمهای پیامها (\Seen، \Answered، \Flagged و غیره) همگامسازی خواهند شد.
ابزار imapsync با عدم انتقال پیامی که از قبل در سمت مقصد وجود دارد، حجم دادههای منتقلشده را کاهش میدهد. پیامهایی که در سمت مقصد هستند اما در سمت مبدأ وجود ندارند، دستنخورده باقی میمانند. به طور پیشفرض هیچ حذفی انجام نمیشود. برای همگامسازی دقیق و حذف آنها، گزینه -elete2 را ببینید.
چگونه imapsync تشخیص میدهد که یک پیام از قبل در هر دو طرف وجود دارد؟ از روی سرآیندهای (headers) خاص یکسان، و انتقال فقط یک بار انجام میشود. به طور پیشفرض، سرآیندهای شناسایی خطوط "Message-Id:" و "Received:" هستند. این انتخاب را میتوان با گزینه -seheader تغییر داد. در بیشتر موارد، مشکل پیامهای تکراری با استفاده از -seheader "Message-Id" حل میشود.
تمامی پرچمها حفظ میشوند؛ پیامهای خواندهنشده خواندهنشده میمانند، پیامهای خواندهشده خواندهشده میمانند و پیامهای حذفشده حذفشده باقی میمانند.
پرچمها همچنین در هر بار اجرا مجدداً همگامسازی میشوند، مگر اینکه از گزینه -0resyncflags استفاده شود.
نکتهای درباره حذف پیامها: در پروتکل IMAP، یک پیام حذفشده بلافاصله نابود نمیشود؛ بلکه با پرچم \Deleted علامتگذاری میشود و قابلیت بازیابی دارد. نابودی و حذف واقعی پیامها با دستورات IMAP به نام EXPUNGE یا UIDEXPUNGE رخ میدهد.
شما میتوانید فرایند انتقال را در هر زمان متوقف کرده و بعداً آن را دوباره اجرا کنید. ابزار imapsync بر اساس طراحی خود به خوبی با اتصالات ضعیف و قطعیها سازگار است. در ترمینال، فشردن دو بار کلیدهای Ctrl-c در عرض دو ثانیه برنامه را لغو میکند. فشردن Ctrl-c فقط برای یک بار باعث میشود imapsync مجدداً به هر دو سرور IMAP متصل شود.
چگونه متوجه شویم همگامسازی تمام شده و به درستی انجام گرفته است؟ هنگامی که imapsync خودبهخود به پایان میرسد، با خطوطی مشابه خطوط زیر این موضوع را اعلام میکند:
Exiting with return value 0 (EX_OK: successful termination) 0/50 nb_errors/max_errors PID 20332 Removing pidfile /home/gilles/tmp/imapsync.pid Log file is LOG_imapsync/2023_08_21_11_51_27_651_test1_test2.txt ( to change it, use -r use -0log to turn off logging )
اگر این خطوط را مشاهده نکردید، بدان معناست که یا فرایند همگامسازی همچنان در حال اجراست (یا احتمالاً برای مدتی نامحدود معلق مانده است)، یا اینکه بدون هیچ پیامی متوقف شده است (مثلاً بر اثر دستور قوی kill -9 در لینوکس).
اگر این خطوط پایانی را دیدید، بدین معناست که فرایند همگامسازی به طور صحیح خاتمه یافته است. با این حال ممکن است با خطاهایی مواجه شده باشد.
یک همگامسازی موفق با خطوطی بالای خطوط پایانی اعلام میشود، به ویژه این سه خط:
The sync looks good, all 1745 identified messages in host1 are on host2. There is no unidentified message on host1. Detected 0 errors
ابزار imapsync مجموع اندازه هر دو حساب کاربری را در ابتدای همگامسازی و همچنین در انتهای آن اعلام میکند. گاهی اوقات حتی با یک همگامسازی دقیق، این اندازههای کل با یکدیگر تفاوت دارند و گاهی این اختلاف بسیار زیاد است. این تفاوت معیار مناسبی برای نتیجهگیری مبنی بر اشتباه انجام شدن همگامسازی نیست.
چرا؟ زیرا اندازههای پیامی که سرورهای IMAP اعلام میکنند همیشه دقیق نیستند؛ آنها همیشه با اندازه واقعی پیامهای منتقلشده توسط imapsync یکسان نیستند. ابزار imapsync از اندازههای اعلامشده توسط سرورهای IMAP برای محاسبه اندازه کل استفاده میکند و این مقادیر میتوانند متفاوت باشند. در نسخههای اولیه، imapsync از اندازه پیامها به عنوان یکی از معیارهای شناسایی پیامها استفاده میکرد؛ یعنی اندازه متفاوت نشاندهنده پیام متفاوت بود. اما این یک اشتباه بود، چرا که بسته به سرورهای IMAP، یک پیام یکسان گاهی در دو طرف اندازههای متفاوتی داشت.
توضیح دیگر برای اختلاف بزرگ در اندازه کل این است که Gmail اندازه پیامهای تکراری در میان چند پوشه را دو بار محاسبه نمیکند، در حالی که imapsync این کار را انجام میدهد.
یک سناریوی کلاسیک، همگامسازی صندوق پستی B از روی صندوق پستی A است که در آن میخواهید یک کپی دقیق از A در B نگهداری شود. دقیق به این معنی است که تمام پیامهای موجود در A در B خواهند بود و چیزی بیش از آن وجود نخواهد داشت.
برای یک همگامسازی دقیق، از گزینه -elete2 استفاده کنید. گزینه -elete2 پیامهای موجود در پوشه B در host2 را که در پوشه A در host1 وجود ندارند حذف میکند. اگر همچنین نیاز دارید پوشههای host2 را که در host1 نیستند حذف کنید، از -elete2folders استفاده کنید. همچنین گزینههای -elete2foldersonly و -elete2foldersbutnot را برای تعیین استثناها در پوشههای حذفی ببینید. پوشه INBOX هرگز حذف نخواهد شد؛ این پوشه در پروتکل IMAP اجباری است، بنابراین imapsync حتی تلاشی برای حذف آن نمیکند.
یک سناریوی متفاوت، حذف پیامها از صندوق پستی مبدأ پس از انتقال موفقیتآمیز است. این قابلیت هنگام مهاجرت صندوقهای پستی مفید است، زیرا پیامها فقط در یک سمت باقی میمانند. حساب کاربری مبدأ فقط پیامهایی را خواهد داشت که هنوز به مقصد منتقل نشدهاند؛ یعنی پیامهایی که بعد از همگامسازی دریافت شدهاند یا انتقال آنها با شکست مواجه شده است.
در این حالت، از گزینه -elete1 استفاده کنید. گزینه -elete1 همچنین گزینه -\xpunge1 را به همراه دارد؛ بنابراین تمامی پیامهایی که در host1 به عنوان حذفشده علامتگذاری شدهاند پاکسازی خواهند شد. در پروتکل IMAP، حذف یک پیام بلافاصله آن را نابود نمیکند، بلکه آن را با پرچم \Deleted علامتگذاری میکند و اجازه بازیابی میدهد. پاکسازی (Expunge) یک پوشه، تمامی پیامهای علامتگذاریشده به عنوان \Deleted در آن پوشه را به طور قطعی حذف میکند.
شما همچنین میتوانید تصمیم بگیرید که پوشههای خالی را پس از انتقال تمام پیامهای درون آنها حذف کنید. گزینه -elete1emptyfolders را برای اعمال این رفتار اضافه کنید.
ابزار imapsync برای حفظ همگامسازی دو حساب کاربری فعال IMAP در شرایطی که کاربر به صورت مستقل در هر دو طرف فعالیت میکند، مناسب نیست. برای همگامسازی دوطرفه از ابزارهایی مانند offlineimap (نوشته John Goerzen) یا mbsync (نوشته Michael R. Elkins) استفاده کنید.
گزینهها (OPTIONS)
usage: imapsync [options]
گزینههای استاندارد شامل شش مقدار تشکیلدهنده اطلاعات کاربری (credentials) هستند. سه مقدار در هر طرف برای ورود به سرورهای IMAP مورد نیاز است. این شش مقدار عبارتند از نام میزبان، نام کاربری و گذرواژه، برای هر دو سمت مبدأ و مقصد.
در ادامه قراردادهای مورد استفاده در توضیحات گزینهها آمده است:
str به معنی یک رشته متنی (string) است
int به معنی یک عدد صحیح (integer) است
flo به معنی یک عدد اعشاری (float) است
reg به معنی یک عبارت منظم (regular expression) است
cmd به معنی یک دستور (command) است
-ry : ابزار imapsync هیچ تغییری در عمل اعمال نمیکند؛ فقط
آنچه را که بدون -ry انجام میشد چاپ میکند.
اطلاعات کاربری (OPTIONS/credentials)
-
میتواند نام میزبان یا نشانی IP باشد.
-ort1
int : درگاه اتصال به host1.
اختیاری است زیرا درگاه پیشفرض همان درگاه شناختهشده
imap/143 یا imaps/993 است.
اگر میخواهید اتصال SSL/TLS روی host1 داشته باشید،
-l1 را اضافه کنید.
-ser1 str : کاربر برای ورود به host1.
-assword1
str : گذرواژه user1.
-
-ort2
int : درگاه اتصال به host2.
اختیاری است زیرا درگاه پیشفرض همان درگاه شناختهشده
imap/143 یا imaps/993 است.
اگر میخواهید اتصال SSL/TLS روی host2 داشته باشید،
-l2 را اضافه کنید.
-ser2 str : کاربر برای ورود به host2.
-assword2
str : گذرواژه user2.
-owpasswords : گذرواژهها را در خروجی به جای "MASKED" نمایش میدهد.
برای راهاندازی مجدد با خواندن خط فرمان در گزارش
یا برای اشکالزدایی گذرواژهها مفید است.
این کار اصلاً یک اقدام امن محسوب نمیشود!
-assfile1
str : فایل گذرواژه برای user1. باید در خط اول حاوی
گذرواژه باشد. این گزینه از نمایش گذرواژه در خط فرمان
(مانند کاری که -assword1
انجام میدهد) جلوگیری میکند.
-assfile2
str : فایل گذرواژه برای user2.
همچنین
میتوانید
گذرواژهها
را در
متغیرهای
محیطی IMAPSYNC_PASSWORD1 و
IMAPSYNC_PASSWORD2 قرار
دهید. اگر
گذرواژه user1
را از طریق -assword1
یا -assfile1
یا $IMAPSYNC_PASSWORD1
مشخص
نکنید، imapsync از
شما
میخواهد
که گذرواژه
را در
ترمینال
وارد کنید.
همین موضوع
برای
گذرواژه user2
نیز صادق
است.
رمزنگاری (OPTIONS/encryption)
-0ssl1 : از اتصال IMAP روی SSL/TLS برای host1 استفاده نکن.
-l1 : از اتصال IMAP روی SSL/TLS برای host1 استفاده کن.
این همان imaps است. درگاه پیشفرض 993 است.
در صورت امکان، به طور پیشفرض استفاده میشود.
-0ssl2 : از اتصال IMAP روی SSL/TLS برای host2 استفاده نکن.
-l2 : از اتصال IMAP روی SSL/TLS برای host2 استفاده کن.
مشابه -l1 اما برای host2.
-0tls1 : برای اتصال SSL/TLS با "STARTTLS" روی host1 تلاش نکن.
-ls1 : از رمزنگاری SSL/TLS از طریق "STARTTLS" روی host1 استفاده کن.
درگاه پیشفرض 143 است.
به طور پیشفرض پس از ناموفق بودن بررسی imaps استفاده میشود.
-0tls2 : از اتصال SSL/TLS با "STARTTLS" روی host2 استفاده نکن.
-ls2 : از رمزنگاری SSL/TLS از طریق STARTTLS روی host2 استفاده کن.
مشابه -ls1 اما برای host2.
-ebugssl int : حالت اشکالزدایی SSL/TLS از 0 تا 4.
-largs1 str : ارسال هرگونه پارامتر SSL/TLS برای اتصال host1.
مثال:
-largs1 SSL_verify_mode=1 -largs1 SSL_version=TLSv1_3
مشاهده گزینهها در متد new() ماژول IO::Socket::SSL:
http://search.cpan.org/perldoc?IO::Socket::SSL#Description_Of_Methods
-largs2 str : ارسال هرگونه پارامتر SSL/TLS برای اتصال host2.
مشابه -largs1 اما برای host2.
احراز هویت (OPTIONS/authentication)
-uthmech1 str : سازوکار احراز هویت برای host1:
مانند PLAIN، LOGIN، CRAM-MD5 و غیره (با حروف بزرگ).
-uthmech2 str : سازوکار احراز هویت برای host2 (مشابه -uthmech1).
-uthuser1 str : کاربر برای احراز هویت در host1 (کاربر مدیر).
از ترکیب -uthmech1 SOMETHING با -uthuser1 خودداری کنید.
-uthuser2 str : کاربر برای احراز هویت در host2 (کاربر مدیر).
-roxyauth1
: استفاده از proxyauth در host1. نیازمند -uthuser1 است.
توسط سرورهای Sun/iPlanet/Netscape برای استفاده از کاربر
مدیر الزامی است.
-roxyauth2
: استفاده از proxyauth در host2. نیازمند -uthuser2 است.
-uthmd51 : استفاده از احراز هویت MD5 برای host1.
-uthmd52 : استفاده از احراز هویت MD5 برای host2.
-omain1 str : دامنه در host1 (احراز هویت NTLM).
-omain2 str : دامنه در host2 (احراز هویت NTLM).
-hccesstoken1 str : توکن دسترسی برای احراز هویت با OAUTH2 در host1.
با مقدار -ser1 ترکیب شده تا رشته احراز هویت
XOAUTH2 را بسازد. به جای توکن دسترسی، میتوان فایلی
که خط اول آن حاوی توکن است را مشخص کرد. مزیت فایل این است
که در صورت تغییر توکن، هنگام اتصال مجدد بازخوانی میشود.
-hccesstoken2 str : مشابه -hccesstoken1 اما برای host2.
-
-
-outh.
میتواند دارای آرگومانهایی مانند "cmd arg1 arg2 ..." باشد.
-
پوشهها (OPTIONS/folders)
-lder str : همگامسازی این پوشه.
-lder str : و این پوشه، و غیره.
-lderrec str : همگامسازی این پوشه و تمام زیرپوشههای آن.
-lderrec str : و این یکی، و غیره.
-lderfirst str : این پوشه را ابتدا همگامسازی کن. مثال: -lderfirst "INBOX"
-lderfirst str : سپس این یکی، و غیره.
-lderlast str : این پوشه را در آخر همگامسازی کن. -lderlast "[Gmail]/All Mail"
-lderlast str : سپس این یکی، و غیره.
-0mixfolders : ادغام نکردن پوشهها هنگامی که host1 به حروف کوچک و بزرگ
حساس است اما host2 حساس نیست (مانند Exchange). تنها
اولین پوشه مشابه همگامسازی میشود. مثال: با پوشههای
"Sent"، "SENT" و "sent" در host1، تنها "Sent" در host2
همگامسازی میشود.
-ipemptyfolders : پوشههای خالی host1 در host2 ایجاد نمیشوند.
-include reg : همگامسازی پوشههایی که با این عبارت منظم تطابق دارند.
-include reg : یا این یکی، و غیره.
اگر هر دو گزینه -include و -\xclude استفاده شوند،
ابتدا include اعمال میشود.
-\xclude reg : نادیده گرفتن پوشههای منطبق بر این عبارت منظم.
برای چند پوشه: -\xclude 'fold1|fold2|f3' پوشههای
fold1 و fold2 و f3 را نادیده میگیرد.
-\xclude reg : یا این یکی، و غیره.
-utomap : نگاشت خودکار پوشههای معروفی چون "Sent"، "Junk"،
"Drafts"، "All"، "Archive"، "Flagged".
-f2 str1=str2 : اجبار به همگامسازی پوشه str1 به str2.
گزینه -f2 اولویت بالاتری نسبت به -utomap و -egextrans2 دارد.
از چند گزینه -f2 برای چند پوشه استفاده کنید.
این یک نگاشت یکبهیک است و str1 و str2 باید مسیرهای کامل باشند.
برای نگاشتهای عمومیتر از -egextrans2 استفاده کنید.
-bfolder2 str : همگامسازی کل سلسلهمراتب پوشههای host1 در زیر پوشهای
از host2 به نام str.
این کار را داخلی با افزودن سه گزینه -egextrans2 انجام میدهد.
برای مشاهده جزئیات -ebug را اضافه کنید.
-bfolder1 str : همگامسازی سلسلهمراتب پوشههای host1 که زیر پوشه str قرار دارد
به ریشه سلسلهمراتب host2.
نقطه مقابل -bfolder2 در حالت معکوس است.
سناریوی پشتیبانگیری/بازیابی:
استفاده از -bfolder2 str برای پشتیبان در پوشه str در host2.
سپس استفاده از -bfolder1 str برای بازیابی از پوشه str
پس از معکوس کردن مقادیر host1/host2 و user1/user2.
-bscribed : انتقال پوشههای اشتراکگرفتهشده (subscribed).
-bscribe : مشترک شدن در پوشههای منتقلشده روی host2 که در host1
مشترک بودند. به طور پیشفرض فعال است.
-bscribeall : مشترک شدن در پوشههای منتقلشده روی host2 حتی اگر در
host1 مشترک نبودند.
-refix1
str : حذف پیشوند str از تمام پوشههای مقصد، معمولاً "INBOX."
یا "INBOX/" یا یک رشته خالی "". اگر سرور host1 فاقد
قابلیت NAMESPACE باشد، imapsync پیشوند را حدس میزند.
بنابراین بیشتر اوقات نیازی به استفاده از این گزینه نیست.
-refix2
str : افزودن پیشوند به تمام پوشههای host2 (مشابه -refix1).
-p1 str : جداکننده host1. بیشتر اوقات نیازی به استفاده ندارد.
ابزار imapsync جداکننده را از خود سرور با NAMESPACE میگیرد،
یا آن را از فهرست پوشهها حدس میزند (با شمارش / . \\ \).
-p2 str : جداکننده host2 (مشابه -p1).
-egextrans2 reg : اعمال عبارت منظم به هر پوشه مقصد.
-egextrans2 reg : و این یکی، و غیره.
هنگام استفاده ابتدا با گزینههای ایمن -ry -justfolders آزمایش کنید.
سپس -ry را حذف کرده و در ادامه -justfolders را حذف کنید.
این تبدیل پس از پیشوند و جداکننده خودکار اعمال میشود.
برای مثالها نشانی زیر را ببینید:
https://imapsync.lamiral.info/FAQ.d/FAQ.Folders_Mapping.txt
اندازه پوشهها (OPTIONS/folders sizes)
-0foldersizes : عدم محاسبه اندازه هر پوشه در ابتدای همگامسازی.
رفتار پیشفرض آنها را محاسبه میکند.
-0foldersizesatend: عدم محاسبه اندازه هر پوشه در انتهای همگامسازی.
رفتار پیشفرض آنها را محاسبه میکند.
-justfoldersizes : خروج از برنامه پس از چاپ اندازههای اولیه پوشهها.
پوشه موقت (OPTIONS/tmp)
-mpdir str : محل ذخیره فایلها و زیردایرکتوریهای موقت.
اگر وجود نداشته باشد ایجاد میشود. پیشفرض HOME/tmp$ است.
در نسخههای قبل از 2.250 در یونیکس tmp/ بود، اما به دلایل امنیتی
تغییر یافت (مشاهده مسأله ۳۹۹ گیتهاب و CVE-2023-34204):
https://github.com/imapsync/imapsync/issues/399
https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2023-34204
-idfile
str : فایلی که شناسه فرایند (PID) برنامه در آن نوشته میشود.
میتواند به صورت مسیر کامل باشد.
نام پیشفرض imapsync.pid در پوشه tmpdir است.
-idfilelocking
: اگر pidfile از قبل وجود داشت متوقف شو. برای جلوگیری از
انتقالهای همزمان روی یک صندوق پستی مفید است.
ثبت گزارش (OPTIONS/log)
-0log : غیرفعال کردن ثبت گزارش در فایل (به طور پیشفرض در داکر). - - -
نام پیشفرض فایل گزارش برای نمونه به صورت زیر است:
LOG_imapsync/2019_12_22_23_57_59_532_user1_user2.txt
که در آن:
2019_12_22_23_57_59_532 تقریباً تاریخ شروع به فرمت زیر است: YYYY_MM_DD_HH_MM_SS_mmm به معنی: سال_ماه_روز_ساعت_دقیقه_ثانیه_میلیثانیه
و user1 و user2 مقادیر گزینههای -ser1 و -ser2 هستند.
پیامها (OPTIONS/messages)
-ipmess reg : نادیده گرفتن پیامهای منطبق بر عبارت منظم.
مثال: 'm/[\x80-\xff]/' برای جلوگیری از پیامهای ۸ بیتی.
گزینه -ipmess قبل از -egexmess اعمال میشود.
-ipmess reg : یا این یکی، و غیره.
-ipcrossduplicates : عدم کپی پیامهایی که قبلاً در پوشه دیگری کپی شدهاند.
مناسب برای انتقال از Gmail به سرویس دیگر وقتی سرویس دیگر Gmail نیست.
با -ail1 به طور خودکار فعال میشود مگر اینکه -0skipcrossduplicates داده شود.
-ebugcrossduplicates : چاپ پیامهایی (شناسههای UID) که با -ipcrossduplicates
نادیده گرفته شدهاند و اینکه در چه پوشههای دیگری هستند.
-ipemess
cmd : اعمال این دستور cmd بر روی محتوای هر پیام پیش از کپی.
-ipemess
cmd : و این یکی، و غیره.
با چند گزینه -ipemess،
خروجی استاندارد (STDOUT) هر دستور به
ورودی استاندارد (STDIN) دستور بعدی ارسال میشود.
مانند پایپ در یونیکس:
"cat message | cmd1 | cmd2 | cmd3"
-isarmreadreceipts : غیرفعال کردن رسیدهای خواندن پیام (برای حل مشکل Exchange در host2).
-egexmess reg : اعمال عبارت منظم به هر پیام پیش از انتقال.
مثال: 's/\000/ /g' برای جایگزینی نویسههای null با فاصله.
-egexmess reg : و این یکی، و غیره.
-runcmess int : کوتاه کردن پیامها هنگامی که اندازه آنها از مقدار int بایت
فراتر میرود. مناسب برای انتقال پیامهای خیلی بزرگ یا حذف پیوستها.
توجه داشته باشید که این کار پیامها را تا حدی نامعتبر میکند.
-0dry1 : دریافت پیامها از host1 توسط imapsync حتی زمانی که -ry فعال است.
ترکیب -ry -0dry1 برای اشکالزدایی گزینههای تبدیل مانند
-ipemess
یا -egexmess مفید است.
برچسبها (OPTIONS/labels)
سرویس Gmail برچسبها را به عنوان پوشه در IMAP نمایش میدهد. ابزار imapsync میتواند با همگامسازی X-GM-LABELS سرعت کار را افزایش دهد؛ این کار از انتقال مجدد پیامهایی که از قبل در پوشه دیگری روی host2 هستند جلوگیری میکند.
-nclabels : همگامسازی برچسبهای Gmail هنگام کپی پیام به host2.
به طور پیشفرض با -ail1 -ail2 فعال است مگر اینکه
-0synclabels اضافه شود.
-esynclabels : همگامسازی مجدد برچسبهای Gmail زمانی که پیام از قبل در host2 است.
به طور پیشفرض با -ail1 -ail2 فعال است مگر اینکه
-0resynclabels اضافه شود.
برای همگامسازی Gmail همچنین نشانی زیر را ببینید: https://imapsync.lamiral.info/FAQ.d/FAQ.Gmail.txt
پرچمها (OPTIONS/flags)
در صورت مواجهه با مشکلات پرچمها، این نشانی را ببینید:
https://imapsync.lamiral.info/FAQ.d/FAQ.Flags.txt
-egexflag reg : اعمال عبارت منظم به فهرست پرچمها.
مثال: 's/"Junk"//g' برای حذف پرچم "Junk".
-egexflag reg : سپس این یکی، و غیره.
-esyncflags : همگامسازی مجدد پرچمها برای پیامهای از قبل منتقلشده.
به طور پیشفرض فعال است.
-0resyncflags : عدم همگامسازی مجدد پرچمها برای پیامهای از قبل منتقلشده.
زمانی که کاربر کار با حساب host2 را آغاز کرده مفید است.
-lterbuggyflags : فیلتر کردن پرچمهای معیوب که باعث خطاهای
"BAD Invalid system flag" یا "NO APPEND Invalid flag list" میشوند.
حذفها (OPTIONS/deletions)
-elete1 : حذف پیامها روی سرور host1 پس از انتقال موفق.
این گزینه پیامها را با پرچم IMAP موسوم به \Deleted علامت میزند
و سپس با دستور EXPUNGE حذف میشوند. اگر پاکسازی بعد از هر پیام
سرعت را کاهش میدهد، از -0expungeaftereach برای افزایش سرعت استفاده
کنید تا پاکسازی فقط دو بار در هر پوشه انجام شود.
-\xpunge1 : پاکسازی (expunge) پیامها در host1 دقیقاً قبل از همگامسازی پوشه.
پاکسازی به ازای هر پوشه انجام میشود و هدف آن حذف قطعی پیامهای
علامتگذاریشده با \Deleted است.
در صورت تنظیم -elete1 نیز پاکسازی بعد از هر پیام انجام میشود.
-0expunge1 : پیامها در host1 پاکسازی نشوند.
-elete1emptyfolders : حذف پوشههای خالی در host1 به جز INBOX.
همراه با -elete1 بسیار کاربردی است زیرا آنچه در host1
باقی میماند تنها پیامهایی هستند که انتقالشان با شکست مواجه شده است.
-elete2 : حذف پیامهایی در حساب host2 که در حساب host1 وجود ندارند.
برای پشتیبانگیری یا پیشهمگامسازی مناسب است.
گزینه -elete2 به طور ضمنی -idexpunge2 را فعال میکند.
-elete2duplicates : حذف پیامهایی در host2 که در درون خود host2 تکراری هستند.
تنها بدون -seuid کار میکند چون تکرارها از سرآیند شناسایی میشوند.
توجه: این گزینه بسیار کمخطرتر از -elete2 است چون فقط موارد تکراری را حذف میکند.
-elete2folders : حذف پوشههایی در host2 که در host1 وجود ندارند.
فقط پوشههای انتخابشده بررسی میشوند (تمام پوشهها به طور پیشفرض،
مگر اینکه با -\xclude یا -include محدود شده باشند).
برای اطمینان، ابتدا با دستور زیر به صورت ایمن اجرا کنید:
-elete2folders -ry -justfolders -0foldersizes
-elete2foldersonly reg : فقط حذف پوشههای منطبق بر عبارت منظم reg.
مثال: -elete2foldersonly "/^Junk$|^INBOX.Junk$/"
این گزینه -elete2folders را فعال میکند.
-elete2foldersbutnot reg : عدم حذف پوشههای منطبق بر عبارت منظم rex.
مثال: -elete2foldersbutnot "/Tasks$|Contacts$|Foo$/"
این گزینه -elete2folders را فعال میکند.
-0expunge2 : پیامها در host2 پاکسازی نشوند.
-0uidexpunge2 : عدم uidexpunge پیامهایی در host2 که در host1 وجود ندارند.
تاریخها (OPTIONS/dates)
در صورت مواجهه با مشکلات مربوط به تاریخها نشانی زیر را ببینید:
https://imapsync.lamiral.info/FAQ.d/FAQ.Dates.txt
-ncinternaldates : تنظیم تاریخهای داخلی در host2 برابر با host1.
به طور پیشفرض فعال است. تاریخ داخلی زمانی است که
پیام وارد سرور میشود (معمولاً mtime یونیکس).
-idatefromheader : تنظیم تاریخهای داخلی در host2 برابر با تاریخ موجود
در سرآیند "Date:".
انتخاب پیام (OPTIONS/message selection)
-xsize int : نادیده گرفتن پیامهای بزرگتر (یا مساوی) با int بایت.
-nsize int : نادیده گرفتن پیامهای کوچکتر (یا مساوی) با int بایت.
-xage int : نادیده گرفتن پیامهای قدیمیتر از int روز.
آمار نهایی (نادیدهگرفتهشده) پیامهای قدیمیتر را نمیشمارد.
گزینه -nage را نیز ببینید.
-nage int : نادیده گرفتن پیامهای جدیدتر از int روز.
آمار نهایی پیامهای جدیدتر را نمیشمارد.
نحوه انتخاب (ناحیه + پیامهای انتخابشده هستند):
past|----xage+++++++++++++++>now
past|+++++++++++++++minage---->now
past|----xage+++++minage---->now (اشتراک)
past|++++minage-----xage++++>now (اجتماع)
-arch str : انتخاب تنها پیامهایی که توسط این دستور IMAP SEARCH بازگردانده میشوند.
در هر دو سمت مبدأ و مقصد اعمال میشود.
برای مشاهده تمام موارد قابل جستجو ببینید:
https://imapsync.lamiral.info/FAQ.d/FAQ.Messages_Selection.txt
-arch1 str : مشابه -arch اما فقط برای انتخاب پیامهای host1.
-arch2 str : مشابه -arch اما فقط برای انتخاب پیامهای host2.
بنابراین -arch CRIT معادل -arch1 CRIT -arch2 CRIT است.
-0abletosearch : استفاده از تاریخهای داخلی بازگرداندهشده توسط دستور FETCH
به جای سرآیند "Date:" برای گزینههای -nage و -xage.
تاریخ داخلی همان تاریخ ورود پیام به صندوق است.
این گزینه معادل -0abletosearch1 -0abletosearch2 است.
-0abletosearch1 : مشابه -0abletosearch اما فقط برای host1.
-0abletosearch2 : مشابه -0abletosearch اما فقط برای host2.
-xlinelength int : نادیده گرفتن پیامهایی با طول خط بیشتر از int بایت.
استاندارد RFC 2822 حداکثر ۱۰۰۰ بایت را تعیین میکند اما سرورها
و کلاینتها در دنیای واقعی فراتر میروند.
-seheader str : استفاده از این سرآیند برای مقایسه پیامها در دو طرف.
مثال: "Message-Id" یا "Received" یا "Date".
-seheader str : و این یکی، و غیره.
-ncduplicates : همگامسازی پیامهای تکراری (به طور پیشفرض غیرفعال).
-secache : استفاده از حافظه موقت (کش) برای سرعت بخشیدن به دفعات بعدی (پیشفرض غیرفعال).
-0usecache : عدم استفاده از حافظه موقت. هشدار: -seuid -0usecache در
اجراهای چندباره پیامهای تکراری ایجاد میکند.
-seuid : استفاده از UIDها به جای سرآیندها به عنوان معیار تشخیص پیامها.
گزینه -secache به طور ضمنی فعال میشود مگر اینکه -0usecache داده شود.
متفرقه (OPTIONS/miscellaneous)
-ncacls : همگامسازی فهرستهای کنترل دسترسی (ACLs).
فهرستهای ACL در IMAP استانداردسازی نشدهاند؛ دقت کنید زیرا یک
کد ACL در یک طرف ممکن است معنای متفاوتی در طرف دیگر داشته باشد.
-0syncacls : عدم همگامسازی ACLها (پیشفرض).
-ddheader : هنگامی که پیامی هیچ سرآیندی برای شناسایی ندارد، این گزینه
یک سرآیند "Message-Id" اضافه میکند، مانند "Message-Id: 12345@imapsync"،
که در آن ۱۲۳۴۵ شناسه UID پیام در پوشه host1 است.
برای همگامسازی پوشههای "Sent" یا "Draft" مفید است.
اشکالزدایی (OPTIONS/debugging)
-ebug : نمایش پیامهای اشکالزدایی.
-ebugfolders : نمایش پیامهای اشکالزدایی فقط برای بخش پوشهها.
-ebugcontent : نمایش محتوای پیامهای منتقلشده (خروجی بسیار حجیم).
-ebugflags : نمایش پیامهای اشکالزدایی برای پرچمها.
-ebugimap1 : نمایش پیامهای IMAP برای host1 (بسیار پرگو).
-ebugimap2 : نمایش پیامهای IMAP برای host2 (بسیار پرگو).
-ebugimap : نمایش پیامهای IMAP برای host1 و host2 (دو برابر پرگو).
-ebugmemory : نمایش میزان مصرف حافظه پس از هر کپی.
-\rrorsmax int : خروج از برنامه هنگام رسیدن به تعداد int خطا.
پیشفرض ۵۰ خطا برای خروج است.
-ests : اجرای آزمونهای محلی عدمبازگشت (non-regression tests).
کد وضعیت 0 به معنای درست بودن همه چیز است.
-estslive : اجرای آزمون زنده با سرور test1.lamiral.info.
برای بررسی موارد پایه مفید است و به اینترنت نیاز دارد.
-estslive6 : اجرای آزمون زنده با سرور tests1ipv6.lamiral.info.
برای بررسی اتصال IPv6 مفید است و به اینترنت نیاز دارد.
موارد خاص (OPTIONS/specific)
-ail1 : تنظیم - -ail2 : تنظیم - -ice1 : تنظیم - -ice2 : تنظیم - -\xchange1 : تنظیم گزینهها برای Exchange (ببینید FAQ.Exchange.txt). -\xchange2 : تنظیم گزینهها برای Exchange (ببینید FAQ.Exchange.txt). -omino1 : تنظیم گزینهها برای Domino (ببینید FAQ.Domino.txt). -omino2 : تنظیم گزینهها برای Domino (ببینید FAQ.Domino.txt).
رفتار و عملکرد (OPTIONS/behavior)
-imeout1 flo : مهلت زمانی اتصال (timeout) به ثانیه برای host1.
پیشفرض ۱۲۰ است و مقدار ۰ یعنی بدون محدودیت زمانی.
-imeout2 flo : مهلت زمانی اتصال به ثانیه برای host2.
پیشفرض ۱۲۰ است و مقدار ۰ یعنی بدون محدودیت زمانی.
هشدار: در محیط CGI ممکن است سرور وب ارتباط را قطع کند
و باعث توقف imapsync و اتصالات IMAP شود.
مستندات INSTALL.OnlineUI.txt را بررسی کرده و واژه "Timeout"
را برای نحوه مدیریت این مشکل جستجو کنید.
-epalive1 : https://metacpan.org/pod/Mail::IMAPClient#Keepalive
برخی فایروالها و تجهیزات شبکه اگر اتصال بیکار بماند آن را زودتر
قطع میکنند. این گزینه SO_KEEPALIVE را روی سوکت host1 فعال میکند.
به طور پیشفرض از نسخه 2.169 فعال است.
از -0keepalive1 برای غیرفعالسازی استفاده کنید.
-epalive2 : مشابه -epalive1 اما برای host2.
از -0keepalive2 برای غیرفعالسازی استفاده کنید.
-xmessagespersecond flo : محدود کردن میانگین تعداد پیامهای منتقلشده در هر ثانیه.
-xbytespersecond int : محدود کردن میانگین نرخ انتقال داده در هر ثانیه.
-xbytesafter int : شروع محدودیت -xbytespersecond فقط پس از انتقال
مقدار int داده.
-xsleep flo : خوابیدن برنامه حداکثر تا int ثانیه.
به طور پیشفرض فعال است، حداکثر ۲ ثانیه، مانند -xsleep 2.
-bort : پایان دادن به اجرای قبلی که همچنان فعال است.
از فایل pidfile برای تشخیص فرایند استفاده میکند.
-\xitwhenover int : توقف همگامسازی و خروج زمانی که مجموع بایتهای منتقلشده
به int برسد.
-
-0releasecheck : عدم بررسی وجود نسخه جدید imapsync.
-eleasecheck : بررسی وجود نسخه جدید imapsync.
یک درخواست HTTP GET ارسال میکند به:
http://imapsync.lamiral.info/prj/imapsync/VERSION
-\mailreport1 : قرار دادن گزارش نهایی ایمیل در INBOX در host1.
-\mailreport2 : قرار دادن گزارش نهایی ایمیل در INBOX در host2.
-0emailreport1 : عدم قرار دادن گزارش نهایی در INBOX در host1.
-0emailreport2 : عدم قرار دادن گزارش نهایی در INBOX در host2.
-0id : عدم ارسال/دریافت دستور IMAP به نام "ID" به سرورهای IMAP.
-justconnect : فقط اتصال به هر دو سرور و نمایش اطلاعات مفید.
تنها به گزینههای -
منسوخ شده است چون اجرای "imapsync -st" به تنهایی
این حالت را به همراه دارد.
-justlogin : فقط ورود به هر دو سرور host1 و host2 با اطلاعات کاربری و سپس خروج.
-justfolders : فقط انجام کارهای مربوط به پوشهها (نادیده گرفتن پیامها).
-
مثال: همگامسازی حساب کاربری IMAP به نام "test1" روی "test1.lamiral.info"
به حساب کاربری IMAP به نام "test2" روی "test2.lamiral.info"
با گذرواژه "secret1" برای حساب test1
و گذرواژه "secret2" برای حساب test2:
imapsync \
- -ser1 test1 -assword1
secret1 \
- -ser2 test2 -assword2
secret2
امنیت (SECURITY)
میتوانید
برای ذکر
گذرواژه به
جای -assword1
از -assfile1
استفاده
کنید که
بسیار
امنتر است.
با گزینه -assword1
در لینوکس،
هر کاربری
روی سیستم
میتواند
با دستور 'ps auxwwww'
گذرواژه را
ببیند.
استفاده از
متغیر
محیطی
(مانند IMAPSYNC_PASSWORD1)
نیز به دلیل
دستور 'ps auxwwwwe'
خطرناک است.
بنابراین،
ذخیره
گذرواژه در
یک فایل با
دسترسی
محافظتشده
(600 یا rw-------)
بهترین
راهکار
است.
ابزار imapsync در صورت امکان به طور پیشفرض رمزنگاری SSL/TLS را فعال میکند.
رفتار دقیق پشت این عبارت «در صورت امکان» چیست؟
اگر درگاه شناختهشده imaps (درگاه 993) بر روی سرورهای IMAP باز باشد، imapsync سازوکار SSL/TLS را فعال میکند. اگر درگاه imaps بسته باشد، imapsync یک اتصال معمولی (متن خام و رمزنگارینشده) روی درگاه 143 باز میکند. اما سپس در فهرست قابلیتهای (CAPABILITY) سرورها به دنبال پشتیبانی از STARTTLS میگردد. اگر STARTTLS پشتیبانی شود، imapsync با دستور IMAP موسوم به STARTTLS به سمت رمزنگاری SSL/TLS میرود.
اگر تشخیصهای خودکار SSL/TLS ناموفق باشند، imapsync از ارتباط متن خام (clear-text) استفاده میکند. ارتباط متن خام در برابر شنود در شبکه به خصوص برای گذرواژهها محافظت ایجاد نمیکند.
اگر میخواهید SSL/TLS را اجباری کنید، کافی است از -l1 و -l2 یا -ls1 و -ls2 استفاده کنید. با هیچیک از این گزینهها، imapsync به سمت ارتباط متن خام نخواهد رفت.
همچنین سند FAQ.Security.txt را در دایرکتوری FAQ.d/ یا در نشانی زیر ببینید: https://imapsync.lamiral.info/FAQ.d/FAQ.Security.txt
وضعیت خروج (EXIT STATUS)
ابزار imapsync در صورت انجام موفقیتآمیز تمام کارها با وضعیت 0 خارج میشود. در غیر این صورت با یک وضعیت غیرصفر خاتمه مییابد. این رفتار کلاسیک یونیکس است. در زیر فهرست کدهای خروج (عددی صحیح بین 0 تا 255) آمده است. در پوستههای سازگار با Bourne Shell این کد پس از فراخوانی imapsync در متغیر "$?" در دسترس است.
نامها بیانگر مفهوم آنها هستند:
EX_OK => 0 ; #/* پایان موفقیتآمیز */ EX_USAGE => 64 ; #/* خطای نحوه استفاده از خط فرمان */ EX_NOINPUT => 66 ; #/* عدم امکان باز کردن ورودی */ EX_UNAVAILABLE => 69 ; #/* سرویس در دسترس نیست */ EX_SOFTWARE => 70 ; #/* خطای داخلی نرمافزار */ EXIT_CATCH_ALL => 1 ; # هرگونه خطای دیگر EXIT_BY_SIGNAL => 6 ; # سیگنال دریافتی (128+n) EXIT_BY_FILE => 7 ; EXIT_PID_FILE_ERROR => 8 ; EXIT_CONNECTION_FAILURE => 10 ; EXIT_TLS_FAILURE => 12 ; EXIT_AUTHENTICATION_FAILURE => 16 ; EXIT_SUBFOLDER1_NO_EXISTS => 21 ; EXIT_WITH_ERRORS => 111 ; EXIT_WITH_ERRORS_MAX => 112 ; EXIT_OVERQUOTA => 113 ; EXIT_ERR_APPEND => 114 ; EXIT_ERR_FETCH => 115 ; EXIT_ERR_CREATE => 116 ; EXIT_ERR_SELECT => 117 ; EXIT_TRANSFER_EXCEEDED => 118 ; EXIT_ERR_APPEND_VIRUS => 119 ; EXIT_ERR_FLAGS => 120 ; EXIT_ERR_SEARCH => 121 ; EXIT_TESTS_FAILED => 254 ; # مشابه API آزمونهای Test::More EXIT_CONNECTION_FAILURE_HOST1 => 101 ; EXIT_CONNECTION_FAILURE_HOST2 => 102 ; EXIT_AUTHENTICATION_FAILURE_USER1 => 161 ; EXIT_AUTHENTICATION_FAILURE_USER2 => 162 ;
مجوز و حق نشر (LICENSE AND COPYRIGHT)
ابزار imapsync یک نرمافزار آزاد، متنباز و عمومی است (هرچند همیشه رایگان نیست) که تحت پوشش مجوز NOLIMIT Public License (که اکنون NLPL نامیده میشود) قرار دارد. فایل LICENSE موجود در بسته توزیع را ببینید، یا فقط جمله ساده زیر را بخوانید چرا که متن کامل مجوز همین است:
"No limits to do anything with this work and this license."
در صورتی که به اندازه کافی طولانی نیست، دوباره تکرار میکنم:
"No limits to do anything with this work and this license."
مشاهده نشانی: https://imapsync.lamiral.info/LICENSE
نویسنده (AUTHOR)
Gilles LAMIRAL <gilles@lamiral.info>
بازخوردهای مثبت همیشه مورد استقبال هستند. بازخوردهای منفی نیز بسیار مورد استقبال قرار میگیرند.
Gilles LAMIRAL امرار معاش خود را از طریق نوشتن، نصب، پیکربندی و گاهی آموزش نرمافزارهای آزاد و متنباز به دست میآورد. ابزار imapsync قبلاً همیشه رایگان بود، اما اکنون تنها اغلب اوقات رایگان است؛ چرا که توسط نویسندهاش به فروش میرسد تا راهکاری برای پشتیبانی و نگهداری نرمافزارهای آزاد در طول چند دهه باشد.
ایرادات و محدودیتها (BUGS AND LIMITATIONS)
مشاهده نشانی: https://imapsync.lamiral.info/FAQ.d/FAQ.Reporting_Bugs.txt
سرورهای IMAP پشتیبانیشده (IMAP SERVERS supported)
مشاهده نشانی: https://imapsync.lamiral.info/S/imapservers.shtml
مهاجرتهای بزرگ (HUGE MIGRATION)
اگر صندوقهای پستی زیادی برای مهاجرت دارید، به یک برنامه کوچک پوسته (shell script) فکر کنید. فایلی به نام file.txt (برای مثال) حاوی کاربران و گذرواژهها بسازید. جداکننده استفادهشده در این مثال ';' است.
فایل file.txt شامل موارد زیر است:
user001_1;password001_1;user001_2;password001_2 user002_1;password002_1;user002_2;password002_2 user003_1;password003_1;user003_2;password003_2 user004_1;password004_1;user004_2;password004_2 user005_1;password005_1;user005_2;password005_2 ...
در یونیکس، برنامه شل میتواند به این شکل باشد:
{ while IFS=';' read u1 p1 u2 p2; do
imapsync -rg -ser1 "$u1" -assword1
"$p1" \
-rg -ser2 "$u2" -assword2
"$p2" ...
done ; } < file.txt
در ویندوز، اسکریپت بچ (batch) میتواند به این شکل باشد:
FOR /F "tokens=1,2,3,4 delims=; eol=#" %%G IN (file.txt) DO imapsync ^ -rg -ser1 %%G -assword1 %%H ^ -rg -ser2 %%I -assword2 %%J ...
عبارت ... میتواند با هیچ یا هر گزینهای از imapsync جایگزین شود. به دنیای برنامهنویسی شل و بچ خوش آمدید!
اسکریپتهای از پیش آمادهشده را در نشانی زیر خواهید یافت: https://imapsync.lamiral.info/examples
نصب (INSTALL)
ابزار Imapsync تحت هر سیستم یونیکسی به همراه Perl اجرا میشود. ابزار Imapsync تحت بیشتر نسخههای ویندوز (2000، XP، Vista، Seven، Eight، Ten، Eleven، و تمام نگارشهای سرور 2000، 2003، 2008 و R2، 2012 و R2، 2016) به عنوان یک نرمافزار باینری مستقل با نام imapsync.exe اجرا میشود، که معمولاً از یک فایل بچ اجرا میگردد تا از تایپ همیشگی گزینهها جلوگیری شود. نشانی زیر را ببینید: https://imapsync.lamiral.info/README_Windows.txt ابزار Imapsync روی macOS (OS X) به صورت باینری مستقل به نام imapsync_bin_Darwin اجرا میشود: https://imapsync.lamiral.info/INSTALL.d/INSTALL.Darwin.txt خرید آخرین نسخه imapsync در نشانی: https://imapsync.lamiral.info پیوندی به یک فایل فشرده با نام imapsync-2.xxx.tgz دریافت خواهید کرد که 2.xxx شماره نسخه است. فایل tar را در مسیر دلخواه استخراج کنید (در یونیکس): tar xzvf imapsync-2.xxx.tgz وارد دایرکتوری imapsync-x.xx شوید و فایل INSTALL را بخوانید. همانطور که در نشانی https://imapsync.lamiral.info/#install ذکر شده، فایل INSTALL در نشانی https://imapsync.lamiral.info/INSTALL.d/INSTALL.ANY.txt نیز موجود است. این مستندات اکنون به چندین فایل برای هر سیستم تقسیم شده است: https://imapsync.lamiral.info/INSTALL.d
پیکربندی (CONFIGURATION)
فایل پیکربندی خاصی برای imapsync وجود ندارد؛ همه چیز از طریق پارامترهای خط فرمان و رفتار پیشفرض مشخص میشود.
توسعه و دستکاری (HACKING)
هر طور مایلید imapsync را تغییر دهید و دستکاری کنید، چرا که مجوز NOLIMIT اجازه این کار را میدهد.
نرمافزارهای مشابه (SIMILAR SOFTWARE)
مشاهده نشانی: https://imapsync.lamiral.info/S/external.shtml
تاریخچه (HISTORY)
من در ابتدا imapsync را در ژوئیه ۲۰۰۱ نوشتم زیرا شرکتی به نام BaSystemes به من پول پرداخت کرد تا یک سرور IMAP جدید را بدون از دست دادن صندوقهای پستی حجیم و قدیمی مستقر در یک سرور دوردست، که از طریق یک خط ارتباطی ISDN با پهنای باند کم و قطعیهای مکرر در دسترس بود، راهاندازی کنم.
من باید صحت انتقال تمام صندوقهای پستی، تمام پوشهها و تمام پیامها را تأیید میکردم، بدون اینکه پهنای باند هدر رود یا در همگامسازیهای مجدد پیام تکراری ایجاد شود. طراحی imapsync با الهام از دستور شگفتانگیز rsync انجام شد.
ابزار imapsync ابتدا به عنوان یک وصله (patch) برای اسکریپت copy_folder.pl آغاز شد. اسکریپت copy_folder.pl از کد منبع بسته پرل Mail-IMAPClient-2.1.3 (به طور دقیقتر در پوشه examples/ بسته Mail-IMAPClient) آمده بود.
از آن زمان تغییرات بسیار زیادی رخ داده است به طوری که شک دارم آیا حتی یک خط از copy_folder.pl اولیه در کد منبع imapsync باقی مانده باشد یا خیر.
| 2025-09-28 | perl v5.42.0 |