ورهايل ڪيريو ڪنيڪٽ سرورز جي وچ ۾ حصيداري فولڊر، رابطا، ڪئلينڊرن جي مڪمل هم وقت سازي

صبح جو سلام، حبر!

مقصد

منهنجي تنظيم Kerio Connect پليٽ فارم تي هڪ ميل سرور استعمال ڪري ٿي؛ ميل سرور مختلف شهرن ۾ نصب ٿيل آهن انهن جي استعمال ڪندڙن جي خدمت ڪرڻ لاءِ. شروعات ۾ ڪو به ورهايل ڍانچو نه هو، ڇاڪاڻ ته ڊومينز ٽئين سطح تي مختلف آهن، سائيٽ جي شهر کي ظاهر ڪن ٿا. سڀ ڪم ڪيو ۽ هرڪو خوش هو. هڪ سٺو ڏينهن، انتظام هڪ ڪم مقرر ڪيو، سڀني سائيٽن جي وچ ۾ سرگرمين جو هڪ عام ڪئلينڊر!

prehistory

شروعات ۾، خيال ڪيو ويو ته ڪيريو ورهايل ميل ڊومين کي وڌائڻ ۽ اهو سڀ ڪجهه پاڻ ڪندو. جلد ئي نه چيو ويو ته ڪيو ويو، هڪ ورهايل ڊومين ٺاهي وئي، پر اهو معاملو نه هو، سرور ڪئلينڊرن، فولڊرن، رابطن کي هم وقت سازي ڪرڻ لاء تيار هو - هڪ ئي سرور تي واقع ڊومينز جي وچ ۾، پر اهو بلڪل نه هو ڪيترن ئي وچ ۾ ڊيٽا کي هم وقت سازي ڪرڻ وارو. سرور

مون، يقينا، اهڙي پڪڙي جي توقع نه ڪئي هئي ۽ هڪ ڊگهي وقت تائين يقين نه ٿي سگهيو ته ڪارڪردگي جيڪا مون کي گهربل هئي غائب هئي. بعد ۾ مون کي ان حقيقت جو دستاويزي ثبوت مليو. مان ان ڳالهه تي ڏاڍو حيران ۽ مايوس ٿيس.

ڪم آساني سان هڪ مسئلي ۾ بدلجي ويو.

ڪهڙا اختيار هئا؟

  • مختلف سرورن تي ٻه ڪلائنٽ ٺاھيو جيڪي ضروري ڊيٽا مٽائي ڪجھ ٽئين پارٽي سافٽ ويئر سان. اهو ضروري هو ته هن ٽئين پارٽي سافٽ ويئر کي ڳولڻ لاء جيڪو هن ڪارڪردگي کي لاڳو ڪندو - مون کي اهڙي ريڪ پسند نه آهي، پر اهو لڳي ٿو ته اهو صرف تڪڙو حل هو.
  • سرور جي وچ ۾ ڊيٽا جي هم وقت سازي لاءِ پنهنجو اسڪرپٽ لکو. حقيقت اها آهي ته ڪيريو هر شئي کي هڪ الڳ فائل طور محفوظ ڪري ٿو، تنهنڪري فائلن سان ڪم ڪرڻ لاءِ هڪ اسڪرپٽ تيار ڪرڻ ضروري هو، پر ذريعن جي ڪافي تعداد کي نظر ۾ رکندي، اهو ڪم ڪجهه پيچيده لڳي رهيو هو، خاص طور تي ڇاڪاڻ ته ان لاءِ ڪيترن ئي ڪمن کي انجام ڏيڻ ضروري هو. ڊيٽا جي صحيحيت جي جانچ ڪري ٿو، ان صورت ۾ جيڪڏهن ڪو ماڻهو ساڳئي عرصي ۾ ڪم ٺاهي، وغيره وغيره.

اڳتي ڏسندي، مان چوندس ته جيتوڻيڪ ڪيريو هڪ اعتراض کي الڳ فائل طور محفوظ ڪري ٿو، اهو ايترو بيوقوف ناهي جيترو اهو پڇڻ ته فائل سسٽم ڪيئن ڪري رهيو آهي هر وقت توهان اعتراض تائين رسائي ڪريو.

