2010年9月17日 星期五

在 Console Mode下, 透過 FreeSMTP 定期發通知信

要定期的去發通知信,可以利用 SQL Server 的 SQL Server Agent 或 Windows 排程來觸發。而發信的工具可以使用 SQL Mail 或 FreeSMTP。

最近剛好有機會測試了 FreeSMTP 搭配 Windows 排程的方案。原先主要是想透過撰寫 thread 來完成定期發信功能,但考量在不增加系統 loading 與避免該 thread 莫名被終止,所以才考慮用 windows 排程。然而,原先的 ASP.Net 專案如何用 windows 排程來觸發呢?是個難題。所以,我將發信的功能改寫成 Console Mode,也就是可以用 DOS 指令來執行。但,FreeSMTP 可以用 DOS 指令來發信嗎?猶豫了許久,就寫了一段程式來測試。

首先,建立了一個 console mode 的專案,並在該專案加入了 FreeSMTP.Net.dll 的參考。

接著 Imports Quiksoft.FreeSMTP.SMTP
接著撰寫 DoSend( ) 事件以供 Main( )來叫用。

以下是程式碼節錄:


Imports Quiksoft.FreeSMTP.SMTP

Module Module1

    Sub Main()
        DoSend()
    End Sub

    'Sub that does the sending.
    Sub DoSend()

        '宣告 SMTP
        Dim objSMTP As Quiksoft.FreeSMTP.SMTP

        '設定 SMTP Server        
        objSMTP = New Quiksoft.FreeSMTP.SMTP("3probe.com.tw")

        '設定 信件內容
        Dim objMsg As Quiksoft.FreeSMTP.EmailMessage = New Quiksoft.FreeSMTP.EmailMessage("paladin@3probe.com.tw", _
                                    "paladinlee@3probe.com.tw", _
                                    "paladin", _
                                    "Dear paladin,
這封是我特別給您的 :測試信。", _
                                    Quiksoft.FreeSMTP.BodyPartFormat.HTML)
        '設定信件編碼
        objMsg.CharsetEncoding = System.Text.Encoding.GetEncoding("BIG5")

        '發信
        objSMTP.Send(objMsg)


    End Sub


End Module


直接測試這段程式,信件可以正常寄出,接著自己也加入一項 windows 排程,把內容設定為執行剛剛撰寫好的 console mode 專案的 .exe 執行檔。現下自我感覺良好中,可以開開心心去泡茶了...

沒有留言:

張貼留言