با استفاده از Indy یک برنامه برای email میخواهیم بسازیم. وقتی email جدیدی وجود داشته باشد برنامه مشخص میکند که از کجاست و موضوع آن چیست و نیز چه موقع فرستاده شده است. در ضمن اندازه هر پیغام را نشان میدهد در نتیجه اگر حجم زیاد باشد میتوانید بدون download نمودن آنرا از Server حذف نمایید.
Indy را میتوانید از سایت www.nevrona.com/Indy بگیرید. این برنامه Sniffer لیستی از پیغامهای موجود در POP3 Server را نشان میدهد. هر پیام نشانگر زمان فرستادن و اندازه میباشد.
هر دقیقه یکبار Sniffer از POP3 Server میپرسد که چه تعداد پیام منتظر هستند و اگر جواب بیش از آخرین دفعه باشد (یعنی اگر mail جدیدی آمده باشد) برنامه لیست را refresh میکند. هر زمان میتوانید بر روی پیام کلیک کرده و دکمه Delete this message at server را که در انتهای پنجره وجود دارد کلیک کنید. این عمل باعث حذف پیام بدون download کردن آن میشود. گاهی اوقات Outlook Express در هنگام download نمودن یک پیام Crash نموده و email پس از هر Crash بر روی Server باقی مانده و شما مانع از آنها شدهاید تا آنکه حذف شدند. اما قبل از اجرای این برنامه باید برخی از جزئیات را درباره emailaccount خود بدانید. POP3 را که بکار میبریم سه چیز نیاز دارد: آدرس POP3 server، Username و کلمهرمز آن account. وقتی Sniffer برای اولین بار شروع به کار میکند یک جعبه گفتگو برای وارد کردن جزئیات email باز میکند.
سپس این اطلاعات در Account.ini نوشته میشوند که البته در همان دایرکتوری خود برنامه وجود دارد. بنابراین هر زمان که برنامه شروع میشود دیگر نیازی به واردکردن اطلاعات نیست بلکه فقط باید کلمه Ok را بزنید. حال ببینیم که کد برنامه چگونه کار میکند. در هنگام اجرا ی برنامه FormCreate یک نمونه از فرم برای Account Details ایجاد کرده و آنرا برای بازیابی اطلاعات email از کاربر بکار میبرد. دیگر وقت را برای آنکه مشاهده نماییم این فرم چگونه در فایل INI مینویسد و یا از آن میخواند
void_fastcall TfrmMain::Timer1Timer(TObject Sender)
{
// Disallow nested calls to this routine
if (Lock) return; Lock++;
++NoStatusChange;
POP3->KeepAlive(); //keep the server interested…
–NoStatusChange;
if (TickCount++ % 6 != 0) return; // only do real check once per minute…
// Time to re-check emails status
try
{
// Get number of messages waiting
int MessageCount = POP3->CheckMessage();
if (MessageCount > LastMessageCount) {
MessageBeep (-1);
StatusBar->SimpleText=IntToStr(MessageCount)+ “messages were found”;
RetrieveMessageHeaders (MessageCount);
LastMessageCount = MessageCount;
}
}
_finally
{
Lock–;
StatusBar->SimpleText = “Waiting…”;
}
}
وقتی اطلاعات بازیابی شد و کاربر آنراCancel نکرد ارتباط با POP3 Server برقرار میشود، این عمل ارتباط شما با اینترنت را برقرار نمیکند چرا که برنامه فرض کرده که قبلاً از طریق dial-up به آن وصل شدهاید. اگر ارتباط dial-up برقرار نشده باشد برنامه پایان یافته و یک error میدهد. اگر همه موارد درست بود زیر برنامه Timer =timer که فعال کننده timer است فراخوانده میشود. این زیر برنامه یک دستور ‘do-nothing’ را به server میفرستد که هدف آن آگاه نمودن Server از برقراری ارتباط ما میباشد. هر ده دقیقه KeepAlive صدا زده میشود.
از هر شش بار فراخواندن Timer/Timer (یکبار در دقیقه) checkmessages فراخوانده میشود تا به ما نشان دهد چند پیام در Server منتظر باقی ماندند. نکته مهم استفاده از متغیر Lock میباشد. با افزایش این متغیر در Timer/Timer و کاهش آن در هنگام خروج ما مانع از تیک زمان در موقع اجرای تیک قبلی میشود. نکته مهم در اینجاست که پیام حذف شده تا زمان قطع کامل Server از نظر فیزیکی حذف نمیشود. این مشابه فرمان ‘Commit’ در email هنگام کار با database میباشد. درهنگام حذف email کد متغیر LastMessageCount و TickCount را برای کنترل مشاهده لیست تنظیم مینماید.
دیدگاه خود را بیان کنید.
باید وارد سایت شده باشید برای دیدگاه دادن