本文介紹用如何 C# 實現 SMTP 發送郵件的功能
一、功能與規劃:
程序分為3個部分:
1. WebService: 提供用戶 WebService 接口調用, 檢查用戶參數,返回錯誤提示,將參數存儲到數據庫.
2. 數據庫, 存儲需要發送的郵件數據(包含收件人、主旨、郵件內容、發送時間等), 與發送log
3. 后臺發送郵件程序,并設置 windows 排程1分鐘執行一次,
后臺發送郵件程序, 每天發送一次日報表給管理員, 將1天內的發送錯誤數通知管理員, 以便了解有無異常并分析原因
實現思路:
1. 排程: 數據庫提供2個欄位 SendTimeString [字符串] 和 SendTime [日期型]
判斷 SendTimeString 的內容:
0 : 馬上發送, 在 SendTime 欄位寫入當前時間
1 : 后面接一個指定的時間, 表示在該時間發送
2 : 后面接 D數值/H數值/M數據,分別表示在當前時間的基礎上延時n天/n小時/n分鐘后發送
3 : 后面接分鐘數, 如: 30 表示在下一個半小時,如果當前時間為 08:40, 那發送時間為 9:30, 如果當前時間為 8:10,則發送時間為 8:30
2. 附件:WebService 接收 3 個參數 attString / attName / attDate, 分別表示文件內容字符串,文件名字符串,文件日期字符串(建立時間/修改時間/存取時間)
如果用戶需要發送附件,則需要把等發送的文件轉換為 16 進制的字符串, 比如文件內容 0123456789,
用16進制字符串表達為 30313233343536373839
WebService 接收到附件后將文件存儲在 webservice 所在的服務器上, 排程發送郵件時,再添加附件發送。
3. 日志記錄:
記錄每次 webservice 調用事件、后臺排程的執行結果、發送每封郵件的結果到數據庫,以便追溯
4. WebService 權限驗證
調用 WebService 時驗證用戶提供的用戶名和密碼及綁定的 IP 地址是否與數據庫中預先設定的數據相匹配,只有驗證通過才允許發送郵件。
二、實現步驟:
1. 建表
1) USERS 表: 用來存放用戶名、密碼及IP地址
2) TASK 表: 用來存放 WebService 接收到的任務列表
3) TASK_DETAIL 表: 用來關聯 TASK 表的 TASK ID,存放對應的每一位收件人是否發送成功
4) RUN_LOG 表: 每一次執行后臺程式產生一條記錄,存放發送成功的 TASK ID 列表及是否發生錯誤。
5) DEY_REPORT 表: 每天用 SMTP 發送報表的內容(檢查 RUN_LOG表是否出現錯誤)給SMTP管理員
6) CONFIG 表: 存放系統數據 (比如:系統管理員郵箱、SMTP 服務器地址、等等)
2.開發 WebService
代碼省略.
3.開發后臺 windows 應用程序
代碼省略
其它說明:
1. 調用 WEBSERVICE 時需要將文件轉換為 16進制字符串
2. 調用 WEBSERVICE 時可以把附件的建立時間/修改時間/存取時間通過字符串傳給 Webservice, 保存附件時設置附件的時間,
但是,使用SMTP時發送附件給 Lotus Notes 服務器后, 使用 Lotus Notes 下載附件時,附件的建立時間變成了當前時間,
所以,這個問題還沒有好的解決方法。