في ASP، يمكنك إرسال رسائل بريد إلكتروني بسيطة عن طريق استدعاء مكون CDONTS، وهذا ممكن أيضًا. والفرق هو أنه في .Net Framework، يتم تغليف هذا المكون في مساحة الاسم System.Web.Mail.
برنامج إرسال البريد الإلكتروني النموذجي هو كما يلي:
<%@ استيراد مساحة الاسم = "System.Web.Mail" %>
<script runat="server">
MailMessage mail=new MailMessage();
mail.From=" [email protected] ";
mail.To=" [email protected] ";
mail.BodyFormat=MailFormat.Text;
mail.Body="اختبار بريد SMTP.";
mail.Subject="ru طيب؟";
SmtpMail.SmtpServer = "localhost"؛
SmtpMail.Send(mail);
</script>
عادةً، يقوم النظام باستدعاء خادم SMTP الافتراضي الذي يأتي مع IIS لإرسال رسائل البريد الإلكتروني. ومع ذلك، غالبًا ما نواجه رسالة الخطأ هذه:
رفض الخادم عنوانًا واحدًا أو أكثر من عناوين المستلمين وكانت استجابة الخادم: 550 5.7.1 غير قادر على الترحيل لـ [email protected]
ولا يقتصر سبب هذا الخطأ على احتمال وجود عنوان خاطئ فحسب. هناك سبب آخر مهم. كما هو مذكور أعلاه، لا يحتوي IIS على وظيفة بريد إلكتروني حقيقية، ولكنه يستخدم فقط "خادم SMTP الظاهري" لإعادة توجيه رسائل البريد الإلكتروني. في MSDN، هناك النصيحة التالية:
إذا كان خادم SMTP المحلي الخاص بك (المضمن في نظامي التشغيل Windows 2000 وWindows Server 2003) خلف جدار حماية يمنع أي حركة مرور مباشرة عبر SMTP (عبر المنفذ 25)، فستحتاج إلى معرفة ما إذا كانت هناك أي حيل ذكية. يمكن استخدام الأجهزة المضيفة المتوفرة على الشبكة لترحيل رسائل SMTP الموجهة إلى الإنترنت.
المضيف الذكي هو خادم SMTP يقوم بترحيل البريد الإلكتروني الصادر المُرسل مباشرةً إلى الإنترنت من خادم SMTP داخلي. يجب أن يكون المضيف الذكي قادرًا على الاتصال بالشبكة الداخلية والإنترنت ليكون بمثابة بوابة بريد إلكتروني.
افتح قيود خادم SMTP الافتراضي - خصائص - الوصول - الترحيل. يمكنك أن ترى أن وظيفة إعادة التوجيه أو الترحيل هذه مقيدة. في قائمة القيود، أضف عنوان IP الخاص بالمضيف الذي يحتاج إلى استخدام هذا الخادم لحل المشكلة المذكورة أعلاه.
إذا كنت لا تستخدم خادم SMTP الظاهري الذي يأتي مع IIS ولكنك تستخدم خوادم بريد حقيقية أخرى، مثل IMail وExchange وما إلى ذلك، فغالبًا ما تواجه مشكلة أن الخادم يتطلب مصادقة المرسل (ESMTP). عند استخدام خادم يتطلب التحقق من هوية المرسل، سيحدث خطأ:
رفض الخادم عنوانًا واحدًا أو أكثر للمستلمين وكانت استجابة الخادم: 550 ليس مضيفًا محليًا ckocoo.com، وليس بوابة
في الماضي، واجهت هذا في. ASP لا توجد إمكانية لحل المشكلة، يمكننا فقط استخدام مكون CDO (المكون الأصلي لـ CDONTS) مباشرة:
conf.Fields[CdoConfiguration.cdoSMTPAuthenticate].Value=CdoProtocolsAuthentication.cdoBasic;
conf.Fields[CdoConfiguration.cdoSendUserName].Value="brookes";
conf.Fields[CdoConfiguration.cdoSendPassword].Value="XXXXXXX";
في .Net Framework 1.1، من الواضح أنه تمت إضافة مجموعة الحقول إلى مكون MailMessage لزيادة هوية المرسل في خادم بريد ESMTP بسهولة. قضايا التحقق. ومع ذلك، تنطبق هذه الطريقة فقط على إصدار .Net Framework 1.1، وليس إصدار .Net Framework 1.0. يكون إجراء إرسال رسائل البريد الإلكتروني مع مصادقة المرسل كما يلي:
<%@ استيراد مساحة الاسم = "System.Web.Mail" %>
<script runat="server">
MailMessage mail=new MailMessage();
mail.From=" [email protected] ";
mail.To=" [email protected] ";
mail.BodyFormat=MailFormat.Text;
mail.Body="اختبار بريد SMTP.";
mail.Subject="ru طيب؟";
mail.Fields.Add(" http://schemas.microsoft.com/cdo/configuration/smtpauthenticate ", "1"); //المصادقة الأساسية
mail.Fields.Add(" http://schemas.microsoft.com/cdo/configuration/sendusername ", "brookes"); // قم بتعيين اسم المستخدم الخاص بك هنا
mail.Fields.Add(" http://schemas.microsoft.com/cdo/configuration/sendpassword ", "walkor"); // قم بتعيين كلمة المرور الخاصة بك هنا
SmtpMail.SmtpServer="lsg.moon.net";
SmtpMail.Send(mail);
</script>
باستخدام هذه الطريقة، لم تعد بحاجة إلى الاعتماد على مكونات الطرف الثالث مثل Jmail وEasyMail، ولكن ببساطة استخدم SmtpMai لإكمال إرسال رسائل البريد الإلكتروني!