C#实现对邮件的发送

jopen 10年前

首先是邮件帮助类

    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();                }            }        }