{*************************************************************************************************************************************************************************** * *****************************
يتم استخدام هذه العملية للحصول على اسم خادم وجهة التسليم السريع للبريد ورقم الأولوية. يتم استخدام المعلمة AMXList لتلقي القيمة الناتجة. ****************************************************** ********** **********}
الإجراء TQuickEMailFrm.GetMxList(AMxList: TStringList; AQName: string);
فار
ط: عدد صحيح؛
يبدأ
مع IdDNSResolver افعل ذلك
يبدأ
Host := 202.102.13.141 { يتم استخدام سمة المضيف لتحديد عنوان خادم اسم المجال، وهو عنوان خادم اسم المجال الرئيسي الذي يوجد به المؤلف يمكن الوصول إليه بسرعة. يجب أن تعرف مكان تواجدك. يمكن العثور على عنوان خادم اسم المجال من خلال الأمر winipcfg ضمن نظام التشغيل win98 ومن خلال ipconfig /all ضمن نظام التشغيل win2000. }
ReceiveTimeout := 10000; // إذا لم يتم الحصول على تعليقات من خادم اسم المجال خلال الوقت المحدد، فسيتم اعتبار ذلك فاشلاً.
ClearVars؛ // مسح سجلات الموارد التي أرجعها الاستعلام السابق
{إنشاء بنية الرأس لهذا الاستعلام}
مع DNSHeader القيام به
يبدأ
Qr := False; // False يمثل الاستعلام Opcode := 0; // 0 يمثل استعلام اسم المجال القياسي RD := True; // يمكن لخادم اسم المجال إجراء استعلامات متكررة QDCount := 1; تنتهي الاستفسارات؛
{أنشئ السؤال المراد الاستعلام عنه}
DNSQDList.Clear;
مع DNSQDList.Add القيام به
يبدأ
QName := AQName; // اسم المجال المطلوب الاستعلام عنه QType := cMX; // يحدد QTYPE نوع سجل المورد المراد الاستعلام عنه.
نهاية؛
ResolveDNS; // أرسل طلبًا إلى خادم اسم المجال
{استلم نتيجة التعليقات من خادم اسم المجال ثم ضع اسم خادم بريد التعليقات في جزء الاسم من قائمة AMXList.
يتم وضع رقم الأولوية لخادم البريد في قسم القيمة. }
لأني:= 0 إلى DNSAnList.Count - 1
AMxList.Add(DNSAnList[i].RData.MX.Exchange + = +
IntToStr(DNSAnList[i].RData.MX.Preference));
نهاية؛
نهاية؛
{أرسل بريدًا إلكترونيًا للتسليم عند النقر على زر "إرسال"}
الإجراء TQuickEMailFrm.btnSendClick(Sender: TObject);
فار
MxList: TStringList؛
ط: عدد صحيح؛
QName, ThoughAddress: string;
يبدأ
// أنشئ بريدًا إلكترونيًا بناءً على المحتوى الذي ملأه المستخدم باستخدام IdMsgSend do
يبدأ
Body.Assign(mmContent.Lines); // نص البريد الإلكتروني From.Address := Trim(edtFrom.Text); // عنوان المرسل Recipients.EMailAddresses := Trim(edtTo.Text); // عنوان المستلم الموضوع := edtSubject. نص // نهاية موضوع البريد الإلكتروني؛
// احصل على اسم مجال البريد الإلكتروني من عنوان المستلم الذي تم إدخاله، واستخدم عملية GetMxList السابقة للحصول على عنوان الوجهة QName := TrimRight(copy(edtTo.Text, Pos(@ , edtTo.Text) + 1, Length(edtTo. نص) )))؛
MxList := TStringList.Create;
يحاول
GetMxList(MxList, QName);
بالرغم من العنوان := MxList.Names[0];
{يتم أخذ الخادم الأول الذي يحتوي على الملاحظات كوجهة. ويمكن للقراء إجراء تحسينات وفقًا للاحتياجات الفعلية، مثل مراعاة أولوية البريد أو عندما يكون الخادم الذي تختاره غير قادر مؤقتًا على معالجة بريدك بسبب الانشغال، حاول استخدام خادم آخر. . يحاول}
أخيراً
MxList.Free;
نهاية؛
// أرسل بريدًا إلكترونيًا باستخدام IdSMTP do
يبدأ
المضيف := رغم العنوان؛ // تعيين المضيف كوجهة. هذا هو الفرق بين البريد السريع والبريد العادي: = 25 // المنفذ الافتراضي لخدمة SMTP.
اتصال // اتصل بالخادم حاول
Send(IdMsgSend); // أرسل البريد الإلكتروني الذي تم إنشاؤه للتو ShowMessage(تم الإرسال) // المطالبة أخيرًا بعد اكتمال الإرسال
قطع الاتصال // قطع اتصال نهاية الخادم؛
نهاية؛
نهاية؛