گهڻو وقت سوچڻ ۾ گذاريو، ڪاغذ جي ٽڪرن جو هڪ مجموعو ٺاهي، منصوبن سان گڏ "دشمن جي علائقي تي قبضو ڪرڻ"، 6 وڳي مون ٻه صحيح فيصلا ڪيا:

  • پهريون فيصلو اهو آهي ته توهان پنهنجو ڪم ڪريو ۽ ٻاهران ڪجهه به نه ڳوليو.
  • ٻيو حل ننڊ ۾ وڃڻ آهي.

اڳ ۾ ئي صبح جو مان هڪ واحد ۽ سچي سوچ سان جاڳندو هوس، جيڪو ڪجهه اکرن تائين گهٽجي ويو هو - DFS

فيصلو

حل پاڻ هن طرح نظر آيو

  • سڀني سرورن کي آڻيو جيڪي OS ونڊوز تي هم وقت سازي ۾ حصو وٺندا. (ان جو حصو لينڪس تي هو. ميل ڊيٽا جي ٻئي او ايس ڏانهن منتقلي گهربل هئي)
  • ڊاريڪٽري جي جوڙجڪ جو اندازو لڳايو جيڪي هم وقت سازي ۾ حصو وٺندا - انهن کي هڪجهڙائي هجڻ گهرجي.
  • ھڪڙي ڊومين جي ھيٺان سڀني ميل سرورن کي ھڪڙي ڊي ايف ايس اسپيس سان بيان ڪريو.
  • مٿي بيان ڪيل ورهايل ڪيريو ڊومين ٺاهيو، ڇاڪاڻ ته منهنجي صورت ۾ ڊيٽا جي هم وقت سازي جي ضرورت آهي، نه رڳو سرور جي وچ ۾ پر ڊومين جي وچ ۾؛ ٻيو ڪيريو سرور طرفان آزاد طور تي سنڀالي سگهجي ٿو. (پهرين جي برعڪس)
  • DFS اسپيس تي هم وقت سازي ڊاريڪٽري سيٽ ڪريو.
  • اچو ته ڪنهن قسم جي ڪچري سان گڏ (آخرڪار، توهان بغير بغير رهي نٿا سگهو)

عمل

مثال ٻن ميل سرور تي (شايد وڌيڪ)

1. ڪيريو ورهايل ڊومين

ورهايل ڪيريو ڪنيڪٽ سرورز جي وچ ۾ حصيداري فولڊر، رابطا، ڪئلينڊرن جي مڪمل هم وقت سازي

ماسٽر هم وقت سازي ۾ حصو نٿو وٺي، پر اهو هڪ شرط نه آهي.

مان بيان نه ڪندس ته ڪيريو ورهايل ڊومين کي ڪيئن وڌايو، ان بابت ڪجھ به پيچيده ناهي، توهان پڙهي سگهو ٿا سرڪاري مينول

بالآخر، توهان کي انتظامي ڪنسول ۾ هيٺ ڏنل تصوير ڏسڻ گهرجي:

ورهايل ڪيريو ڪنيڪٽ سرورز جي وچ ۾ حصيداري فولڊر، رابطا، ڪئلينڊرن جي مڪمل هم وقت سازي

ورهايل ڪيريو ڪنيڪٽ سرورز جي وچ ۾ حصيداري فولڊر، رابطا، ڪئلينڊرن جي مڪمل هم وقت سازي

اڳيون مون کي حصيداري فولڊر ۾ دلچسپي هئي؛ ماسٽر سرور تي توھان ھيٺ ڏنل اختيارن کي بيان ڪري سگھو ٿا:

ورهايل ڪيريو ڪنيڪٽ سرورز جي وچ ۾ حصيداري فولڊر، رابطا، ڪئلينڊرن جي مڪمل هم وقت سازي

ورهايل ڪيريو ڪنيڪٽ سرورز جي وچ ۾ حصيداري فولڊر، رابطا، ڪئلينڊرن جي مڪمل هم وقت سازي

هر ڊومين لاءِ مخصوص - سرور ڊومينز جي وچ ۾ عوامي فولڊر کي هم وقت سازي نه ڪندو

سڀني ڊومينز لاء عام - سڀ سرور هر ڊومين ۾ موجود عوامي فولڊرن کي ڇڏي ڏيندا ۽ هر ميل سرور تي سڀني ڊومينز لاءِ نوان واحد فولڊر ٺاهيندا.

مهرباني ڪري ڏسو! جيتوڻيڪ هي اختيار سڀني سرورن تي ترتيب ڏيڻ واري پاليسي کي تبديل ڪري ٿو، اهو هر سرور کان الڳ الڳ هم وقت سازي ڪندو آهي (يعني، هڪ عام جڳهه کان سواء)

