ฉันเพิ่งเห็นบทความเกี่ยวกับการส่งอีเมลใน .NET "การส่งอีเมลจากหน้า asp.net" และฉันเห็นว่าคลาสภายใต้เนมสเปซ System.Web.Mail ยังคงใช้อยู่ เราทุกคนรู้ดีว่าภายใต้ .NET 1.1 คลาสส่วนใหญ่ในเนมสเปซนี้ใช้เพื่อส่งอีเมล การใช้วิธี Send static ของ SmtpMail สามารถส่งอีเมลได้อย่างง่ายดาย แต่เนื่องจากคลาสนี้เรียกใช้การดำเนินการบน Windows 2000 ขึ้นไป คอมโพเนนต์ CDO ของระบบ ใช้เพื่อส่งอีเมล ไม่ว่าจะเกิดข้อผิดพลาดอะไรก็ตาม ระบบจะแจ้งว่าไม่สามารถเข้าถึงออบเจ็กต์ CDO.Message หรือข้อยกเว้นของ CDO.Message อื่นๆ ได้ โดยเฉพาะอย่างยิ่งเมื่อเราต้องการการตรวจสอบ Smtp เราต้องเพิ่มคำจำกัดความส่วนหัวของอีเมลสามรายการใน MailMessage ซึ่งค่อนข้างยุ่งยาก ฟังก์ชั่นการส่งอีเมลได้รับการออกแบบมาเป็นอย่างดีภายใต้ .NET 2.0 การใช้คลาสในพื้นที่ System.Net.Mail ช่วยให้เราสามารถส่งอีเมลต่างๆ ได้อย่างง่ายดาย อย่างไรก็ตาม เพื่อให้เข้ากันได้กับเวอร์ชันดั้งเดิม พื้นที่ System.Web.Mail จะไม่ถูกลบ และคลาสในพื้นที่นี้จะถูกทำเครื่องหมายด้วย Obsolete ด้วย หากคุณใช้คลาส .NET 2.0 ในการคอมไพล์ คุณจะเป็นอย่างนั้น ได้รับแจ้งให้ใช้คลาสพื้นที่ System.Web.Mail แทน
ตอนนี้เรามาดูสิ่งที่ต้องทำเพื่อส่งอีเมล ที่นี่ ฉันยังพบบทความในสวนเกี่ยวกับ .NET 2.0 การส่งอีเมล "ส่วนประกอบการส่งอีเมลตามเนมสเปซ .NET 2.0 System.Net.Mail" ซึ่งครอบคลุมถึง การส่งและรับจดหมาย ในบทความนี้เราจะพูดถึงวิธีการส่งเท่านั้น ฉันรู้สึกว่าไม่ได้ใช้ไฟล์กำหนดค่าจริงๆ เรายังจำเป็นต้องระบุข้อมูลบัญชี Stmp บางอย่างสำหรับ SmtpClient ด้วยตัวเราเอง จริงๆ แล้ว เราเพียงแต่ต้องกำหนดค่าบัญชี Smtp ที่เราจะใช้ผ่าน web.config (หรือ app.config):
< smtp จาก =" [email protected] ">
<โฮสต์เครือข่าย = "smtp.tom.com" รหัสผ่าน = " พอร์ต = "25" userName = "hjf1223" defaultCredentials = "false"/>
mailSettings >
< /system.net>
ระบบการกำหนดค่าของ .NET 2.0 มีประสิทธิภาพมากจนเราสามารถเขียนการกำหนดค่าข้างต้นได้อย่างง่ายดายโดยไม่ต้องอ้างอิงข้อมูลใดๆ ดังที่กล่าวข้างต้น คุณลักษณะ from คือกล่องจดหมายที่คุณจะส่งอีเมล และโฮสต์คือที่อยู่เซิร์ฟเวอร์ SMTP ไม่จำเป็นต้องระบุรหัสผ่าน พอร์ต และชื่อผู้ใช้ สำหรับ defaultCredentials คุณต้องใส่ใจ เมื่อเราไม่ต้องการให้เซิร์ฟเวอร์ SMTP ตรวจสอบผู้ใช้ที่ส่ง ให้ตั้งค่าเป็นเท็จ หรือไม่เช่นนั้นก็ตั้งค่าให้เป็นจริง เรากำหนดค่าให้ตรวจสอบว่าเป็นผู้ใช้ที่ถูกต้องหรือไม่
หลังจากเขียนไฟล์ configuration แล้ว ขั้นตอนต่อไปคือการเรียกโปรแกรม หลังจากที่ผมเขียนข้อความต่อไปนี้เพื่อส่งอีเมล คุณจะรู้สึกแปลก ๆ จริง ๆ เหรอ? ใช่ มันง่ายมาก มาดูกันดีกว่า:
MailMessage m_message = new MailMessage();
m_message.From = new MailAddress(" [email protected] ");
m_message.To.Add(new MailAddress(" [email protected] "));
m_message.Subject = "ส่งอีเมลโดยใช้ .NET 2.0";
m_message.Body = "ง่ายมาก";
SmtpClient m_smtpClient = new SmtpClient();
m_smtpClient.Send(m_message);
เราไม่มีอะไรพิเศษแม้แต่นิดเดียว บรรทัดโค้ดนั่นคือสร้างออบเจ็กต์ MailMessage จากนั้นสร้าง SmtpClient และใช้เพื่อส่งอีเมลโดยตรง เมื่อเปรียบเทียบกับวิธีสแตติกแบบเดิม ไม่มีโค้ดอีกต่อไป เพื่อนๆในนี้อาจจะอยากถาม? ข้อมูลบัญชี SMTP มาจากไหน? ในความเป็นจริง คุณสามารถแก้ไขข้อบกพร่องได้ ในขณะนี้ คุณลักษณะในวัตถุ m_smtpClient เป็นค่าที่กำหนดค่าไว้ในไฟล์การกำหนดค่าก่อนหน้าของเรา เมื่อกำหนดค่า SmtpClient ใหม่ ค่าภายใต้ส่วนการกำหนดค่า system.net จะถูกอ่านโดยอัตโนมัติ หากผู้ใช้กำหนดค่าข้อมูล smtp ค่านั้นจะถูกถ่ายโอนไปยังออบเจ็กต์ SmtpClient ปัจจุบันโดยอัตโนมัติ จากนั้นใช้เพื่อส่งอีเมล การส่งอีเมลใน .NET 2.0 เป็นงานที่หนักมากและมีความเสถียรมาก
สรุป: แม้ว่าภายใต้ .NET 2.0 แต่การใช้ System.Web.Mail ในการส่งอีเมลนั้นง่ายมาก และคุณจะได้รับข้อมูลข้อยกเว้นโดยละเอียดเพิ่มเติมเมื่อเกิดข้อผิดพลาด แต่บางครั้งปัญหาอาจทำให้คุณสับสนได้ สิ่งที่พบบ่อยที่สุดที่เกิดขึ้นคือ เมื่อเครื่องของคุณติดตั้งไฟร์วอลล์ป้องกันไวรัส คุณอาจไม่สามารถส่งอีเมลได้ แต่ข้อความแจ้งจะป้องกันไม่ให้คุณวินิจฉัยปัญหา ผลกระทบหลักคืออีเมลถูกปฏิเสธ สถานการณ์นี้เกิดขึ้นเนื่องจากไฟร์วอลล์ปฏิเสธการใช้พอร์ต 25 ของเรา ส่งผลให้ไม่สามารถสื่อสารกับเซิร์ฟเวอร์ SMTP ได้ตามปกติ วิธีแก้ไขคือปิดมันไป ผมเชื่อว่ามีหลายกรณีบนอินเทอร์เน็ต อีกประเด็นที่ต้องใส่ใจเป็นพิเศษคือเครื่องในการส่งอีเมลจะต้องเชื่อมต่อโดยตรงกับเครือข่ายภายนอก เนื่องจากบริษัทเข้าถึงอินเทอร์เน็ตผ่านพรอกซี จึงน่าประทับใจอย่างยิ่ง มีอีกสิ่งหนึ่งที่ควรทราบในโค้ดด้านบน ค่า From ของออบเจ็กต์ MailMessage จะต้องเหมือนกับค่า From ในไฟล์การกำหนดค่า ดูเหมือนว่าไม่จำเป็นต้องตั้งค่าที่นี่
โอเค นี่คือโค้ด ฉันหวังว่ามันจะเป็นประโยชน์กับคุณ http://hjf1223.cnblogs.com/archive/2006/07/06/444716.html