[習題]透過 ASP.NET寄信(發信、發Mail),System.Net.Mail.MailDefinition 類別

摘要:[習題]透過 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.主講   事先錄好的影片,並非上課側錄!   觀看時,有如「一對一」面對面講課