Send mail have text and image content.
การเขียนโปรแกรมสามารถส่งเมลล์ที่เป็๋นข้อความได้ตามปกติอยู่แล้ว มีอยู่วันนึงต้องทำการส่งเมลล์โดยให้ทำการแนบไฟล์ที่เป็นรูปภาพเข้าไปด้วย แต่รูปนั้นต้องเป็นรูปที่แสดงอยู่ในลักษณะอยู่ในเนื้อข้อความเลย โดยที่ไม่ต้อง Double Click เพื่อดูรูปนั้นๆ
วันนี้จึงจะมาแชร์โปรแกรมให้ดูกันว่าเขียนยังไง โดยมีทั้งสองแบบเลย แบบที่1 คือรูปที่นำมาแสดงจากไฟล์ และแบบที่2 คือรูปที่นำมาแสดงจากฐานข้อมูล ดังนี้1. ทำการนำเข้า Library ที่ต้องการใช้งานก่อน
Import System.net.mail
2. กำหนดตัวแปรที่จำเป็นต้องใช้ในการส่งเมลล์
Dim myMail As New MailMessage()
Dim MailClient As New SmtpClient("smtp.company.com")
Dim myBody As String = ""
myMail.From = New MailAddress("prompratan@gmail.com", "Prompratan Nakajakawan")
myMail.To.Add("prompratan@gmail.com")
myMail.IsBodyHtml = True
3. กำหนด Subject ตามใจชอบ
myMail.Subject = "This is e-mail advanced feature..."
myMail.Subject = "This is e-mail advanced feature..."
4. กำหนด Body ตามใจชอบ แต่ถ้าต้องการให้ส่วนไหนเป็นรูปให้ใส่ดังนี้ <img src="cid:var_name" /> เป็นต้น
myBody = "<b>This</b> is content.<img height=100 src=cid:companylogo width=100 ><img src=cid:companylogo2 ><img src=cid:companylogo3 >"
5. กำหนดตัวแปร htmlView ที่ใช้ในการแสดงผลรูปพร้อมข้อความ
Dim htmlView As AlternateView = AlternateView.CreateAlternateViewFromString(myBody, Nothing, "text/html")
6. กำหนดการติดต่อฐานข้อมูล เพราะเรามีรูปในฐานข้อมูลที่ต้องแสดงผลด้วย
Dim conn As New SqlConnection(ConfigurationManager.ConnectionStrings("conn").ConnectionString)
Dim sql As String = " select picture from table "
Dim da As SqlDataAdapter
Dim ds As New DataSet
da = New SqlDataAdapter(sql, conn)
da = New SqlDataAdapter(sql, conn)
da.Fill(ds, "tbl")
7. นำรูปในฐานข้อมูลแสดงใน ข้อ4.
' ## Generate picture from database
' ## Generate picture from database
Dim strMem As System.IO.MemoryStream = New System.IO.MemoryStream(CType(ds.Tables("tbl").Rows(0)("picture"), Byte()))
Dim logo As New LinkedResource(strMem)
logo.ContentId = "companylogo"
htmlView.LinkedResources.Add(logo)
' ## Generate picture from database
Dim strMem2 As System.IO.MemoryStream = New System.IO.MemoryStream(CType(ds.Tables("tbl").Rows(1)("picture"), Byte()))
Dim logo2 As New LinkedResource(strMem2)
logo2.ContentId = "companylogo2"
htmlView.LinkedResources.Add(logo2)
8. นำรูปที่เป็นไฟล์แสดงใน ข้อ4.
' ## Generate picture from file
' ## Generate picture from file
Dim logo3 As New LinkedResource("c:\a.jpg")
logo3.ContentId = "companylogo3"
htmlView.LinkedResources.Add(logo3)
9. ส่งจริงกันเลย ข้อความพร้อมรูปในอีเมลล์ของเรา
myMail.AlternateViews.Add(htmlView)
myMail.AlternateViews.Add(htmlView)
MailClient.Send(myMail)
10. หลังจากที่ส่งเมลล์แล้วให้ทำการทำลาย Connection ทิ้งด้วย ไม่อย่างนั้นถ้าเราต้องการส่งอีเมลล์จำนวนมากๆออกจากระบบจะโดน SMTP Server เตะออก เนื่องจากส่งเยอะเกินกว่าที่ Server กำหนดไว้ได้ (ทำให้อีเมลล์อาจจะส่งไปได้ไม่ครบถ้วน)
MailClient.Dispose()
10. หลังจากที่ส่งเมลล์แล้วให้ทำการทำลาย Connection ทิ้งด้วย ไม่อย่างนั้นถ้าเราต้องการส่งอีเมลล์จำนวนมากๆออกจากระบบจะโดน SMTP Server เตะออก เนื่องจากส่งเยอะเกินกว่าที่ Server กำหนดไว้ได้ (ทำให้อีเมลล์อาจจะส่งไปได้ไม่ครบถ้วน)
MailClient.Dispose()
Comments
Post a Comment