في الآونة الأخيرة، أحتاج إلى صيانة برنامج ASP.NET 1.1 بسبب العمل. اعتدت استخدام مساحة الاسم C# 2.0 System.Net.Mail لإرسال رسائل البريد الإلكتروني بشكل جيد للغاية، ولكن هناك العديد من المشاكل مع System.Web.Mail في ASP.NET. 1.1، لذلك اخترت واحدة أخرى، حيث تقوم الإستراتيجية بتغليف واجهة إرسال رسائل البريد الإلكتروني، ثم تنفيذ إرسال البريد الإلكتروني بطرق أخرى، لذلك هناك الكلمات التالية.
حدد واجهة مجردة لتغليف جميع التطبيقات:
use System;
باستخدام System.Web.Mail؛
مساحة الاسم YywMail
{
فئة مجردة عامة MySmtpMail
{
Fields#region Fields
سلسلة خاصة _defaultCharset = "GB2312";
Private int _defaultSmtpPort = 25;
#endregion
خصائص المنطقة خصائص
السلسلة المحمية DefaultCharset
{
الحصول على { إرجاع هذا._defaultCharset }
}
محمي int DefaultSmtpPort
{
الحصول على { إرجاع هذا._defaultSmtpPort;}
}
النهاية
#طرق المنطقة
/**//// <summary>
/// احصل على المثيل الافتراضي
/// </الملخص>
/// <returns></returns>
ثابت عام MySmtpMail GetDefaultInstance ()
{
// هنا يمكنك تحديد نوع التنفيذ المحدد من خلال ملف تكوين خارجي، ثم
// احصل على مثيل النوع من خلال Activator.CreateInstance()
}
/**//// <summary>
/// قم ببعض أعمال التهيئة
/// </الملخص>
الملخص العام مفتوح ()
/**//// <summary>
/// تدمير الكائن
/// </الملخص>
الملخص العام void Close()
/**//// <summary>
/// إرسال البريد الإلكتروني
/// </الملخص>
/// <param name="message"></param>
/// <param name="smtpServer"></param>
/// <param name="serverUsername"></param>
/// <param name="serverPassword"></param>
/// <returns></returns>
إرسال منطقي عام (رسالة MailMessage، سلسلة smtpServer، سلسلة serverUsername، سلسلة serverPassword)
{
return Send(message, smtpServer, serverUsername, serverPassword, this._defaultSmtpPort);
}
مجردة عامة bool Send(MailMessage message, string smtpServer, string serverUsername, string serverPassword, int smtpPort)
;
{
إذا (الرسالة == فارغة)
طرح ArgumentNullException("message" جديد
إذا (Globals.IsNullorEmpty(message.To))
return null;
return message.To.Split(';');
}
سلسلة ثابتة عامة[] GetCc(رسالة MailMessage)
{
إذا (الرسالة == فارغة)
طرح ArgumentNullException("message" الجديد
إذا (Globals.IsNullorEmpty(message.Cc))
return null;
return message.Cc.Split(';');
}
سلسلة ثابتة عامة[] GetBcc(رسالة MailMessage)
{
إذا (الرسالة == فارغة)
طرح ArgumentNullException("message" الجديد
إذا (Globals.IsNullorEmpty(message.Bcc))
return null;
return message.Bcc.Split(';');
}
#endregion
}
}
ملاحظة: وفقًا للمنطق السليم، افتح () قبل الاستخدام، ولا تنس إغلاق () بعد الاستخدام.
خطة التنفيذ الأولى (مكون Jmail):
يتطلب استخدام Jmail في .NET الإعدادات التالية:
1. قم بتثبيت بريد جوجل.
2. ابحث عن jmail.dll؛
3. لتسجيل المكون Jmail.dll، انسخ ملف jmail.dll إلى دليل system32، ثم قم بتشغيل الأمر "regsvr32 jmail.dll" (باستثناء علامات الاقتباس، لإلغاء التثبيت، قم بتشغيل "regsvr32 /u jmail.dll"). ;
4. قم بتنفيذ برنامج FilesMicrosoft Visual Studio .NETFrameworkSDKBinildasm.exe (يمكنك استخدام موجه أوامر Visual Studio .Net 2003)،
التنسيق كما يلي: tlbimp c:Program FilesDimacw3JMail4jmail.dll /out:MyJmail.dll /namespace:MyJmail
بعد إنشاء MyJmail.dll، قم بإحالته إلى المشروع.
تنزيل المكون،
الخطوة التالية هي كتابة فئة التنفيذ:
use System;
باستخدام System.Web.Mail؛
مساحة الاسم YywMail
{
الفئة العامة JMailSmtpMail: MySmtpMail
{
الحقول # المنطقة الحقول
MyJmail.Message jmail = null
#endregion
Methods#region Methods
public override void Open();
{
jmail = new MyJmail.Message();
}
تجاوز عام منطقي إرسال (رسالة MailMessage، سلسلة smtpServer، سلسلة serverUsername، سلسلة serverPassword، int smtpPort)
{
إذا (جيميل == فارغ)
طرح استثناء جديد("smtp مغلق!");
إذا (الرسالة == فارغة)
throw new ArgumentNullException("message");
DateTime t = DateTime.Now;
// السمة الصامتة: إذا تم ضبطها على "صحيح"، فلن يقوم JMail بإرجاع خطأ استثناء
jmail.Silent = false;
// السجل الذي تم إنشاؤه بواسطة jmail، بشرط تعيين سمة التسجيل على "صحيح".
jmail.Logging = true;
// مجموعة الأحرف، الافتراضي هو "US-ASCII"
jmail.Charset = base.DefaultCharset;
// نوع محتوى الرسالة الافتراضي هو "نص/عادي"): سلسلة إذا أرسلت البريد الإلكتروني بتنسيق HTML، فقم بتغييره إلى "نص/html".
إذا (message.BodyFormat == MailFormat.Html)
jmail.ContentType = "text/html";
=
GetJmailPriority(message.Priority);
string[] toArray = MySmtpMail.GetTo(message);
إذا (toArray != null && toArray.Length > 0)
{
bool isAddedRecipient = false
for (int i = 0; i < toArray.Length; i++)
{
إذا (Globals.IsNullorEmpty(toArray[i]))
متابعة؛
إذا (!isAddedRecipient)
{
jmail.AddRecipient(toArray[i], String.Empty, String.Empty);
isAddedRecipient = true;
}
آخر
{
jmail.AddRecipientCC(toArray[i], String.Empty, String.Empty);
}
}
}
string[] ccArray = MySmtpMail.GetCc(message);
إذا (ccArray != فارغة)
{
foreach (سلسلة cc في ccArray)
{
إذا (!Globals.IsNullorEmpty(cc))
jmail.AddRecipientCC(cc, String.Empty, String.Empty);
}
}
string[] bccArray = MySmtpMail.GetBcc(message);
إذا (ccArray != فارغة)
{
foreach (سلسلة مخفية في bccArray)
{
إذا (!Globals.IsNullorEmpty(bcc))
jmail.AddRecipientBCC(bcc, String.Empty);
}
}
jmail.From = message.From;
// اسم مستخدم البريد الإلكتروني للمرسل
jmail.MailServerUserName = serverUsername;
// كلمة مرور البريد الإلكتروني للمرسل
jmail.MailServerPassWord = serverPassword;
// تعيين عنوان البريد الإلكتروني
jmail.Subject = message.Subject;
// أضف مرفقات إلى البريد الإلكتروني (إذا كان هناك عدة مرفقات، يمكنك إضافة jmail.AddAttachment("c:\test.jpg",true,null);) وسيتم ذلك. [ملاحظة]: بعد إضافة المرفق، يرجى حذف jmail.ContentType="text/html" أعلاه. وإلا، ستظهر أحرف مشوهة في البريد الإلكتروني.
//jmail.AddAttachment("c:\test.jpg", true, null);
// محتوى البريد الإلكتروني
jmail.Body = message.Body
if (message.BodyFormat == MailFormat.Html)
jmail.Body += "<br><br>";
آخر
jmail.Body += "rnrn";
jmail.Body += DateTime.Now.ToString();
smtpServer = String.Format("{0}:{1}", smtpServer, smtpPort);
// طريقة إرسال بريد Jmail
نتيجة منطقية = jmail.Send(smtpServer, false)
;
}
تجاوز عام باطل إغلاق ()
{
jmail.Close();
}
بايت ثابت خاص GetJmailPriority (System.Web.Mail.MailPriority الأولوية)
{
// مستوى البريد، 1 عاجل، 3 عادي، 5 مستوى منخفض
إذا (الأولوية == System.Web.Mail.MailPriority.High)
إرجاع 1
إذا (الأولوية == System.Web.Mail.MailPriority.Low)
العودة 5؛
العودة 3؛
}
#endregion
}
}
خطة التنفيذ الثانية (مكون OpenSmtp.Net):
بالنسبة لأولئك الذين لم يتواصلوا مع OpenSmtp.Net، يمكنك البحث عنه عبر Google أولاً، ولن أعرض المفهوم هنا، وفي الوقت نفسه، فهو يحتوي أيضًا على شقيق توأم OpenPop .Net أما بالنسبة لـ OpenSmtp.Net فيمكننا تنزيله من http://sourceforge.net/projects/opensmtp-net/ الإصدار الأحدث هو 1.11.
بعد ذلك، دعنا ندخل في الموضوع:
استخدام النظام؛
باستخدام System.Web.Mail؛
باستخدام OpenSmtp.Mail؛
مساحة الاسم YywMail
{
الطبقة العامة OpenSmtpMail: MySmtpMail
{
Files#region Files
OpenSmtp.Mail.MailMessage msg = null;
Smtp smtp = null
#endregion
Methods#region Methods
public override void Open();
{
msg = new OpenSmtp.Mail.MailMessage();
smtp = new Smtp();
}
تجاوز عام منطقي إرسال (System.Web.Mail.MailMessage message، string smtpServer، string serverUsername، string serverPassword، int smtpPort)
{
إذا (msg == null || smtp == null)
طرح استثناء جديد ("smtp مغلق!")؛
إذا (الرسالة == فارغة)
رمي ArgumentNullException("message" الجديد);
SmtpConfig.VerifyAddresses = false;
عنوان البريد الإلكتروني من = عنوان البريد الإلكتروني الجديد (message.From، message.From)؛
msg.Charset = base.DefaultCharset
msg.From = from;
msg.Priority = GetOpenSmtpPriority(message.Priority)
;
string[] toArray = MySmtpMail.GetTo(message);
إذا (toArray != فارغة)
{
foreach (سلسلة إلى في toArray)
{
إذا (!Globals.IsNullorEmpty(to))
msg.AddRecipient(to, AddressType.To);
}
}
string[] ccArray = MySmtpMail.GetCc(message);
إذا (ccArray != فارغة)
{
foreach (سلسلة cc في ccArray)
{
إذا (!Globals.IsNullorEmpty(cc))
msg.AddRecipient(cc, AddressType.Cc);
}
}
string[] bccArray = MySmtpMail.GetBcc(message);
إذا (ccArray != فارغة)
{
foreach (سلسلة مخفية في bccArray)
{
إذا (!Globals.IsNullorEmpty(bcc))
msg.AddRecipient(bcc, AddressType.Bcc);
}
}
msg.Subject = message.Subject;
إذا (message.BodyFormat == System.Web.Mail.MailFormat.Html)
{
msg.HtmlBody = message.Body + "<br><br>" + DateTime.Now.ToString();
}
آخر
{
msg.Body = message.Body + "rnrn" + DateTime.Now.ToString();;
}
string str1 = msg.HtmlBody;
سلسلة str2 = msg.Body؛
smtp.Host = smtpServer;
smtp.Username = serverUsername;
smtp.Password = serverPassword;
smtp.Port = smtpPort;
smtp.SendMail(msg)
;
}
التجاوز العام باطل إغلاق ()
{
msg = null;
smtp = فارغ;
}
سلسلة ثابتة خاصة GetOpenSmtpPriority (أولوية System.Web.Mail.MailPriority)
{
// مستوى البريد، 1 عاجل، 3 عادي، 5 مستوى منخفض
إذا (الأولوية == System.Web.Mail.MailPriority.High)
إرجاع OpenSmtp.Mail.MailPriority.High
إذا (الأولوية == System.Web.Mail.MailPriority.Low)
return OpenSmtp.Mail.MailPriority.Low;
return OpenSmtp.Mail.MailPriority.Normal;
}
#endregion
}
}
خطة التنفيذ الثالثة:
(خطتي التنفيذ المذكورتين أعلاه تكفيان لتلبية الاحتياجات الحالية، ويمكن التوسع فيهما إذا لزم الأمر)