منتظم کي اڃا تائين صارفين جي وچ ۾ رسائي کي ورهائڻ جي صلاحيت هوندي.
منهنجي صورت ۾، اهي سڀ منهنجا آهن ۽ مون کي مڪمل هم وقت سازي جي ضرورت آهي (توهان جي صورت ۾، حل مختلف ٿي سگهي ٿو) هر سرور تي توهان کي ڊومينز جا هڪجهڙا سيٽ ٺاهڻ گهرجن جن کي هم وقت سازي ڪرڻ جي ضرورت آهي.

2. ڪيريو ڊيٽا ڊاريڪٽري

هاڻي توهان کي هڪجهڙائي وارين ڊائريڪٽريٽ ٺاهڻ جي ضرورت آهي جنهن کي هر هڪ سرور تي هم وقت سازي ڪرڻ جي ضرورت آهي. فولڊر، ڪئلينڊر، رابطا.

صلاح - انگريزيءَ ۾ ڊاريڪٽريون ٺاھيو، جيڪڏھن توھان انھن کي لاطيني ۾ ٺاھيو، ته ڊاريڪٽريءَ جو نالو ھوندو ڪجھ سمجھ ۾ نه ايندڙ انڪوڊنگ ۾، اھو گھٽ ۾ گھٽ تڪليف ڏيندڙ آھي.

هاڻي توهان کي هر سرور تي ميل فولڊر جا جسماني رستا ڳولڻ جي ضرورت آهي.

سڀني ڊومينز لاء عام ~DataMailmail#publicСинхронизируемый каталог#msgs
هر ڊومين لاءِ مخصوص ~DataMailmail**Domain**#publicСинхронизируемый каталог#msgs

مهرباني ڪري نوٽ ڪريو ته اسان سڄي ڊاريڪٽري کي هم وقت سازي نه ڪنداسين، پر صرف ڊيٽا سان گڏ ڪنٽينر #msgs - شيون پاڻ هتي محفوظ ڪيون ويون آهن، باقي سڀئي ڊيٽا هر سرور لاءِ الڳ هجڻ گهرجن.

3. ڊي ايف ايس

مان تفصيل سان بيان نه ڪندس ته ڊي ايف ايس کي ڪيئن ترتيب ڏيو، هن مسئلي تي ڪافي ڄاڻ آهي.

DFS ونڊوز سرور ۾ هڪ رول سروس آهي جيڪا مختلف سرورز تي موجود شيئر فولڊرز کي گڏ ڪرڻ جي صلاحيت مهيا ڪري ٿي.
MS DFS سند سان ڳنڍيو

DFS قائم ڪرڻ کان پهريان، توهان کي لازمي طور تي سڀني ميل سرورز کي روڪڻ گهرجي جيڪي ڊيٽا جي هم وقت سازي ۾ حصو وٺندا.

سيٽ اپ جي مڪمل ٿيڻ تي، توهان کي هر هڪ هم وقت سازي فولڊر لاء هيٺ ڏنل تصوير حاصل ڪرڻ گهرجي

ورهايل ڪيريو ڪنيڪٽ سرورز جي وچ ۾ حصيداري فولڊر، رابطا، ڪئلينڊرن جي مڪمل هم وقت سازي

قدرتي طور تي، اسان کي نقل ٿيل فولڊر شايع ڪرڻ جي ضرورت ناهي.

ورهايل ڪيريو ڪنيڪٽ سرورز جي وچ ۾ حصيداري فولڊر، رابطا، ڪئلينڊرن جي مڪمل هم وقت سازي

نقل ٿيڻ کان پوءِ (۽ اتي نقل ڪرڻ لاءِ ڪجھ به خاص نه آھي - فولڊر خالي آھن)، ميل سرور شروع ڪري سگھجن ٿا.

اڳيون، توهان ڊيٽا سان ميل سرور مان هڪ ڀريو ۽ چيڪ ڪريو ته ڊيٽا صحيح طور تي نقل ٿيل آهي.

4. ڪڇ

عکاسي جي وضاحت

