邵雨舟
(北京經濟管理職業學院,北京 100105)
在我們開發應用系統中經常遇到這種情況,一份相同內容的文件要同時發送給多個人,例如每月向單位員工發送工資明細單,可以通過郵件群發的功能來發送這些信息,這樣能夠節省大量的人力物力,而且方便迅速。
我們在開發“學院畢業生就業跟蹤系統”過程中,開發了調查表發送的郵件群發模塊,可以通過組合查詢功能選擇發送調查表的對象,然后編寫調查表內容(也可以直接選擇事先設計好的調查表文檔),通過獲取用戶表中的郵箱地址字段的值,直接向多個用戶發送調查數據。
通過SMTP協議所指定的服務器,就可以把郵件寄到收信人的服務器上了。
跟大多數應用層協議一樣,SMTP也存在兩個端:在發信人的郵件服務器上執行的客戶端和在收信人的郵件服務器上執行的服務器端。如果用戶使用用戶代理軟件(Windows上常見的用戶代理是Foxmail和Outlook Express),用戶只需要進行簡單的發送操作就可完成郵件的發送,用戶代理軟件提供一個友好的用戶界面,它提取用戶在其界面填寫的各項信息,生成一封符合SMTP等郵件標準的郵件,然后采用SMTP協議將郵件發送到發送端郵件服務器;如果用戶使用Web郵件方式,則全部的實現過程都由郵件服務器完成。
學院就業管理部門和學院系部為了解畢業生的職業發展情況,制定了每半年向選定的畢業生自動發送一封電子郵件,了解該畢業生的職業發展信息;另外各系部出于自己的專業發展的需求,也會定期向選擇的畢業生和用人單位發送專業調查表,然后對反饋的信息進行分析整理,作為專業改革和專業建設的重要依據。
系統中的郵件群發的功能模塊,基本工作過程是這樣的:
(1)首先通過組合查詢功能,選擇調查對象;
(2)從獲取的對象列表中選擇發送電子郵件的學生或企業名單;
(3)編寫郵件內容;
(4)發送。
整個系統是采用基于C#的ASP.NET技術開發的,數據庫使用的是SQLServer數據庫。
下面分別介紹設計思路和實現過程。
在數據庫中使用表來保存全部畢業生的信息,其中包含有畢業生Email字段。
閱讀能力是學習能力中基礎而重要的構成部分,學生具備了優越的閱讀能力,才能進行復雜內容的學習,從而提升個人綜合能力。在當下的小學教育中,已經有越來越多的語文老師重視培養學生的閱讀能力,這影響著閱讀教學手段的不斷更新,推動著小學閱讀教學實踐的發展進步。
首先通過查詢條件的界面選擇發送對象,操作界面如圖1所示:
圖1 畢業生信息組合查詢界面
其中包含的控件依次為:
包含查詢字段的下拉列表框(field_name)、包含關系運算符的下拉列表框(operate)、輸入查詢值的文本框(query_value)、選擇邏輯運算符的下拉列表框(logic_operate)、3個命令按鈕控件。
將需要查詢的字段綁定到查詢字段的下拉列表框中,在沒有選中要查詢的字段之前,關系運算符的下拉列表框、輸入查詢值的文本框、邏輯運算符的下拉列表框、執行查詢命令按鈕的Enabled屬性都為false。
每次查詢開始之前,先定義一個變量來保存最終得到的Select查詢命令:
第一步:要選擇查詢的字段名,在選中要查詢的字段之后,關系運算符的下拉列表框可以使用了:
select_command=select_command+field_name.SelectedValue+"";
第二步:選擇關系運算符。選中某個運算符之后,輸入查詢值的文本框就可以使用了:
logic_operate.Focus();
第四步:如果選擇邏輯運算符,則執行下面語句,然后重復執行第一步;否則直接按“執行查詢”命令按鈕,執行第五步,開始查詢。
第五步:單擊“執行查詢”命令按鈕開始查詢,并將查詢結果綁定到GridView控件(ID∶result)上。最終獲得的查詢結果如下圖2所示:
圖2 組合查詢的結果
在獲得查詢名單列表后,通過復選框控件(ID∶select)獲取要發送調查表的對象,然后單擊“編寫郵件”命令按鈕。將選中學生姓名、email、學號、登錄密碼等信息添加到一個臨時數據表中。
Session["select_table"]=dt;//通過Session對象在其它地方使用這個臨時數據表
else
Response.Write("<script>alert(‘您沒有選擇要發送郵件的學生...’)</script>");
實現發送功能的是利用了一個Windows自帶的一個發郵件的組件∶cdosys,在 C∶WINDOWSsystem32下有一個cdosys.dll的動態鏈接庫文件,利用這個組件,我們可以連接SMTP服務器,通過指定的用戶名/密碼驗證發送郵件。
在vs的資源管理器添加引用,添加Microsoft CDO For Exchange 2000 Library的COM組件。
通過使用CDO.Message對象,創建我們要發送的郵件對象,CDO.Message msg=new Message(),其中:
msg.Form∶發件人郵件地址
msg.To∶收件人郵件地址
msg.Subject∶郵件標題
msg.HtmlBody∶郵件主體,比如"<html><body>"+"郵件信息"+"</body></html>";
msg.AddAttachment()∶添加附件
msg.Send()∶發送郵件
單擊“編寫郵件”命令按鈕,進入如圖3所示的界面:
圖3 電子郵件的發送界面
從列表選擇使用的SMTP服務器(ID∶email_server),并填寫發送人的ID和密碼以及郵件內容。
具體實現發送郵件功能代碼如下所示:
//*獲取文件夾的物理目錄
filename=System.IO.Path.GetFileName(send_file.
DataTable dt=(DataTable)Session["select_table"];//獲取前面得到的學生名單數據表
Msg.HTMLBody="<html><body>"+send_email_xm+":請你用以下賬號登陸學院就業網站并后填寫調查表,謝謝你。<br/>用戶名∶"+dt.Rows[i]["student_id"].ToString()+"密碼∶"+dt.Rows[i]["student_pwd"].ToString()+"<br/>"+send_txt.Text+"</body></html>";
//以下語句,設置發送參數,包括郵件服務器,用戶名,密碼
[1]王淑梅.基于C#的郵件群發的原理和實現[J].計算機與網絡,2008,19.