首先是邮件帮助类
using System; using System.Collections.Generic; using System.Text; using System.Net.Mail; using System.Windows.Forms; namespace zzEmail { //邮件帮助类 class MailHelper { SmtpClient smtpClient; //邮件实体类,包含用户名密码 MailModel mail; UserModel to; public MailHelper() { } public MailHelper(MailModel mail, UserModel t) { smtpClient = new SmtpClient(); this.mail = mail; this.to = t; } public void send() { MailMessage msg=null; smtpClient.Credentials = new System.Net.NetworkCredential(mail.from.Send_Address.Address, mail.from.password);//设置发件人身份的票据 smtpClient.DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network; smtpClient.Host = "smtp." + mail.from.Send_Address.Host; try { msg = mail.GetMail(); msg.To.Add(to.Send_Address.Address); smtpClient.Send(msg); MessageBox.Show("发送成功"); } catch (SmtpException err) { //如果错误原因是没有找到服务器,则尝试不加smtp.前缀的服务器 if (err.StatusCode == SmtpStatusCode.GeneralFailure) { try { //有些邮件服务器不加smtp.前缀 smtpClient.Host = null; smtpClient.Send(mail.GetMail()); } catch (SmtpException err1) { MessageBox.Show(err1.Message, "发送失败"); } } else { MessageBox.Show(err.Message, "发送失败"); } } finally { //及时释放占用的资源 msg.Dispose(); } } } }
邮件实体类
using System; using System.Collections.Generic; using System.Text; using System.Net.Mail; namespace zzEmail { //邮件实体类 class MailModel { //主题 public string Subject { get;set;} public string SubjectEncoding { get; set; } //内容 public string Body { get;set;} public string BodyEncoding { get; set; } //附件 public List<Attachment> Attachments=new List<Attachment>(); public MailMessage message; //发送人 public UserModel from; public MailModel(string subject,string body,UserModel f) { message = new MailMessage(); this.Subject = subject; this.Body = body; this.from = f; } //添加附件 public void AddAttach(Attachment file) { Attachments.Add(file); } //添加一群附件 public void AddAttach(List<Attachment> files) { foreach (Attachment item in files) { if(item!=null) this.Attachments.Add(item); } } //返回邮件实体 public MailMessage GetMail() { if (this.message != null) { message.Subject = this.Subject; message.SubjectEncoding = System.Text.Encoding.UTF8; message.Body = this.Body; message.BodyEncoding = System.Text.Encoding.UTF8; message.From = from.Send_Address;//设置发邮件人地址 foreach (Attachment item in Attachments) { if (item != null) this.message.Attachments.Add(item); } return message; } else return null; } } }
邮件的用户类
using System; using System.Collections.Generic; using System.Text; using System.Net.Mail; namespace zzEmail { //接收邮件的用户实体类 class UserModel { public string nickname { get; set; } public string password { get; set; } public MailAddress Send_Address{get;set;} public UserModel(string useraddr) { Send_Address = new MailAddress(useraddr); } public UserModel(string useraddr,string nickname) { this.nickname = nickname; Send_Address = new MailAddress(useraddr); } } }
最后是具体的操作
使用多线程来对邮件进行发送
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Net.Mail; using System.Threading; namespace zzEmail { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void btn_addFile_Click(object sender, EventArgs e) { OpenFileDialog myOpenFileDialog = new OpenFileDialog(); myOpenFileDialog.CheckFileExists = true; //只接收有效的文件名 myOpenFileDialog.ValidateNames = true; //允许一次选择多个文件作为附件 myOpenFileDialog.Multiselect = true; myOpenFileDialog.ShowDialog(); if (myOpenFileDialog.FileNames.Length > 0) { FileList.Items.AddRange(myOpenFileDialog.FileNames); } } private void btn_Send_Click(object sender, EventArgs e) { UserModel from = new UserModel(txt_UserName.Text); from.password = txt_Pass.Text; UserModel to = new UserModel(txt_rec.Text); MailModel mail = new MailModel(txt_sub.Text, txt_content.Text, from); List<Attachment> filelist = new List<Attachment>(); //添加附件 if (FileList.Items.Count > 0) { for (int i = 0; i < FileList.Items.Count; i++) { Attachment attachFile = new Attachment(FileList.Items[i].ToString()); filelist.Add(attachFile); } } mail.AddAttach(filelist);//添加附件 MailHelper helper = new MailHelper(mail, to); //启动一个线程发送邮件 Thread mythread = new Thread(new ThreadStart(helper.send)); mythread.Start(); } } }