摘要:[習題]透過 ASP.NET寄信(發信、發Mail),System.Net.Mail.MailDefinition 類別
關於透過 ASP.NET寄信(發信、發Mail),這兩篇文章很值得參考:
System.Web.Mail升級至System.Net.Mail的第一個問題
http://www.dotblogs.com.tw/jeff-yeh/archive/2008/04/09/2656.aspx
System.Web.Mail 太陽春、System.Net.Mail 有問題
http://blog.miniasp.com/post/2008/02/05/SystemWebMail-too-weak-and-SystemNetMail-has-problem.aspx
今天我在 MSDN找到 MailDefinition 類別
--允許控制項從文字檔或字串建立電子郵件訊息,此類別無法被繼承。
http://msdn.microsoft.com/zh-tw/library/system.web.ui.webcontrols.maildefinition.aspx
命名空間: System.Web.UI.WebControls
組件: System.Web (在 System.Web.dll 中)
控制項可以使用 MailDefinition 類別,從包含電子郵件訊息主體的 文字檔或 字串建立 MailMessage 物件。
MailDefinition 類別可以用於簡化建立要由控制項傳送之預先定義的電子郵件訊息。
如果您 不 想使用控制項傳送電子郵件,請參閱 System.Net.Mail 類別。
由 MailDefinition 類別建立的 MailMessage 物件使用 SmtpClient 類別的 Send 方法傳送。
若要能夠傳送電子郵件,您必須在 Web.config 檔中設定 SMTP 電子郵件伺服器。
Web.Config檔。 下面「黃色底色」的地方,可以有三種設定。
請看 http://msdn.microsoft.com/zh-tw/library/ms164240.aspx
<configuration>
<system.net>
<mailSettings>
<smtp deliveryMethod="Network" from="ben@contoso.com">
<network host="localhost" port="25" defaultCredentials="true" />
</smtp>
</mailSettings>
</system.net>
</configuration>
MSDN提供的這個範例不錯。(VB、C#都有)
有兩個功能:
1. 按一下 [建立電子郵件並僅顯示訊息內容],以建立電子郵件訊息並在 Web 網頁中顯示 MailMessage 物件的屬性。
2. 按一下 [建立電子郵件並且傳送],以在 Web 網頁中顯示電子郵件訊息,並使用網際網路電子郵件將訊息傳送至收件者。
範例都是來自 微軟 MSDN網站 -- http://msdn.microsoft.com/zh-tw/library/system.web.ui.webcontrols.maildefinition.aspx
小弟只是為了自己的需要,作了一些註解而已。
'== 重點!! ================
'-- 必須自己宣告 NameSpace!!
Imports System.Net.Mail '-- MailMessage會用到。
Imports System.Reflection
Imports System.Collections.Specialized
'=========================
'== 建立電子郵件並僅顯示訊息內容
Protected Sub createEMail_Click(sender As Object, e As System.EventArgs) Handles createEMail.Click
Dim msg As MailMessage = CreateMessage()
'-- System.Net.Mail.MailMessage類別
'-- MailMessage類別的執行個體 (Instance) 是用來建構電子郵件訊息,而這些訊息會使用 SmtpClient類別傳送到 SMTP Server進行傳遞。
'-- 參考來源 http://msdn.microsoft.com/zh-tw/library/system.net.mail.mailmessage(v=VS.100).aspx
PlaceHolder1.Controls.Add(ShowMessage(msg)) '-- 顯示 E-Mail訊息內容
End Sub
'== 建立電子郵件並且傳送
Protected Sub sendEMail_Click(sender As Object, e As System.EventArgs) Handles sendEMail.Click
Dim msg As MailMessage = CreateMessage()
PlaceHolder1.Controls.Add(ShowMessage(msg))
'--若要能夠傳送電子郵件,您必須在 Web.config 檔中設定 SMTP 電子郵件伺服器。
'--如需詳細資訊,請參閱 http://msdn.microsoft.com/zh-tw/library/ms164240.aspx
Try
Dim sc As SmtpClient = New SmtpClient()
sc.Send(msg) '-- 傳送 E-Mail
Catch ex As Exception
errorMsg.Text = ex.ToString()
End Try
End Sub
'===========================================================
'== 顯示 訊息內容
Function ShowMessage(ByVal msg As MailMessage) As HtmlTable
Dim table As HtmlTable = New HtmlTable
Dim topRow As HtmlTableRow = New HtmlTableRow
Dim fieldHeaderCell As HtmlTableCell = New HtmlTableCell
Dim valueHeaderCell As HtmlTableCell = New HtmlTableCell
fieldHeaderCell.InnerText = "Field"
topRow.Cells.Add(fieldHeaderCell)
valueHeaderCell.InnerText = "Value"
topRow.Cells.Add(valueHeaderCell)
table.Rows.Add(topRow)
For Each p As PropertyInfo In msg.GetType().GetProperties()
Dim row As HtmlTableRow = New HtmlTableRow
Dim labelCell As HtmlTableCell = New HtmlTableCell
Dim valueCell As HtmlTableCell = New HtmlTableCell
If (Not ((p.Name = "Headers") Or _
(p.Name = "Fields") Or _
(p.Name = "Attachments"))) Then
labelCell.InnerText = String.Format("{0}", p.Name)
row.Cells.Add(labelCell)
valueCell.InnerText = String.Format("{0}", p.GetValue(msg, Nothing))
row.Cells.Add(valueCell)
End If
table.Rows.Add(row)
Next
Return table '-- 回傳一個 ASP.NET的 HTML表格
End Function
Function CreateMessage() As MailMessage
Dim md As MailDefinition = New MailDefinition
'-- 參考資料: http://msdn.microsoft.com/zh-tw/library/system.web.ui.webcontrols.maildefinition.aspx
md.BodyFileName = sourceMailFile.Text '--文字檔的檔名
md.CC = sourceCC.Text
md.From = sourceFrom.Text
md.Subject = sourceSubject.Text
If sourcePriority.SelectedValue = "Normal" Then
md.Priority = MailPriority.Normal
ElseIf sourcePriority.SelectedValue = "High" Then
md.Priority = MailPriority.High
ElseIf sourcePriority.SelectedValue = "Low" Then
md.Priority = MailPriority.Low
End If
Dim replacements As ListDictionary = New ListDictionary
'-- 事先定義了兩個字串<%To%>與<%From%>,代表收件人、發信人。
replacements.Add("<%To%>", sourceTo.Text)
replacements.Add("<%From%>", sourceFrom.Text)
If useFile.Checked Then
Dim fileMsg As MailMessage
fileMsg = md.CreateMailMessage(sourceTo.Text, replacements, Me)
'-- 從 [文字檔]建立要透過 SMTP傳送的電子郵件訊息。
'-- http://msdn.microsoft.com/zh-tw/library/0002kwb2.aspx
'recipients型別: System.String()
' 訊息收件者的逗號分隔清單。
'replacements型別: System.Collections.IDictionary()
' IDictionary,包含字串及其取代字串的清單。
'owner型別: System.Web.UI.Control()
' 擁有這個 MailDefinition 的 Control。 VB語法為Me,C#語法為 this。
Return fileMsg
Else
Dim textMsg As MailMessage
textMsg = md.CreateMailMessage(sourceTo.Text, replacements, sourceBodyText.Text, Me)
'-- 使用 [文字]建立要透過 SMTP傳送的電子郵件訊息。
'-- http://msdn.microsoft.com/zh-tw/library/ms156159.aspx
'recipients型別: System.String()
' 收件者的逗號分隔清單。
'replacements型別: System.Collections.IDictionary()
' IDictionary,包含字串及其取代字串的清單。
'body型別: System.String()
' 電子郵件訊息的文字。
'owner型別: System.Web.UI.Control()
' 擁有這個 MailDefinition 的 Control。 VB語法為Me,C#語法為 this。
Return textMsg '-- 回傳值的「型態」System.Net.Mail.MailMessage
End If
End Function
**********************************************************************************
很多人想透過 Web程式來寄發「電子報」、「會員通知信」
建議您看看這篇文章
很多問題,不是IT的問題能解的....... Orz
***********************************************************************************
我將思想傳授他人, 他人之所得,亦無損於我之所有;
猶如一人以我的燭火點燭,光亮與他同在,我卻不因此身處黑暗。----Thomas Jefferson
線上課程教學,遠距教學 (Web Form 約 51hr) https://dotblogs.com.tw/mis2000lab/2016/02/01/aspnet_online_learning_distance_education_VS2015
線上課程教學,遠距教學 (ASP.NET MVC 約 140hr) https://dotblogs.com.tw/mis2000lab/2018/08/14/ASPnet_MVC_Online_Learning_MIS2000Lab
寫信給我,不要私訊 -- mis2000lab (at) yahoo.com.tw 或 school (at) mis2000lab.net
(1) 第一天 ASP.NET MVC5 完整影片(5.5小時 / .NET 4.x版)免費試聽。影片 https://youtu.be/9spaHik87-A
(2) 第一天 ASP.NET Core MVC 完整影片(3小時 / .NET Core 6.0~8.0)免費試聽。影片 https://youtu.be/TSmwpT-Bx4I
[學員感言] mis2000lab課程評價 - ASP.NET MVC , WebForm 。 https://mis2000lab.medium.com/%E5%AD%B8%E5%93%A1%E6%84%9F%E8%A8%80-mis2000lab%E8%AA%B2%E7%A8%8B%E8%A9%95%E5%83%B9-asp-net-mvc-webform-77903ce9680b
ASP.NET遠距教學、線上課程(Web Form + MVC)。 第一天課程, "完整" 試聽。
......... facebook社團 https://www.facebook.com/mis2000lab ......................
......... YouTube (ASP.NET) 線上教學影片 https://www.youtube.com/channel/UC6IPPf6tvsNG8zX3u1LddvA/
Blog文章 "附的範例" 無法下載,請看 https://dotblogs.com.tw/mis2000lab/2016/03/14/2008_2015_mis2000lab_sample_download
請看我們的「售後服務」範圍(嚴格認定)。
......................................................................................................................................................
ASP.NET MVC => .NET Core MVC 線上教學 ...... 第一天課程 完整內容 "免費"讓您評估 / 試聽
[遠距教學、教學影片] ASP.NET (Web Form) 課程 上線了!MIS2000Lab.主講 事先錄好的影片,並非上課側錄! 觀看時,有如「一對一」面對面講課。