C# 邮件发送类详解

   最近搞了一个关于员工生日邮件提醒的接口。对C#下邮件发送进行了学习,下面和大家分享下我的经验.

 

   基于C#邮件发送的方式有哪几种?

 

   第一种:System.Net.Mail,此类是.Net2.0后引用的,支持邮件的群发,抄送,内容切图...用起来更方便,清晰,安全机制更高.

 

   但这个也有弊端,就是关于stmp身份验证的问题,我们公司邮箱服务器是Mail.ghepc.com,用这个类就发送不了,查了很多资料

  

   有人说是微软的Bug问题。后来就用了另一种方法System.Web.Mail,这个是.net1.0的东西,比较老,可以解决类似QQ邮箱,168,

 

   公司邮箱...身份验证的问题.

 

    具体发送方法:  MailMessage mailMessage;
                           SmtpClient smtpClient; 

 

                  //构造方法

                 public SendMails(string To, string From, string Body, string Title, string Password)
                 {
                      mailMessage = new MailMessage();
                      mailMessage.To.Add(To);
                      mailMessage.From = new System.Net.Mail.MailAddress(From);
                      mailMessage.Subject = Title;
                      mailMessage.Body = Body;
                      mailMessage.IsBodyHtml = true;
                      mailMessage.BodyEncoding = System.Text.Encoding.UTF8;
                      mailMessage.Priority = System.Net.Mail.MailPriority.Normal;
                      this.password = Password;
                   }

                  

         /// <summary> 
        /// 添加附件 
        /// </summary> 
        public void Attachments(string Path)
        {
            string[] path = Path.Split(',');
            Attachment data;
            ContentDisposition disposition;
            for (int i = 0; i < path.Length; i++)
            {
                data = new Attachment(path[i], MediaTypeNames.Application.Octet);//实例化附件 
                disposition = data.ContentDisposition;
                disposition.CreationDate = System.IO.File.GetCreationTime(path[i]);//获取附件的创建日期 
                disposition.ModificationDate = System.IO.File.GetLastWriteTime(path[i]);//获取附件的修改日期 
                disposition.ReadDate = System.IO.File.GetLastAccessTime(path[i]);//获取附件的读取日期 
                mailMessage.Attachments.Add(data);//添加到附件中 
            }
        }

 

         /// <summary> 
        /// 发送邮件 
        /// </summary> 
        public void Send()
        {

            //smtpClient.EnableSsl = true;Gmail需要设置SSl连接
            if (mailMessage != null)
            {
                smtpClient = new SmtpClient();
                smtpClient.Credentials = new NetworkCredential
                (mailMessage.From.Address, password, "CropDomain");//设置发件人身份的票据 
                smtpClient.DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network;
                smtpClient.Host = "smtp." + mailMessage.From.Host;
                smtpClient.DeliveryMethod = SmtpDeliveryMethod.Network;
                smtpClient.Send(mailMessage);
            }
        }
    }

 

 

需要注意的是Gmail需要这个smtpClient.EnableSsl = true;Gmail需要设置SSl连接,126,163不需要

 

 

第二种方法:System.Web.Mail,需要引入com组件system.web.这个类比较老,而且不是很好用,很多方法都不支持,但可以解决我上诉的

一些身份验证问题,所以要根据自己情况来用

 

具体Code:

 

        private MailMessage _mailMessage;
        public WebSendMail(string To, string From, string Body, string Title, string Password)
        {
            _mailMessage = new MailMessage();
            _mailMessage.To = To;
            _mailMessage.From = From;
            _mailMessage.Subject = Title;
            _mailMessage.Body = Body;
            _mailMessage.BodyFormat = MailFormat.Html;
            _mailMessage.BodyEncoding = System.Text.Encoding.UTF8;
            _mailMessage.Priority = MailPriority.Normal;
            _mailMessage.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate", 1);
            _mailMessage.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendusername", From);
            _mailMessage.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendpassword", Password);
        }
        /// <summary>
        /// 发送附件
        /// </summary>
        public void sendPass(string pass)
        {
            MailAttachment attachment = new System.Web.Mail.MailAttachment(pass);
            _mailMessage.Attachments.Add(attachment);
        }
        /**/
        /// <summary>
        /// 发送邮件
        /// </summary>
        public bool Send()
        {

            try
            {
                SmtpMail.SmtpServer = "mail.ghepc.com";
                SmtpMail.Send(_mailMessage);
                return true;
            }
            catch (Exception ex)
            {
                LogHelp.WriteInLog("发送异常:" + ex.Message, true);
                return false;
            }
        }

 

 

希望对大家有帮助...第一次写东西!s

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值