1: usingSystem;
2: usingSystem.Collections.Generic;
3: usingSystem.ComponentModel;
4: usingSystem.Data;
5: usingSystem.Drawing;
6: usingSystem.Text;
7: usingSystem.Windows.Forms;
8: usingSystem.Net.Mail;
9: usingSystem.Net.Mime;
10: usingSystem.IO;
11:
12: namespaceSendEmail
13: {
14: publicpartialclassfrm_Main:Form
15: {
16: #regionfields
17: publicbool_user =false;
18: publicbool_password =false;
19: publicbool_ReceiveEmail =false;
20: #endregion
21:
22: #regionconstructor(s)
23: publicfrm_Main()
24: {
25: InitializeComponent();
26: InitEvent();
27: }
28: #endregion
29:
30: #regionInitEvent
31: publicvoidInitEvent()
32: {
33: this.txtUser.Validating +=newCancelEventHandler(txtUser_Validating);
34: this.txtReceiveEmail.Validating +=newCancelEventHandler(txtReceiveEmail_Validating);
35: this.txtPassword.Validating +=newCancelEventHandler(txtPassword_Validating);
36: }
37: #endregion
38:
39: #regionmethods
40: #regionSendEmail
41: ///<summary>
42: ///进行邮件发送
43: ///</summary>
44: publicvoidSendEmail(stringEmialReceive)
45: {
46: try
47: {
48: boolispass =this.ValidateData();
49: if(ispass ==false)return;
50: //确认smtp服务器地址。实例化一个Smtp客户端
51: System.Net.Mail.SmtpClientclient =newSmtpClient(this.cobSmtp.Text);
52: //生成一个发送地址
53: stringstrSmtp =this.cobSmtp.Text.Substring(this.cobSmtp.Text.IndexOf('.') + 1);
54:
55: stringstrFrom =this.txtUser.Text.Trim() +"@"+ strSmtp;
56: //构造一个发件人地址对象
57: MailAddressfrom =newMailAddress(strFrom,this.txtSendUser.Text,Encoding.UTF8);
58: //构造一个收件人地址对象
59: MailAddressto =newMailAddress(EmialReceive,this.txtReceiveUser.Text.Trim(),Encoding.UTF8);
60:
61: System.Net.Mail.MailMessagemessage =newMailMessage(from, to);
62:
63:
64: //为message添加附件
65: foreach(TreeNodetnodeinthis.trvList.Nodes)
66: {
67: //得到文件名
68: stringfileName = tnode.Text;
69: //判断文件是否存在
70: if(File.Exists(fileName))
71: {
72: //构造一个附件对象
73: Attachmentattach =newAttachment(fileName);
74: //得到文件的信息
75: System.Net.Mime.ContentDispositiondisposition = attach.ContentDisposition;
76: disposition.CreationDate =File.GetCreationTime(fileName);
77: disposition.ModificationDate =File.GetLastWriteTime(fileName);
78: disposition.ReadDate =File.GetLastAccessTime(fileName);
79: message.Attachments.Add(attach);
80: }
81: else
82: {
83: MessageBox.Show("文件"+ fileName +"未找到!","信息提示",MessageBoxButtons.OK,MessageBoxIcon.Information);
84: }
85: }
86:
87: //添加邮件主题和内容
88: message.Subject =this.txtTitle.Text.Trim();
89: message.SubjectEncoding =Encoding.UTF8;
90: message.Body =this.txtContent.Text;
91: message.BodyEncoding =Encoding.UTF8;
92: message.IsBodyHtml =false;
93:
94: //设置邮件的信息
95: client.DeliveryMethod =SmtpDeliveryMethod.Network;
96: //如果服务器支持安全连接,则将安全连接设为true。
97: //gmail支持,163不支持,如果是gmail则一定要将其设为true
98: if(this.cobSmtp.Text =="smtp.163.com")
99: client.EnableSsl =false;
100: else
101: client.EnableSsl =true;
102: client.UseDefaultCredentials =false;
103:
104: //设置用户名和密码
105: stringusername =this.txtUser.Text.Trim();
106: stringpassword =this.txtPassword.Text.Trim();
107: System.Net.NetworkCredentialcredials =newSystem.Net.NetworkCredential(username, password);
108:
109: client.Credentials = credials;
110:
111: //发送邮件
112: client.Send(message);
113:
114: //MessageBox.Show("发送成功", "信息提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
115: //写入日志操作,提示哪封邮件已经发送成功
116: }
117: catch(Exceptionex)
118: {
119: //MessageBox.Show(ex.Message, "信息提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
120: //写入日志操作,提示哪封邮件没有发送成功
121: }
122: }
123: #endregion
124:
125: #regionValidateData
126: ///<summary>
127: ///校验数据是否成功
128: ///</summary>
129: ///<returns>true则表示数据校验通过,false表示校验不通过</returns>
130: publicboolValidateData()
131: {
132: this.txtUser_Validating(null,null);
133: this.txtPassword_Validating(null,null);
134: this.txtReceiveEmail_Validating(null,null);
135: if(_password ==false|| _ReceiveEmail ==false|| _user ==false)
136: returnfalse;
137: else
138: returntrue;
139:
140: }
141: #endregion
142: #endregion
143:
144: #regionEvent Handlers
145: #regionLoad handler for frm_Main
146: privatevoidfrm_Main_Load(objectsender,EventArgse)
147: {
148: //添加两个smtp服务器名称
149: this.cobSmtp.Items.Add("smtp.163.com");
150: this.cobSmtp.Items.Add("smtp.gmail.com");
151: //设置为下拉列表
152: this.cobSmtp.DropDownStyle =ComboBoxStyle.DropDownList;
153: //默认选中第一个选项
154: this.cobSmtp.SelectedIndex = 0;
155: this.txtUser.Text ="用户名";
156: this.txtSendUser.Text ="发件人姓名";
157: this.txtPassword.Text ="密码";
158: this.txtReceiveUser.Text ="收件人姓名";
159: this.txtReceiveEmail.Text ="收件人Email";
160: }
161: #endregion
162:
163: #regionClick handler for btnDel
164: privatevoidbtnDel_Click(objectsender,EventArgse)
165: {
166: if(this.trvList.SelectedNode !=null)
167: {
168: TreeNodetempNode =this.trvList.SelectedNode;
169: this.trvList.Nodes.Remove(tempNode);
170: }
171: else
172: {
173: MessageBox.Show("请选择要删除的附件!","信息提示",MessageBoxButtons.OK,MessageBoxIcon.Information);
174: }
175: }
176: #endregion
177:
178: #regionClick handler for btnAdd
179: privatevoidbtnAdd_Click(objectsender,EventArgse)
180: {
181: OpenFileDialogopenfile =newOpenFileDialog();
182: openfile.InitialDirectory =Application.StartupPath;
183: openfile.FileName ="";
184: openfile.RestoreDirectory =true;
185: openfile.Multiselect =true;//支持文件多选
186: //显示打开文件对话框,并判断是否单击了确定按钮
187: if(openfile.ShowDialog() ==DialogResult.OK)
188: {
189: //string fileName = openfile.FileName;
190: //this.trvList.Nodes.Add(fileName);
191: string[] fileNames = openfile.FileNames;
192: foreach(stringstrinfileNames)
193: {
194: this.trvList.Nodes.Add(str);
195: }
196: }
197: }
198: #endregion
199:
200: #regionClick handler for btnSend
201: privatevoidbtnSend_Click(objectsender,EventArgse)
202: {
203: boolvalidatePass =this.ValidateData();
204: if(validatePass ==false)return;
205: string[] receives =this.txtReceiveEmail.Text.Trim().Split(newchar[] {';',','});
206: //支持群发,输入格式为:abc@163.com;def@hotmail.com,ghi@qq.com,如果觉得群发比较慢,可以考虑使用多线程
207: foreach(stringstrinreceives)
208: {
209: this.SendEmail(str.Trim());
210: }
211: MessageBox.Show("发送完成!","信息提示",MessageBoxButtons.OK,MessageBoxIcon.Information);
212: }
213: #endregion
214:
215: #regionValidating handler for txtPassword
216: voidtxtPassword_Validating(objectsender,CancelEventArgse)
217: {
218: if(this.txtPassword.Text ==string.Empty)
219: {
220: this.errorProvider.SetError(this.txtPassword,"密码不能为空!");
221: _password =false;
222: }
223: else
224: {
225: this.errorProvider.SetError(this.txtPassword,"");
226: _password =true;
227: }
228: }
229: #endregion
230:
231: #regionValidating handler for txtReceiveEmail
232: voidtxtReceiveEmail_Validating(objectsender,CancelEventArgse)
233: {
234: System.Text.RegularExpressions.Regexrex =newSystem.Text.RegularExpressions.Regex(@"\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*");
235: if(!rex.IsMatch(this.txtReceiveEmail.Text.Trim()))
236: {
237: this.errorProvider.SetError(this.txtReceiveEmail,"邮箱地址格式不正确!");
238: _ReceiveEmail =false;
239: }
240: else
241: {
242: this.errorProvider.SetError(this.txtReceiveEmail,"");
243: _ReceiveEmail =true;
244: }
245: }
246: #endregion
247:
248: #regionValidating handler for txtUser
249: voidtxtUser_Validating(objectsender,CancelEventArgse)
250: {
251: if(this.txtUser.Text ==string.Empty)
252: {
253: this.errorProvider.SetError(this.txtUser,"用户名不能为空!");
254: _user =false;
255: }
256: else
257: {
258: this.errorProvider.SetError(this.txtUser,"");
259: _user =true;
260: }
261: }
262:
264: }
265: }