大学IT网 - 最懂大学生的IT学习网站! QQ资料交流群:367606806
当前位置:大学IT网 > C#技巧 > C#实现对邮件的发送

C#实现对邮件的发送

关键词:发送邮件c#  阅读(670) 赞(11)

[摘要]本文是对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();  
        }  
    }  
}  


相关评论