zoukankan      html  css  js  c++  java
  • 经过测试的邮件发送类

    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;
    using System.Net.Mail;
    using System.Net.Mime;
    using System.IO;
    using System.Net.NetworkInformation;
    using System.Net.Sockets;
    using System.Threading;

    namespace SendEmail
    {
        class ClsMail
        {

           


            private SmtpClient SmtpClient_my = null;//SMTP 邮件发送主体
            private MailMessage MailMessage_my = null;
            private Attachment Attachment_my = null;

            public string m_SMTPServer="";
            public string m_Port="25";
            public string m_UserName="";
            public string m_UserPwd="";
            public string m_SenderDisply = "";
            public int IsAnonymous=0;


            public bool pblnSuccess = true;//判断邮件是否发送成功True==成功, False: 失败
            public string pFailInfo = "";//邮件发送失败后,对应的失败原因

            //设置邮件格式 html,plaintext, richtext
            public enum MailTypes
            {
                Html=0, Text=1
            }

            public MailTypes pMailType;//邮件类型变量

            //设置邮件编码格式 GB2312, UTF-8

            public enum MailEncodings
            {
                GB2312=0, ASCII=1, Unicode=2, UTF8=3
                //The Default mailtype=Html, CodingType=3
            }
            public MailEncodings pMailEncoding;//邮件编码类型

            public enum EmailPriory
            {
                High=0,Normal=1,Low=2
            }
            public EmailPriory pPriority;
            //构造函数,New SMTP变量实例
            public ClsMail()
            {
                //初始化邮件信息
                MailMessage_my = new MailMessage();
                pFailInfo = "";
                IsAnonymous = 0;
                pblnSuccess = true;
                pMailType = MailTypes.Html;
                pMailEncoding = MailEncodings.UTF8;
                pPriority = EmailPriory.Normal;
            }

            #region //初始设置SMTP 服务器
            private int Func_InitSMTP()
            {
                try
                {

                    string StrIP = "";
                    //此Resolve函数已经过时
                    //IPAddress hostIPAddress = (Dns.Resolve(m_SMTPServer)).AddressList[0];
                    IPAddress[] IpAddress = Dns.GetHostEntry(m_SMTPServer).AddressList;
                    if (IpAddress.Length > 0)
                    {
                        IPAddress hostIPAddress = Dns.GetHostEntry(m_SMTPServer).AddressList[0];
                        StrIP = hostIPAddress.ToString();
                    }
                    else
                    {
                        pFailInfo = "Could not find the matched IP address for SMTP Server by the method Dns.GetHostEntry";
                        pblnSuccess = false;
                    }
                    //此部分过程,存在,如果网站禁止Ping命令,则得不到Ping通得IP地址。


                    //IPAddress[] IpAddress = Dns.GetHostEntry(m_SMTPServer).AddressList;
                    //Ping ping = new Ping();
                    //PingReply pingReply = null;
                    ////取得smt服务器可用的IP
                    //foreach (IPAddress IP in IpAddress)
                    //{
                    //    pingReply = ping.Send(IP);
                    //    if (pingReply.Status == IPStatus.Success)
                    //    {
                    //        StrIP = IP.ToString();
                    //        break;
                    //    }
                    //}

                    SmtpClient_my = new SmtpClient(StrIP, Int32.Parse(m_Port));
                    SmtpClient_my.Timeout = 20000;
                    SmtpClient_my.Host = m_SMTPServer;
                    //创建服务器认证
                    NetworkCredential NetworkCredential_my=null;
                    if (IsAnonymous==0)
                    {
                        //如果非匿名访问,写上邮箱的账号,密码
                        NetworkCredential_my = new NetworkCredential(m_UserName,m_UserPwd);
                    }
                    else
                    {
                        //匿名访问
                        NetworkCredential_my = new NetworkCredential();
                        SmtpClient_my.UseDefaultCredentials = true;
                    }
                    SmtpClient_my.Credentials = NetworkCredential_my;

                    SmtpClient_my.SendCompleted += new SendCompletedEventHandler(SmtpClient_my_SendCompleted);
                    pblnSuccess = true;
                    return 1;
                }
                catch (SocketException E)
                {

                    pFailInfo=E.ToString();
                    pblnSuccess = false;
                    return 0;
                }
            }
            #endregion

            #region//设置m_From发送人,m_To收件人,m_CC抄送,m_BCC密送人

            private int Func_PersonInit(string m_From, string m_To, string m_CC, string m_BCC)
            {
                MailAddress mailTemp = null;
                string[] aryTemp = null;
                //数据库需要设置系统邮件地址
                if (m_From.Trim().Equals(""))
                {
                    pFailInfo = "the email sender could not be null";
                    pblnSuccess = false;
                    return 0;
                }
                else
                {
                    mailTemp = new MailAddress(m_From.Trim(),m_SenderDisply);
                    MailMessage_my.From = mailTemp;
                }
                if (m_To.Trim().Equals(""))
                {
                    pFailInfo = "the email receiver could not be null";
                    pblnSuccess = false;
                    return 0;
                }
                else
                {
                    aryTemp = m_To.Split(';');
                    for (int i = 0; i < aryTemp.Length; i++)
                    {
                        if (!aryTemp[i].Trim().Equals(""))
                        {
                            mailTemp = new MailAddress(aryTemp[i].Trim());
                            MailMessage_my.To.Add(mailTemp);
                        }
                    }
                }
                //抄送
                if (!m_CC.Trim().Equals(""))
                {
                    aryTemp = m_CC.Split(';');
                    for (int i = 0; i < aryTemp.Length; i++)
                    {
                        if (!aryTemp[i].Trim().Equals(""))
                        {
                            mailTemp = new MailAddress(aryTemp[i].Trim());
                            MailMessage_my.CC.Add(mailTemp);
                        }
                    }
                }
                //密送
                if (!m_BCC.Trim().Equals(""))
                {
                    aryTemp = m_BCC.Split(';');
                    for (int i = 0; i < aryTemp.Length; i++)
                    {
                        if (!aryTemp[i].Trim().Equals(""))
                        {
                            mailTemp = new MailAddress(aryTemp[i].Trim());
                            MailMessage_my.Bcc.Add(mailTemp);
                        }
                    }
                }
                pblnSuccess = true;
                return 1;
            }
            #endregion

            #region//读取附件信息,将附件组添加到邮件附件组中。
            private int Func_AttachInit(string m_Attachment)
            {
                string[] aryTemp = null;
                if (!m_Attachment.Equals(""))
                {
                    //分割附件数组
                    aryTemp = m_Attachment.Split(';');
                    for (int i = 0; i < aryTemp.Length; i++)
                    {
                        //如果文件不存在
                        if (!File.Exists(aryTemp[i].Trim()))
                        {
                            if (!aryTemp[i].Trim().Equals(""))
                            {
                                pFailInfo = "The file " + aryTemp[i] + " doese not exist.";
                                pblnSuccess = false;
                                return 0;
                                //MessageBox.Show("{0}文件不存在!", aryTemp[i].Trim());
                            }
                        }
                        //如果文件存在
                        //获取文件
                        try
                        {
                            FileStream FileStream_my = new FileStream(aryTemp[i], FileMode.Open);
                            string name = FileStream_my.Name;
                            int size = (int)(FileStream_my.Length / 1024);
                            //控制文件大小不大于10M
                            if (size > 10240)
                            {
                                // MessageBox.Show("文件长度不能大于10M!你选择的文件大小为{0}", size.ToString());
                                pFailInfo = "The file size could not be over 10M, The current file size [" + aryTemp[i]+"] is " + size.ToString();
                                FileStream_my.Close();
                                pblnSuccess = false;
                                return 0;
                            }
                            else
                            {
                                FileStream_my.Close();
                                FileStream_my.Dispose();
                                Attachment_my = new Attachment(aryTemp[i]);
                                MailMessage_my.Attachments.Add(Attachment_my);
                               
                            }
                        }
                        catch (IOException E)
                        {
                           pFailInfo=E.Message;
                           pblnSuccess = false;
                           return 0;
                        }
                    }//end for each
                }
                pblnSuccess = true;
                return 1;
                //程序正常结束,返回1

            }

            #endregion

            #region 发送邮件后所处理的函数
            private void SmtpClient_my_SendCompleted(object sender, AsyncCompletedEventArgs e)
            {
                if (e.Cancelled)
                {
                   
                    pFailInfo="the email sending is canceld";
                    pblnSuccess = false;
                   
               
                }
                if (e.Error != null)
                {
                    //MessageBox.Show(e.UserState.ToString() + "发送错误:" + e.Error.Message, "发送错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    pFailInfo = "the email sending error "+e.Error.Message;
                    pblnSuccess = false;
                }
                else
                {
                    //MessageBox.Show("邮件成功发出!", "恭喜!", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    pblnSuccess = true;
                }

            }
            #endregion

            #region "设置邮件类型与编码格式"
            private void Void_SetMailCoding()
            {
                int intType = (int)pMailType;
                int intCoding = (int)pMailEncoding;
                int intPriority = (int)pPriority;
                //设定邮件类型Html=0, PlainText=1,RichText=2
                switch (intType)
                {
                    case 0://Html
                        MailMessage_my.IsBodyHtml = true;
                        break;
                    case 1://Text
                        MailMessage_my.IsBodyHtml = false;
                        break;
                    default://Hteml
                        MailMessage_my.IsBodyHtml = true;
                        break;
               
                }
                //Set Mail Coding Tyep


            //设置邮件编码格式 GB2312, UTF-8

                switch (intCoding)
                {
                    case 0://GB2312
                        MailMessage_my.BodyEncoding=Encoding.GetEncoding(936);
                        MailMessage_my.SubjectEncoding=Encoding.GetEncoding(936);
                       
                        break;
                    case 1://ASCII
                        MailMessage_my.BodyEncoding=Encoding.ASCII;
                        MailMessage_my.SubjectEncoding=Encoding.ASCII;
                        break;
                    case 2://Unicode
                        MailMessage_my.BodyEncoding=Encoding.Unicode;
                        MailMessage_my.SubjectEncoding=Encoding.Unicode;
                        break;
                    case 3://UTF8
                        MailMessage_my.BodyEncoding=Encoding.UTF8;
                        MailMessage_my.SubjectEncoding=Encoding.UTF8;
                        break;
                    default:
                        MailMessage_my.BodyEncoding=Encoding.UTF8;
                        MailMessage_my.SubjectEncoding=Encoding.UTF8;
                        break;

                }
                //设置优先级
                switch (intPriority)
                {
                    case 0://High
                        MailMessage_my.Priority = MailPriority.High;
                        break;
                    case 1://normal
                        MailMessage_my.Priority = MailPriority.Normal;
                        break;
                    case 2://low
                        MailMessage_my.Priority = MailPriority.Low;
                        break;
                    default:
                        MailMessage_my.Priority = MailPriority.Normal;
                        break;
                }
               
               

            }
            #endregion


            #region//发送邮件主函数
            //返回值=0 发送失败,pFailInfo 查看失败原因
            //返回值=1 发送成功
            public int  Func_SendMail(string m_From, string m_To, string m_CC, string m_BCC, string m_SubJect, string m_Attachment, string m_Boday)
            {

                try
                {
                    //设置smtp 服务器及后期处理函数
                    Func_InitSMTP();
                    if (pblnSuccess == false)
                    {
                        return 0;
                    }
                    //设置收,发邮件人的列表
                    Func_PersonInit(m_From, m_To, m_CC, m_BCC);
                    if (pblnSuccess==false)
                    {
                        return 0;
                    }

                    //设置附件
                    Func_AttachInit(m_Attachment);
                    if (pblnSuccess == false)
                    {
                        return 0;
                    }
                    MailMessage_my.Subject = m_SubJect;
                    MailMessage_my.Body = m_Boday;
                    Void_SetMailCoding();
                    string userToken = "Well!";
                    if (SmtpClient_my != null)
                    {
                        //SmtpClient_my.SendAsync(MailMessage_my, userToken);
                        SmtpClient_my.Send(MailMessage_my);
                        MailMessage_my.Dispose();
                        pblnSuccess = true;
                        return 1;
                    }
                    else
                    {

                        //MessageBox.Show("邮件没有发送!Smtp服务器没有初始化!");
                        pblnSuccess = false;
                        pFailInfo = "the smtp server didn't be initialized";
                        return 0;
                    }
                }
                catch (Exception ex)
                {
                    pblnSuccess = false;
                    pFailInfo = ex.Message;
                    MailMessage_my.Dispose();
                    return 0;
                }
               

            }
            #endregion

        }
    }

    ----------------------------------------------------------------------------------------------------------------

    调用

             StringBuilder sb = new StringBuilder();
    sb.Append("<html>");
                sb.Append("  <head>");
                sb.Append("    <meta http-equiv=\"Content-Type\" content=\"text/html; charset=gb2312\">");
                sb.Append("       <title>车辆异常信息报告</title>");
                sb.Append(       "<style type=\"text/css\">");
                sb.Append("       <!--");
                sb.Append("         body {font: normal 11px auto \"Trebuchet MS\", Verdana, Arial, Helvetica, sans-serif;color: #4f6b72;background: #E6EAE9;}");
                sb.Append("         .style1 {font-size: 15px;color: #4f6b72;;border-right: 1px solid #C1DAD7;border-left: 1px solid #C1DAD7;border-top: 1px solid #C1DAD7;letter-spacing: 2px;text-transform: uppercase;text-align: left;padding: 6px 6px 6px 12px;background: #FFFFFF  no-repeat;}");
                sb.Append("         .style2 {border-right: 1px solid #C1DAD7;border-left: 1px solid #C1DAD7;border-top: 1px solid #C1DAD7;border-bottom: 1px solid #C1DAD7;background: #fff;font-size:20px;padding: 6px 6px 6px 12px;color: #4f6b72; 600px;height:150px; word-wrap: break-word;filter:progid:DXImageTransform.Microsoft.gradient(startcolorstr=#FFFF00000,endcolorstr=#FFFFFF00,gradientType=1)\"}");
                sb.Append("        -->");
                sb.Append("        </style>");
                sb.Append("   </head>");
                sb.Append("   <body>");
                sb.Append("     <table id=\"table\" align=\"center\" >");
                sb.Append("       <th  class=\"style1\"><div align=\"center\">异常信息报告</div></th>");
                sb.Append("       <tr>");
                sb.Append("          <td class=\"style2\">");
                string a = string.Format("监控中心提醒你 ,车牌号码为({0})车辆异常,请进行限行!", "<a href=\"http://www.****.com/\">陕AA6545</a>");
                sb.Append(a);
                sb.Append("           </td>");
                sb.Append("       </tr>");
                sb.Append("</html>");

                ClsMail mail = null;
                mail = new ClsMail();
                mail.m_Port = 25;
             mail.m_SMTPServer = "stmp.**.com
    ail.m_UserName = "************";//用户名
                mail.m_UserPwd = "************" ;//密码
                mail.m_SenderDisply = "发送用户显示";
                mail.pPriority = ClsMail.EmailPriory.High;
                if (checkBox1.Checked) //是否匿名
                {
                    mail.IsAnonymous = 1;
                }
                mail.Func_SendMail(Tb_Email_from.Text, Tb_Email_to.Text, Txt_CC.Text, Txt_BCC.Text, Tb_Content.Text, Tb_Path.Text, sb.toString());
                if (mail.pblnSuccess == false)
                {
                    MessageBox.Show(mail.pFailInfo);
                }
                else
                {
                    MessageBox.Show("发送成功,请查看收件箱");
                }
                mail = null;

           ----------------采用 新浪邮箱测试,测试时 务必启用 邮箱 SMTP服务

  • 相关阅读:
    Rsync命令参数详解
    mysql 主从同步如何 把从数据的版本升级到指定的版本
    MySQL同步故障:" Slave_SQL_Running:No" 两种解决办法 (转)
    Linux VPS/服务器 网站及数据库自动本地备份并FTP上传备份脚本
    在kloxo中把不带www的域名做301到带www的域名
    mysql sorce 导入数据乱码问题解决
    linux后台运行和关闭SSH运行,查看后台任务
    centos下MySQL主从同步配置
    ecshop 无法上传产品图片 服务环境少了GD库
    EOJ2902 Contest
  • 原文地址:https://www.cnblogs.com/xianzuoqiaoqi/p/1453346.html
Copyright © 2011-2022 走看看