جيئن توهان ڏسي سگهو ٿا ڊيٽا جي هم وقت سازي شروع ٿيڻ کان پوءِ (DFS)، جيڪڏهن توهان يا ته پهرين سرور تي ڪا شيءِ ٺاهي آهي، ته ٻئي سرور تي ڪجهه به نه ٿو ظاهر ٿئي، يا اهو ظاهر ٿئي ٿو پر ڪنهن نه ڪنهن طرح هميشه نه.

نااميد نه ٿيو؛ يقينا، اهو اتي جلدي يا دير سان ظاهر ٿيندو، پر بعد ۾ بهتر. ڇاڪاڻ ته اهو 6 - 12 ڪلاڪن ۾ تمام دير سان آهي.

ڳالهه اها آهي ته جيئن ئي توهان پهرين سرور تي ڪا شيءِ ٺاهي، ٻئي ۽ ايندڙ سرورن تي فائل ضرور ظاهر ٿي ويندي DFS سسٽم جي مهرباني، پر ان صورت ۾ ته هي ميل ڊاريڪٽري اڳ ۾ ئي ڪنهن پڙهيل هجي. ۽ ٻيهر درخواست ڪئي وئي آهي، سرور #msgs فولڊر کي ٻيهر نه پڙهي سگهندو پر ڊيٽا کي پنهنجي انڊيڪس مان ڪڍي ڇڏيندو، جيڪو شايد اسان جي حقيقت سان مطابقت نه رکي.

ڪيريو انڊيڪس کي ٻيهر پڙهڻ لاءِ هڪ ميکانيزم رکي ٿو، پر اهو تقريباً ڇهن ڪلاڪن ۾ ڪم ڪري سگهي ٿو، ۽ انهن 6 ڪلاڪن دوران ڪئلينڊر ۾ ڪم جي مطابقت ڪنهن حد تائين گم ٿي سگهي ٿي.
ھاڻي هم وقت سازي کي جانچڻ لاءِ، توھان فائل کي ڊليٽ ڪري سگھو ٿا لاڳاپيل مطابقت پذير ڊاريڪٽري index.fld ۾، ميل سرور تي فولڊر کي ٻيهر رسائي ڪرڻ کان پوءِ ۽ جيڪڏھن ھي فائل غائب آھي، ڪيريو ڊاريڪٽري ۽ ڊيٽا کي ٻيهر پڙھندو. ظاهر ٿيندو. اهو لڳي ٿو ته اهو ئي حل آهي، فائل کي حذف ڪريو جڏهن ڊيٽا تبديل ٿئي ٿي، پر اهو هر دفعي ڪم نه ڪندو آهي، پر صرف پهريون ڀيرو، پوء ڪيريو ڪنهن سبب لاء تمام دلچسپي وڃائي ٿو index.fld.
اهو پڻ پيغامن کي ٻاهر ڪڍڻ شروع ڪري ٿو جيڪي صارف جي سمجھ ۾ نه هوندا آهن - ڪنهن قسم جي انڊيڪس بابت ۽ اهو اڳ ۾ ئي اتي ڪجهه ڪري رهيو آهي.

ٻيو اختيار آهي، ڪا شيءِ ٺاهڻ لاءِ - نئين شئي ٺاهڻ جي وقت، سرور اوچتو محسوس ڪري ٿو ته فائيل جو نالو جنهن کي هو تفويض ڪرڻ چاهي ٿو، اهو اڳ ۾ ئي ورتو ويو آهي، پر اهو سنوبال ٿي ويو آهي ۽ اهو هڪ آخري اختيار آهي.

ڪيئن ٿيو

جيڪڏهن اسان هڪ ڀيرو ٻيهر ان تصوير ڏانهن ڌيان ڏينداسين جيڪا اسان کي اڳ ۾ ئي واقف آهي.

ورهايل ڪيريو ڪنيڪٽ سرورز جي وچ ۾ حصيداري فولڊر، رابطا، ڪئلينڊرن جي مڪمل هم وقت سازي

پر ٻئي جهاز تي، توهان هڪ تمام دلچسپ بٽڻ ڏسي سگهو ٿا جيڪو اسان کي هاڻي ضرورت آهي. Reindex فولڊر

۽ بيشڪ. جيڪڏهن اسان ميل سرور تي هن بٽڻ تي ڪلڪ ڪندا آهيون جنهن کي خبر ناهي ته ڪجهه اڳ ۾ ئي هم وقت سازي #msgs ۾ تبديل ٿي چڪو آهي، اسان هڪ مستحڪم، تيز نتيجو حاصل ڪنداسين. لڪايل سڀ ڪجهه پڌرو ٿي ويندو.

