يصف المثال الموجود في هذه المقالة طريقة إرسال رسائل بريد إلكتروني جماعية في دلفي7. شاركها مع الجميع لتكون مرجعا لك. التحليل المحدد هو كما يلي:
خلال هذه الفترة، يجب إرسال معلومات المرشح ومعلومات الاختبار إلى جميع المرشحين الذين يتقدمون للاختبار عبر البريد الإلكتروني، وبعد العديد من عمليات التصحيح، يعتبر ذلك بمثابة نجاح.
الفكرة العامة هي:
1. قم بتثبيت إصدار LAN من خادم البريد ، وقم بإعداد DNS حتى يتمكن الخادم من إرسال رسائل البريد الإلكتروني إلى المستخدمين خارج الشبكة. هناك العديد من البرامج في هذا المجال، مثل WinWebMail، وهو جيد ويمكن تنزيله من الموقع الرسمي موقع إلكتروني؛
2. عناصر التحكم التي يجب استخدامها: Indy10.0.15، والتي يمكن تنزيلها من خلال بحث Baidu؛
3. قم بتعيين معلومات خادم البريد الإلكتروني والحساب المراد إرسالها
انسخ الكود كما يلي: function setEmailInfo:integer; //قيمة الإرجاع 0: فشل إعداد البريد الإلكتروني 1: تم إعداد البريد الإلكتروني بنجاح؛
فار
SelectStr:string;
thisresult:integer;
يبدأ
هذه النتيجة := 0;
// إعداد الحساب
IdSMTP1.AuthType := atNone;
IdSMTP1.Host := hostString;
IdSMTP1.Username := userNameString;
IdSMTP1.Password := passWordString;
يحاول
IdSMTP1.connect;
هذه النتيجة := 1;
إذا لم يكن IdSMTP1.Authenticate ثم
يبدأ
showmessage("فشل إرسال التحقق من حساب البريد الإلكتروني! يرجى التحقق من إعدادات حساب SMTP!");
هذه النتيجة := 0;
نهاية
يستثني
showmessage("فشل اتصال خادم SMTP! يرجى التحقق مما إذا كانت إعدادات حساب SMTP والشبكة طبيعية!");
هذه النتيجة := 0;
نهاية
نهاية؛
النتيجة := هذه النتيجة؛
نهاية؛
4. إرسال رسالة عبر البريد الإلكتروني كوظيفة مستقلة، ويلزم التحكم في التأخير عند الإرسال.
انسخ الكود كما يلي: الإجراء sendEmailOnce(emailusername:string;
formAddress:string;receiptRecipientAddress:string;sendtoAdd:string;emailSubject:string);
يبدأ
MsgKsbkxx.From.Name := اسم مستخدم البريد الإلكتروني؛ // اسم مرسل البريد الإلكتروني
MsgKsbkxx.From.Address := formAddress; // عنوان المرسل الإلكتروني
MsgKsbkxx.ReceiptRecipient.Address :=recipientRecipientAddress;
// عنوان الرد، والذي يمكن أن يكون مختلفًا عن عنوان مرسل البريد الإلكتروني
MsgKsbkxx.Recipients.EMailAddresses := sendtoAdd;
MsgKsbkxx.Sender.Address :=formAddress;//إرسال بريد إلكتروني إلى... العنوان
MsgKsbkxx.Subject := emailSubject;
MsgKsbkxx.Body.Assign(emailMemo.Lines); // محتوى البريد الإلكتروني
IdSMTP1.Send(MsgKsbkxx); // أمر إرسال البريد الإلكتروني
نهاية؛
5. ما عليك سوى تحديد شرعية عنوان البريد الإلكتروني
انسخ الكود الكود كما يلي: // افصل السلسلة إلى عدة سلاسل وفقًا لتمثيل فاصل السلسلة، وقم بتخزينها في قائمة سلسلة rs.
الإجراء SeparateTerms2(s:string;Separator:string;var rs:TSTringList);
فار
أستر: سلسلة؛
معرف: عدد صحيح؛
ASubStr: سلسلة؛
يبدأ
AStr := القطع(القطع);
بينما Pos(Separator, AStr) > 0 افعل
يبدأ
idx := Pos(Separator, AStr);
ASubStr := Copy(AStr, 1, idx - 1);
rs.Add(ASubStr);
AStr := Copy(AStr, idx + 1, Length(AStr));
نهاية؛
if AStr+'a' <> 'a' ثم rs.Add(AStr); // إذا كانت هناك سلاسل متبقية، قم بتخزينها في قائمة السلاسل
نهاية؛
// تحديد ما إذا كانت السلسلة تلبي معيار عنوان البريد الإلكتروني
// صحيح: إرجاع موافق، خطأ إرجاع الخطأ
وظيفة البريد الإلكتروني:YesOrNo (emailAddress:String):string;
فار
getStrings:TSTringList;
getYesOrNo:string;
يبدأ
getYesOrNo := 'خطأ';
getStrings := TStringList.Create;
SeparateTerms2(emailAddress,'@',getStrings);
إذا getStrings.Count=2 ثم
يبدأ
getStrings.Clear;
SeparateTerms2(emailAddress,'.',getStrings);
إذا getStrings.Count>1 ثم getYesOrNo := 'ok';
نهاية؛
getStrings.Free;
النتيجة := getYesOrNo;
نهاية؛
6. إرسال رسائل البريد الإلكتروني بكميات كبيرة
انسخ الكود كما يلي: الإجراء bEmailKsxxClick;
فار
AccordAmount,i,j,tag:integer;
emailusername,formAddress,sendtoAdd,emailSubject,receiptRecipientAddress,selectStr:string;
يبدأ
// تحديد ما إذا كانت هناك بيانات في جدول البيانات يجب إرسالها عبر البريد الإلكتروني، وإذا كان الأمر كذلك، أرسلها
إذا كان Bmb.RecordCount > 0 ثم
AccordAmount := Bmb.RecordCount
آخر
مخرج؛
//
// احصل على معلومات الحساب، والتي يتم تخزينها عادةً في جدول بيانات أو ملف INI
emailusername := userNameString; //مرسل البريد الإلكتروني
formAddress := fromAddressString; //إرسال عنوان البريد الإلكتروني
RecipientRecipientAddress := RecipientAddressString; // الرد على عنوان البريد الإلكتروني
emailSubject := emailSubjectString; // موضوع البريد الإلكتروني
//
العلامة := 1; // بت العلم: توقف عند إرسال الخطأ
i:=1; // إجمالي عدد رسائل البريد الإلكتروني المرسلة
j:=0; // عدد السجلات التي تمت معالجتها للسماح لشريط التقدم بالتقدم تدريجيًا
list1.Clear; // عرض معلومات حول الطلاب الذين تم إرسال رسائل البريد الإلكتروني الخاصة بهم بنجاح
// تحديد ما إذا كان يمكن توصيله بصندوق البريد المحدد إذا كانت قيمة الإرجاع هي 1، فاحصل على محتوى البريد الإلكتروني والإعدادات ذات الصلة وأرسلها
إذا setEmailInfo = 1 ثم
يبدأ
Pb.BlockSize := 1;
Pb.Max := AccordAmount ;
Formsjtj.Refresh;
Bmb.First;
يحاول
بينما (لا tBmb.Eof) تفعل
يبدأ
// تحديد ما إذا كان عنوان البريد الإلكتروني فارغًا ويلبي مواصفات البريد الإلكتروني، إذا تم استيفاء كلا الشرطين، فأرسل بريدًا إلكترونيًا إلى العنوان.
إذا كان Bmb.FieldByName('s_emailAddress').AsString+'a' <> 'a' إذن
يبدأ
// احصل على محتوى البريد الإلكتروني المرسل
emailMemo.Clear;
........................................
// قم بتعيين معلومات البريد الإلكتروني. إذا كان هناك خطأ في إرسال البريد الإلكتروني، فاخرج مباشرة.
إذا كانت العلامة = 0 ثم الخروج؛
//إرسال البريد الإلكتروني
sendtoAdd := Trim(Bmb.FieldByName('s_emailAddress').AsString); // يحتاج إلى الإرسال إلى...صندوق البريد
إذا كان emailAddressYesOrNo(sendtoAdd)= 'موافق' ثم //تحقق مما إذا كان تنسيق البريد الإلكتروني صحيحًا
يبدأ
sendEmailOnce(emailusername,formAddress,receiptRecipientAddress,sendtoAdd,emailSubject); //إرسال بريد إلكتروني
أنا := أنا +1؛ //عداد زائد 1
list1.Items.Add(......); // ضع معلومات المرشح التي تم إرسال رسائل البريد الإلكتروني إليها بنجاح في القائمة
نهاية؛
//
نهاية؛
// سوف يتوقف لمدة ثانيتين في كل مرة يتم فيها إرسال 50 رسالة بريد إلكتروني.
إذا (i mod 50) = 0 ثم Sleep(2000);
dm_sjtj.ListBmb.next;
Application.ProcessMessages; // معالجة معلومات العملية في الحلقة
// تحديث مؤشر التقدم
ي := ي+1;
PB.Progress:=j;
PB.StepIt;
تحديث.
نهاية؛
أخيراً
العلامة := 0;
IdSMTP1.Disconnect;
نهاية؛
نهاية؛
showmessage('إجمالي الرسائل المرسلة'+intToStr(i-1)+' رسائل البريد الإلكتروني.');
نهاية؛
7. القضايا التي تحتاج إلى الاهتمام
① لا يسمح البلد برسائل البريد الإلكتروني العشوائية
② نظرًا لأن معظم موفري خدمة البريد الإلكتروني يتحكمون في البريد الإلكتروني المجمع، فغالبًا ما يكون هناك تأخير بين رسالتي بريد إلكتروني. يوصى بإعداد خادم البريد الإلكتروني الخاص بك.
③ نظرًا لأن عنصر التحكم Indy يحتوي على وضعين فقط: atNone وatSASL، بعد إعداد خادم البريد، تحتاج إلى إعداد عنوان IP وحساب لا يتطلب التحقق؛
④ نظرًا لأن عناوين البريد الإلكتروني الداخلية لا يمكنها الحصول على ردود عبر البريد الإلكتروني، فغالبًا ما يتم تعيين عنوان الرد وعنوان الإرسال ليكونا مختلفين. إحدى المشاكل التي تظهر الآن هي أنه لا يمكنك الرد عند فتح بريد إلكتروني من خلال المتصفح، ولكن يمكنك الحصول على رد بعد تلقي بريد إلكتروني من خلال Foxmail. هذا يحتاج إلى اهتمام.
آمل أن تكون هذه المقالة مفيدة لبرمجة دلفي للجميع.