關於透過 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

***********************************************************************************

 

 

 

 

ASP.NET (Web Form) 遠距教學、課程完整內容 影片上網! 
歡迎在家自修、學習 

***本課程是「事先錄影」的影片。繳費後就能觀賞!*** 

繳費後,看完第一天課程  。如果不滿意,不需理由,可全額退費!

 

我將思想傳授他人, 他人之所得,亦無損於我之所有;

猶如一人以我的燭火點燭,光亮與他同在,我卻不因此身處黑暗。----Thomas Jefferson

寫信給我--  mis2000lab (at) yahoo.com.台灣  或是  school (at) mis2000lab.net

................   facebook社團   https://www.facebook.com/mis2000lab   ......................

................   Google+   https://plus.google.com/100202398389206570368/posts ........

................  YouTube (ASP.NET) 線上教學影片  http://goo.gl/rGLocQ

, , , , , , , , , ,
創作者介紹

MIS2000 Lab -- ASP.NET專題實務 / 線上教學文件

MIS2000 Lab 發表在 痞客邦 PIXNET 留言(0) 人氣()