TommyBiteMe

关于.NET 的邮件发送类

.NET 类库中已经有现成的封好的类库了,只要引用System.Net.Mail命名空间即可实现发邮件的功能

以下是代码

    public class SendMail
    {
        private string FileName;//附件路径
        public string filename
        {
            set { FileName = value; }
        }
        private string ServerHost;//承载服务器  如smtp.qq.com
        public string serverhost
        {
            set { ServerHost = value; }
        }
        private Int32 Port;//端口
        public Int32 port { set { Port = value; } }
        private string MailAddressFrom;//发信人邮箱
        public string mailaddressfrom { set { MailAddressFrom = value; } }
        private string Psw;//密码
        public string psw { set { Psw = value; } }
        private string MailAddressTo;//收信人邮箱
        public string mailaddressto { set { MailAddressTo = value; } }
        private string Message;//邮件信息
        public string message { set { Message = value; } }
        private string ShowName;//发送人显示名
        public string showname { set { ShowName = value; } }
        private string MailTitle;//发送人显示名
        public string mailtitle { set { MailTitle = value; } }
        public string result;

        SmtpClient smtpclient = null;//设置smtp协议
        MailAddress MailAddress_from = null;//设置发信人的地址  密码
        MailAddress MailAddress_to = null;//设置收信人的地址
        MailMessage MailMessage = new MailMessage();
        FileStream filestream = null;//附件文件流

        /// <summary>
        /// 设置smtp服务器信息
        /// </summary>
        /// <param name="ServerHost">smtp服务器名</param>
        /// <param name="port">端口号</param>
        private void setSmtpClient(string ServerHost, Int32 port)
        {
            smtpclient = new SmtpClient();
            smtpclient.Host = ServerHost;//指定smtp服务名 
            smtpclient.Port = port;//指定端口号
            smtpclient.Timeout = 0;//超时的时间
        }

        /// <summary>
        /// 验证发件人信息
        /// </summary>
        /// <param name="MailAddress">发件人地址</param>
        /// <param name="Psw">密码</param>
        private void setMailAddress_from(string MailAddress, string Psw)
        {
            //创建服务器认证
            NetworkCredential networkcredential = new NetworkCredential(MailAddress, Psw);
            //实例化发件人地址
            MailAddress_from = new System.Net.Mail.MailAddress(MailAddress, Psw);
            //指定发件人信息(邮箱地址和密码)
            smtpclient.Credentials = new System.Net.NetworkCredential(MailAddress_from.Address, Psw);
        }

        /// <summary>
        /// 检测附件大小
        /// </summary>
        /// <param name="filename">附件路径</param>
        /// <returns></returns>
        private Boolean checkAttachmentSize()
        {
            try
            {
                filestream = new System.IO.FileStream(FileName, FileMode.Open);
                string name = filestream.Name;
                int size = (int)filestream.Length;
                filestream.Close();
                if (size > 1024 * 1024 * 1024)
                    return false;
                return true;
            }
            catch (IOException ioerr)
            {
                throw (ioerr);
            }
        }


        public void Sendmail()
        {
            if (!String.IsNullOrEmpty(FileName))
            {
                if (!checkAttachmentSize())
                {
                    return;
                }
            }
            //初始化smtp信息
            try
            {
                setSmtpClient(ServerHost, Port);
            }
            catch (Exception err)
            {
                throw err;
            }
            //验证发件地址和密码
            try
            {
                setMailAddress_from(MailAddressFrom, Psw);
            }
            catch (Exception err)
            {
                throw err;
            }
            try
            {
                MailAddress_to = new MailAddress(MailAddressTo);
                MailMessage.To.Add(MailAddress_to);
            }
            catch (Exception err)
            {
                throw err;
            }
            MailMessage.From = MailAddress_from;
            MailMessage.Subject = MailTitle;
            MailMessage.SubjectEncoding = System.Text.Encoding.UTF8;
            MailMessage.Body = Message;
            MailMessage.BodyEncoding = System.Text.Encoding.UTF8;
            MailMessage.Attachments.Clear();
            MailMessage.Attachments.Add(new Attachment(FileName.Trim(), MediaTypeNames.Application.Octet));
            smtpclient.SendAsync(MailMessage, "000000000");
            result = "发送成功!";
        }
    }

以上只是做我样例,具体还没封号,仅作参考。

另外需要设置你发件邮箱的SMTP,有些邮箱默认是关闭的,如QQ邮箱;

调用代码:

static void Main(string[] args)
        {
            SendMail sendmail = new SendMail();
            sendmail.filename = @"F:\《高等数学》下册期末总复习.rar";
            sendmail.mailaddressfrom = @"@163.com";
            sendmail.mailaddressto = @".com";
            sendmail.mailtitle = "你是个SB!";
            sendmail.message = "到后个将发动机得更快睡觉啊i偶的是解放军的声卡将公开讲的是卡就卡价\n格看电视剧开工的静安寺髋关节阿盛开的吉萨头i额物体偶觉得刚打开\n数据库哥四大皆空担惊受恐讲噶速度借我抵抗力噶就是德拉科价格按时";
            sendmail.port = 25;
            sendmail.psw = "";
            sendmail.serverhost = "smtp.163.com";
            sendmail.showname = "TommyBiteMe";
            sendmail.Sendmail();
            Console.WriteLine("{0}",sendmail.result);
            Console.ReadLine();
        }

posted on 2013-10-22 16:51  TommyBiteMe  阅读(331)  评论(0编辑  收藏  举报

导航