วันจันทร์ที่ ๑๑ พฤษภาคม พ.ศ. ๒๕๕๒

ส่งอีเมล์บน .NET 2.0 (Sending e-mail with .NET 2.0)

เรื่องการเขียนโปรแกรมส่ง e-mail ก็เป็นงานที่ต้องเจอบ่อยๆ ครับ พอดีมีคนถามเข้ามาเลยจะพยายามรวบรวมวิธีการส่งอีเมล์แบบต่างๆ มาให้ดูครับ เดิมทีใน .NET เวอร์ชั่น 1.0/1.1 กลุ่มคลาสที่เกี่ยวกับอีเมล์จะอยู่ในเนมสเปส System.Web.Mail ซึ่งไมโครซอฟท์คงพิจารณาแล้วว่า ไม่เหมาะสมแน่ถ้าให้คลาสเกี่ยวกับอีเมล์อยู่ใน System.Web เพราะมีความหมายเป็นนัยว่างานด้านอีเมล์เกี่ยวกับงานเว็บเท่านั้น ทำให้เวลาพัฒนา win app., console ฯลฯ ต้อง add reference มาเสมอ ดังนั้นใน .NET เวอร์ชั่น 2.0 ทางไมโครซอฟท์จึงเปลี่ยนให้คลาสเกี่ยวกับอีเมล์ทั้งหมดไปอยู่ในเนมสเปส System.Net เป็นการบอกว่า งานด้านอีเมล์เป็นงานด้าน network ดังนั้นเวลาอ้างเนมสเปสจึงใช้เป็น System.Net.Mail แทน ซึ่งดูเหมาะสมดีครับ
Imports System.Net
....

Dim Mail As New MailMessage()

Mail.To.Add(New MailAddress("TO1@email.com"))
Mail.To.Add(New MailAddress("TO2@email.com"))
....
Mail.CC.Add(New MailAddress("CC1@email.com"))
Mail.CC.Add(New MailAddress("CC2@email.com"))
....
Mail.BCC.Add(New MailAddress("BCC1@email.com"))
Mail.BCC.Add(New MailAddress("BCC2@email.com"))
....
Mail.From = New MailAddress("FROM@email.com")
Mail.Subject = "......"
Mail.Body = "......"
Mail.IsBodyHtml = True

Dim Smtp As New SmtpClient("smtp.email.com")
Smtp.Send(Mail)

ชื่อ SMTP server ใช้ IP แทนก็ได้นะครับ
กรณีที่ SMTP server มีการตรวจสอบสิทธิ์ ก็ให้เพิ่มโค้ดในส่วน SmtpClient เป็น
Dim Smtp As New SmtpClient("smtp.email.com")
Smtp.DeliveryMethod = SmtpDeliveryMethod.Network
Smtp.Credentials = New NetworkCredential("UserName", "Password")
Smtp.Send(Mail)

ถ้า SMTP Server กำหนดให้ใช้ SSL\TLS (SSL ใช้ port หมายเลข 465 ,TLS ใช้ port หมายเลข 587) เพิ่ม properties ใช้อ็อบเจ็คดังนี้

Dim Smtp As New SmtpClient("smtp.email.com")
Smtp.DeliveryMethod = SmtpDeliveryMethod.Network
Smtp.Credentials = New NetworkCredential("UserName", "Password")
Smtp.EnableSsl = True
Smtp.Port = 587    '465
Smtp.Send(Mail)

บางคนอาจจำเป็นต้องเปลี่ยน SMTP บ่อยๆ หรือเปลี่ยน SMTP User บ่อยๆ ก็อาจจะระบุรายละเอียดของ SMTP Server ไว้ใน Web.config หรือ app.config เลยก็ได้ครับ
<configuration>
....
<system.net>
<mailsettings>
<smtp deliverymethod="Network">
<network host="smtp.email.com" username="..." password="..." port="..." />
</smtp>
</mailsettings>
</system.net>
....
</configuration>
<-- บทความกำลังเขียนต่อ -->

แหล่งข้อมูล :
ASPAlliance.com
dotnetcurry.com
DaniWeb
velocityreviews
SMTP gmail outlook
SMTP gmail Thunderbird 2.0
geekswithblogs.net
astahost.com