c#实现对邮件的发送

首先是邮件帮助类

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


 

posted @ 2013-10-01 12:37  小竹zz  阅读(231)  评论(0编辑  收藏  举报