废话少说,直接贴代码。
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: }