لاگ ۾ توهان ڏسي سگهو ٿا ته اهو عمل ڪيترو وقت وٺندو آهي؛ منهنجي صورت ۾ ڪيترن ئي هزار (15 هزار) رڪارڊ سان اهو لڳ ڀڳ 3-4 منٽ وٺندو آهي.

اسان کي صرف اهو ڪرڻو آهي ته اصل ۾ هن بٽڻ کي ڪيئن دٻايو وڃي جڏهن اسان کي ضرورت هجي.

اهو نڪتو ڪيريو پنهنجا آهن API

بيان
دستاويزي

فنڪشن جيڪو اسان جي ڪم کي انجام ڏئي ٿو هن طرح نظر اچي ٿو:
session = callMethod("Domains.checkPublicFoldersIntegrity",{}, token)

مٿين سڀني مان، اسان کي هڪ اسڪرپٽ لکڻ جي ضرورت آهي جيڪا دلچسپي جي فولڊر جي حالت مانيٽر ڪري ۽، جيڪڏهن ڪجهه تبديل ٿي وئي آهي، اسان کي گهربل فنڪشن انجام ڏيو.

مان اهو چوڻ چاهيان ٿو ته مون لکت جا ڪيترائي مختلف نسخا لکيا آهن جيڪي مختلف چيڪن کي انجام ڏين ٿا، ۽ هڪ تي آباد ٿيو جيڪو سڀني نتيجن کي فائلن جي تعداد جي بنياد تي ڪڍي ٿو.

اسڪرپٽ تي عملدرآمد

CMD اسڪرپٽ مثال ۽ وضاحت

ٻيهر index.bat

@echo off
set dir=%~dp0
%dir:~0,2%
CD "%~dp0"
md "%CD%LOG"
md "%CD%Setup"

ECHO -Start- >> "%CD%LOG%Computername%.log"
ECHO Start -> %Computername% %Date% %Time% >> "%CD%LOG%Computername%.log"

SetLocal EnableDelayedExpansion
for /f "UseBackQ Delims=" %%A IN ("%CD%Setup%Computername%.List") do (
  set /a c+=1
  set "m!c!=%%A"
)

set d=%c%
Echo Folder = %c%
ECHO Folder = %c% >> "%CD%LOG%Computername%.log"
ECHO.
ECHO. >> "%CD%LOG%Computername%.log"

:start
cls
if %c% LSS 1 exit
set /a id=1
set R=0

:Find
REM PF-Start
if "%id%" gtr "%c%" if %R% == 1 Goto Reindex 
if "%id%" gtr "%c%" timeout 60 && Goto start

For /F "tokens=1-3" %%a IN ('Dir "!m%id%!#msgs" /-C/S/A:-D') Do Set 2DirSize!id!=!DS!& Set DS=%%c
if "2DirSize!id!" == "" set 1DirSize!id!=!2DirSize%id%!

echo %id%
ECHO !m%id%!
echo Count        [ !1DirSize%id%! -- !2DirSize%id%! ]

if "!1DirSize%id%!" == "!2DirSize%id%!" ECHO Synk

REM DEL index.fld
if "!1DirSize%id%!" NEQ "!2DirSize%id%!" del /f /q !m%id%!index.fld && del /f /q !m%id%!indexlog.fld && del /f /q !m%id%!search.fld && set R=1 && ECHO RE-index Count && ECHO RE-index Count %Date% %Time% - Delete !m%id%! >> "%CD%LOG%Computername%.log"

set 1DirSize!id!=!2DirSize%id%!

ECHO.
ECHO.

set /a id+=1
goto Find

:Reindex
ECHO. >> "%CD%LOG%Computername%.log"
ECHO --- RE-INDEX - Start - %Date% %Time% --- >> "%CD%LOG%Computername%.log"
ECHO. >> ----------------------------------- >> "%CD%LOG%Computername%.log"
call PublicFolders.py
timeout 60
goto start

exit

اسڪرپٽ جي هڪ ڪاپي هر ميل سرور تي هلندي آهي (سروس طور استعمال ڪري سگهجي ٿو، ايڊم جي حقن جي ضرورت ناهي)

اسڪرپٽ فائل پڙهي ٿو Setup%Computername%.List

