ล่าสุดผมต้องดูแลรักษาโปรแกรม ASP.NET 1.1 เนื่องจากผมเคยใช้เนมสเปซ C# 2.0 System.Net.Mail ในการส่งอีเมลเป็นอย่างดี แต่มีปัญหามากมายกับ System.Web.Mail ใน ASP.NET 1.1 ดังนั้นฉันจึงเลือกอันอื่น กลยุทธ์สรุปอินเทอร์เฟซสำหรับการส่งอีเมล จากนั้นจึงใช้การส่งอีเมลด้วยวิธีอื่น จึงมีคำดังต่อไปนี้
กำหนดอินเทอร์เฟซเชิงนามธรรมเพื่อสรุปการใช้งานทั้งหมด:
การใช้ระบบ;
ใช้ System.Web.Mail
เนมสเปซ YywMail
-
คลาสนามธรรมสาธารณะ MySmtpMail
-
Fields#region ฟิลด์
สตริงส่วนตัว _defaultCharset = "GB2312";
ส่วนตัว int _defaultSmtpPort = 25;
#endregion
Properties#region สตริง
ที่มีการป้องกันคุณสมบัติ DefaultCharset
-
รับ { คืนสิ่งนี้._defaultCharset }
}
ป้องกัน int DefaultSmtpPort
-
รับ { คืนสิ่งนี้._defaultSmtpPort;}
}
#endregion
Methods#region Methods
/**//// <สรุป>
/// รับอินสแตนซ์เริ่มต้น
/// สรุป>
/// <ส่งคืน>ส่งคืน>
MySmtpMail GetDefaultInstance() แบบคงที่สาธารณะ
-
// ที่นี่คุณสามารถกำหนดประเภทการใช้งานเฉพาะผ่านไฟล์การกำหนดค่าภายนอกจากนั้น
// รับอินสแตนซ์ประเภทผ่าน Activator.CreateInstance()
}
/**//// <สรุป>
/// ทำงานเริ่มต้นบางอย่าง
/// สรุป>
บทคัดย่อสาธารณะ Open();
/**//////
/// ทำลายวัตถุ
/// สรุป>
โมฆะนามธรรมสาธารณะปิด ();
/**////// <สรุป>
/// ส่งอีเมล์
/// สรุป>
/// <ชื่อพารามิเตอร์ = "ข้อความ" > พารามิเตอร์>
/// <ชื่อพารามิเตอร์ = "smtpServer">
///
///
/// <ส่งคืน>ส่งคืน>
บูลสาธารณะส่ง (ข้อความ MailMessage, สตริง smtpServer, ชื่อผู้ใช้เซิร์ฟเวอร์สตริง, สตริงเซิร์ฟเวอร์รหัสผ่าน)
-
ส่งคืนส่ง (ข้อความ, smtpServer, ชื่อผู้ใช้เซิร์ฟเวอร์, รหัสผ่านเซิร์ฟเวอร์, this._defaultSmtpPort);
}
บูลนามธรรมสาธารณะ ส่ง (ข้อความ MailMessage, สตริง smtpServer, ชื่อผู้ใช้สตริงเซิร์ฟเวอร์, สตริงเซิร์ฟเวอร์รหัสผ่าน, int smtpPort);
สตริงคงที่สาธารณะ [] GetTo (ข้อความ MailMessage)
-
ถ้า (ข้อความ == null)
โยน ArgumentNullException ใหม่ ("ข้อความ");
ถ้า (Globals.IsNullorEmpty (message.To))
return null;
return message.To.Split(';');
}
สตริงสาธารณะแบบคงที่ [] GetCc (ข้อความ MailMessage)
-
ถ้า (ข้อความ == null)
โยน ArgumentNullException ใหม่ ("ข้อความ");
ถ้า (Globals.IsNullorEmpty (message.Cc))
return null;
return message.Cc.Split(';');
}
สตริงสาธารณะแบบคงที่ [] GetBcc (ข้อความ MailMessage)
-
ถ้า (ข้อความ == null)
โยน ArgumentNullException ใหม่ ("ข้อความ");
if (Globals.IsNullorEmpty (message.Bcc))
return null;
return message.Bcc.Split(';');
}
#endregion
-
}
หมายเหตุ: ตามสามัญสำนึก ให้เปิด() ก่อนใช้งาน และอย่าลืมปิด() หลังการ
ใช้
งาน
1. ติดตั้ง jmail;
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 แล้ว ให้อ้างอิงมันเข้าไปในโปรเจ็กต์
ดาวน์โหลดส่วนประกอบ
แล้วขั้นตอนต่อไปคือการเขียนคลาสการใช้งาน:
การใช้ระบบ;
ใช้ System.Web.Mail
เนมสเปซ YywMail
-
JMailSmtpMail คลาสสาธารณะ: MySmtpMail
-
Fields#region ฟิลด์
MyJmail.Message jmail = null;
#endregion
วิธีการ#region วิธีการ
แทนที่สาธารณะ void Open()
-
jmail = ใหม่ MyJmail.Message();
}
บูลแทนที่สาธารณะส่ง (ข้อความ MailMessage, สตริง smtpServer, สตริงเซิร์ฟเวอร์ชื่อผู้ใช้, สตริงเซิร์ฟเวอร์รหัสผ่าน, int smtpPort)
-
ถ้า (jmail == null)
โยนข้อยกเว้นใหม่ ("smtp ถูกปิด!");
ถ้า (ข้อความ == null)
Throw new ArgumentNullException("message");
DateTime t = DateTime.Now;
// Silent คุณลักษณะ: หากตั้งค่าเป็นจริง JMail จะไม่แสดงข้อผิดพลาดข้อยกเว้น JMail.Send() จะคืนค่าจริงหรือเท็จตามผลการดำเนินการ
jmail.Silent = false;
//บันทึกที่สร้างโดย jmail โดยมีเงื่อนไขว่าแอตทริบิวต์การบันทึกถูกตั้งค่าเป็นจริง
jmail.Logging = true;
// ชุดอักขระ ค่าเริ่มต้นคือ "US-ASCII"
jmail.Charset = base.DefaultCharset;
//ประเภทเนื้อหาของตัวอักษร ค่าเริ่มต้นคือ "text/plain"): สตริง หากคุณส่งอีเมลในรูปแบบ HTML ให้เปลี่ยนเป็น "text/html"
ถ้า (message.BodyFormat == MailFormat.Html)
jmail.ContentType = "ข้อความ/html";
jmail.Priority = GetJmailPriority(message.Priority);
//เพิ่มผู้รับ
string[] toArray = MySmtpMail.GetTo(ข้อความ);
ถ้า (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 = จริง;
-
อื่น
-
jmail.AddRecipientCC(toArray[i], String.Empty, String.Empty);
-
-
}
string[] ccArray = MySmtpMail.GetCc(ข้อความ);
ถ้า (ccArray != null)
-
foreach (สตริง cc ใน ccArray)
-
ถ้า (!Globals.IsNullorEmpty(ซีซี))
jmail.AddRecipientCC(cc, String.Empty, String.Empty);
-
}
string[] bccArray = MySmtpMail.GetBcc(ข้อความ);
ถ้า (ccArray != null)
-
foreach (สตริง bcc ใน bccArray)
-
ถ้า (!Globals.IsNullorEmpty(bcc))
jmail.AddRecipientBCC(สำเนาลับ, String.Empty);
-
}
jmail.From = message.From;
//ชื่อผู้ใช้อีเมลของผู้ส่ง
jmail.MailServerUserName = ชื่อผู้ใช้เซิร์ฟเวอร์;
//รหัสผ่านอีเมลของผู้ส่ง
jmail.MailServerPassWord = รหัสผ่านเซิร์ฟเวอร์;
//ตั้งชื่ออีเมล์
jmail.Subject = ข้อความ.เรื่อง;
//เพิ่มไฟล์แนบในอีเมล (หากมีหลายไฟล์แนบ คุณสามารถเพิ่ม jmail.AddAttachment("c:\test.jpg",true,null);) เท่านี้ก็เรียบร้อย [หมายเหตุ]: หลังจากเพิ่มไฟล์แนบแล้ว โปรดลบ jmail.ContentType="text/html" ด้านบนออก มิฉะนั้น อักขระที่อ่านไม่ออกจะปรากฏในอีเมล
//jmail.AddAttachment("c:\test.jpg", จริง, null);
//เนื้อหาอีเมล
jmail.Body = message.Body;
if (message.BodyFormat == MailFormat.Html)
jmail.Body += "
";
อื่น
jmail.Body += "rnrn";
jmail.Body += DateTime.Now.ToString();
smtpServer = String.Format("{0}:{1}", smtpServer, smtpPort);
//วิธีการส่งของJmail
bool result = jmail.Send(smtpServer, false)
;
}
แทนที่สาธารณะถือเป็นโมฆะปิด ()
-
jmail.ปิด();
-
ไบต์คงที่ส่วนตัว 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
-
ไฟล์ # ภูมิภาค ไฟล์
OpenSmtp.Mail.MailMessage msg = null;
Smtp smtp = null;
#endregion
Methods#region วิธี
การแทนที่สาธารณะ void Open()
-
msg = OpenSmtp.Mail.MailMessage ใหม่ ();
smtp = ใหม่ Smtp();
}
บูลแทนที่สาธารณะส่ง (ข้อความ System.Web.Mail.MailMessage, สตริง smtpServer, ชื่อผู้ใช้เซิร์ฟเวอร์สตริง, สตริงเซิร์ฟเวอร์รหัสผ่าน, int smtpPort)
-
ถ้า (msg == null || smtp == null)
โยนข้อยกเว้นใหม่ ("smtp ถูกปิด!")
;
โยน ArgumentNullException ใหม่ ("ข้อความ");
SmtpConfig.VerifyAddresses = false;
ที่อยู่อีเมลจาก = ที่อยู่อีเมลใหม่ (ข้อความจาก, ข้อความจาก);
msg.Charset = base.DefaultCharset;
msg.จาก = จาก;
msg.Priority = GetOpenSmtpPriority(message.Priority);
//เพิ่มผู้รับ
string[] toArray = MySmtpMail.GetTo(ข้อความ);
ถ้า (toArray != null)
-
foreach (สตริงใน toArray)
-
ถ้า (!Globals.IsNullorEmpty(ถึง))
msg.AddRecipient(ถึง, AddressType.To);
-
}
string[] ccArray = MySmtpMail.GetCc(ข้อความ);
ถ้า (ccArray != null)
-
foreach (สตริง cc ใน ccArray)
-
ถ้า (!Globals.IsNullorEmpty(ซีซี))
msg.AddRecipient(cc, AddressType.Cc);
-
}
string[] bccArray = MySmtpMail.GetBcc(ข้อความ);
ถ้า (ccArray != null)
-
foreach (สตริง bcc ใน bccArray)
-
ถ้า (!Globals.IsNullorEmpty(bcc))
msg.AddRecipient(สำเนาลับ, AddressType.Bcc);
-
}
msg.Subject = message.Subject;
ถ้า (message.BodyFormat == System.Web.Mail.MailFormat.Html)
-
msg.HtmlBody = message.Body + "
" + DateTime.Now.ToString();
-
อื่น
-
msg.Body = message.Body + "rnrn" + DateTime.Now.ToString();;
}
สตริง str1 = msg.HtmlBody;
string str2 = msg.Body;
smtp.Host = เซิร์ฟเวอร์ smtp;
smtp.Username = ชื่อผู้ใช้เซิร์ฟเวอร์;
smtp.Password = รหัสผ่านเซิร์ฟเวอร์;
smtp.Port = smtpPort;
smtp.SendMail(msg)
;
-
การแทนที่สาธารณะเป็นโมฆะปิด ()
-
ผงชูรส = โมฆะ;
smtp = โมฆะ;
}
สตริงคงที่ส่วนตัว GetOpenSmtpPriority (ลำดับความสำคัญ System.Web.Mail.MailPriority)
-
// ระดับเมล 1 คือเร่งด่วน 3 คือปกติ 5 คือระดับต่ำ
ถ้า (ลำดับความสำคัญ == System.Web.Mail.MailPriority.High)
กลับ OpenSmtp.Mail.MailPriority.High
ถ้า (ลำดับความสำคัญ == System.Web.Mail.MailPriority.Low)
กลับ OpenSmtp.Mail.MailPriority.Low;
กลับ OpenSmtp.Mail.MailPriority.Normal;
}
#endregion
-
-
แผนการดำเนินงานที่สาม:
(แผนการดำเนินงานสองแผนข้างต้นเพียงพอที่จะตอบสนองความต้องการในปัจจุบัน และสามารถขยายได้หากจำเป็น)