C#发送邮件(阿里企业邮箱示例 包括各个类型的服务器及端口配置)

本文讲解通过C#来实现发送邮件:
1.我这里是使用的阿里企业邮箱,至于其他的163和QQ邮箱,就是修改下服务器地址和端口的问题
2.至于发送失败的问题,在排除代码问题之后,可以看下自己使用的发送邮箱的账户是否开启了授权,特别是163和QQ邮箱,要开授权的

 

这里针对阿里企业邮箱的各个服务器和端口配置说明一下:
1.POP服务器:
地址:pop3.mxhichina.com
端口:110
加密端口:995

2.IMAP服务器:
地址:imap.mxhichina.com
端口:143
加密端口:993
备注:接收邮件推荐使用该协议,毕竟POP3是无法和邮箱服务器进行交互的,不能更新邮件的状态。

SMTP服务器:
地址:smtp.mxhichina.com
端口:25
加密端口:465

 

直接上核心代码:

        /// <summary>
        /// 发送邮件方法,更多可以自己转到定义去查看,还是很通俗易懂的
        /// </summary>
        /// <param name="requestModel"></param>
        public static void SendEmail(EmailInfo requestModel)
        {
            if (requestModel.To.IsNullOrEmpty()) throw new LevoxCpcException("邮件收件人不能为空!");
            if (string.IsNullOrWhiteSpace(requestModel.Subject)) throw new LevoxCpcException("邮件标题不能为空!");
            if (string.IsNullOrWhiteSpace(requestModel.Body) && requestModel.Attachments.IsNullOrEmpty()) throw new LevoxCpcException("没有要发送的邮件内容!");

            var emailSettingInfo = GetSendEmailSenderInfo();
            try
            {
                //初始化发送邮件对象
                var client = new SmtpClient(emailSettingInfo.Host, emailSettingInfo.Port)
                {
                    //是否启用SSL,这里是false,如果true,需要配置证书
                    EnableSsl = false,
                    //是否启用身份验证(UseDefaultCredentials属性必须要在Credentials前配置,否则会报错)
                    UseDefaultCredentials = true,
                    //配置身份账号密码
                    Credentials = new NetworkCredential(emailSettingInfo.Account, emailSettingInfo.Password)
                };
                //要发送的邮件对象
                var email = new MailMessage()
                {
                    //发件人邮箱和展示名称
                    From = new MailAddress(emailSettingInfo.Account, emailSettingInfo.DisplayName),
                    IsBodyHtml = true,//是否是html格式
                    Subject = requestModel.Subject,//邮件标题
                    BodyEncoding = Encoding.Default,//邮件内容编码
                    Body = requestModel.Body,//邮件内容
                    Priority = MailPriority.High//邮件优先级
                };
                //收件人(可以多个)
                requestModel.To.Distinct().LingbugFor(r => email.To.Add(r));
                //抄送人(可以多个)
                if (!requestModel.CC.IsNullOrEmpty()) requestModel.CC.Distinct().LingbugFor(r => email.CC.Add(r));
                //附件(可以多个)
                if (!requestModel.Attachments.IsNullOrEmpty()) requestModel.Attachments.Distinct().LingbugFor(r => email.Attachments.Add(new Attachment(r)));
                //发送完毕事件(只针对异步发送有效)
                client.SendCompleted += (sender, e) =>
                {
                    if (e.Error == null)
                    {
                        LogTestService.Info("邮件发送成功", requestModel.SerializeObject());
                    }
                    else
                    {
                        LogTestService.Info("邮件发送失败:" + e.Error.Message, e.Error.SerializeObject());
                    }
                };
                //发送邮件
                client.SendMailAsync(email);
            }
            catch (Exception ex)
            {
                LogTestService.Info("发送邮件发生异常:" + ex.Message, ex.SerializeObject());
            }
        }

 

 

Ending~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章