جتي %Computername% موجوده سرور جو نالو آهي (ڊائريڪٽري ۾ هڪ ئي وقت سڀني سرورن جون لسٽون شامل ٿي سگهن ٿيون.)

فائل %Computername%.List - ۾ هم وقت سازي ٿيل ڊائريڪٽرن جا مڪمل رستا شامل آهن، هر رستو هڪ نئين لڪير تي لکيل آهي، ۽ خالي لڪير تي مشتمل نه هجڻ گهرجي.

پهرين لانچ کان پوء، اسڪرپٽ انڊيڪسنگ جي طريقيڪار کي انجام ڏئي ٿو، قطع نظر ته اهو ضروري آهي يا نه، ۽ اسڪرپٽ پڻ هر هم وقت سازي ڊاريڪٽري ۾ فائلن جي تعداد جو هڪ انڊيڪس ٺاهي ٿو.

اسڪرپٽ جو مقصد مخصوص ڊاريڪٽري ۾ سڀني فائلن کي ڳڻڻ آهي.

هر ڊاريڪٽري جي ڳڻپ جي آخر ۾، جيڪڏهن گهٽ ۾ گهٽ هڪ ڊاريڪٽري ۾ فائلن جي موجوده قيمت پوئين هڪ سان نه ملندي، اسڪرپٽ هم وقت سازي ميل ڊاريڪٽري جي روٽ ڊاريڪٽري مان فائلن کي حذف ڪري ٿو: index.fld, indexlog.fld, search.fld ۽ شيئر ٿيل ميل فولڊر جي انڊيڪسنگ جي عمل کي شروع ڪري ٿو.

ڪم جي عمل جي باري ۾ معلومات LOG ڊاريڪٽري ۾ ڊمپ ڪئي وئي آهي.

اشاري جي عمل
انڊيڪسنگ جو عمل هيٺ اچي ٿو ڪيريو API فنڪشن کي عمل ڪرڻ لاءِ
سيشن = ڪال ميٿڊ ("Domains.checkPublicFoldersIntegrity"،{}، ٽوڪن)

هڪ مثال لاڳو ڪرڻ ۾ ڏنو ويو آهي - python
PublicFolders.py

import json
import urllib.request
import http.cookiejar
""" Cookie storage is necessary for session handling """
jar = http.cookiejar.CookieJar()
opener = urllib.request.build_opener(urllib.request.HTTPCookieProcessor(jar))
urllib.request.install_opener(opener)
""" Hostname or ip address of your Kerio Control instance with protocol, port and credentials """

server = "http://127.0.0.1:4040"
username = "user"
password = "password"

def callMethod(method, params, token = None):
    """
    Remotely calls given method with given params.
    :param: method string with fully qualified method name
    :param: params dict with parameters of remotely called method
    :param: token CSRF token is always required except login method. Use method "Session.login" to obtain this token.
    """
    data =  {"method": method ,"id":1, "jsonrpc":"2.0", "params": params}

    req = urllib.request.Request(url = server + '/admin/api/jsonrpc/')
    req.add_header('Content-Type', 'application/json')
    if (token is not None):
        req.add_header('X-Token', token)    

    httpResponse = urllib.request.urlopen(req, json.dumps(data).encode())

    if (httpResponse.status == 200):
        body = httpResponse.read().decode()
        return json.loads(body)

session = callMethod("Session.login", {"userName":username, "password":password, "application":{"vendor":"Kerio", "name":"Control Api-Local", "version":"Python"}})
token = session["result"]["token"]
print (session)

session = callMethod("Domains.checkPublicFoldersIntegrity",{"domainId": "test2.local"}, token)
print (session)

callMethod("Session.logout",{}, token)

http://127.0.0.1:4040 توھان ان کي ڇڏي سگھوٿا جيئن آھي، پر جيڪڏھن توھان کي HTTPS جي ضرورت آھي، پائٿن کي ڪيريو سرٽيفڪيٽ تي ڀروسو ڪرڻ گھرجي.

فائل ۾ پڻ توهان کي هڪ اڪائونٽ بيان ڪرڻ گهرجي حقن سان گڏ هن فنڪشن کي انجام ڏيڻ لاء (Adm - عوامي ميل فولڊر) ميل سرور جي.

مون کي اميد آهي ته منهنجو مضمون ڪيريو ڪنيڪٽ منتظمين لاءِ ڪارآمد ثابت ٿيندو.

جو ذريعو: www.habr.com

تبصرو شامل ڪريو