exchange协议发送邮件

本文介绍了如何在C# .NET环境下,针对特殊邮件发送需求,利用Exchange协议编写通用的邮件发送方法。作为初学者的尝试,期待得到更多资深开发者的意见和建议。

平时基本都是是用SMTP协议发送邮件,但是公司有个客户对发送邮件要求比较特殊,所以就结合客户需求写了一个通用的exchange协议发送邮件的方法,菜鸟上手,请大家多多指教

    public class ExchangeEmailInfo
    {
       
        /// <summary>
        /// 接收人
        /// </summary>
        public List<string> ToRecipients { get; set; }
        /// <summary>
        /// 抄送人
        /// </summary>
        public List<string> CcRecipients { get; set; }
        /// <summary>
        /// 邮件主题
        /// </summary>
        public string Subject { get; set; }
        /// <summary>
        /// 邮件内容
        /// </summary>
        public string MessageBodyContent { get; set; }
        /// <summary>
        /// 邮件内容类型 0 html 1 文本
        /// </summary>
        public int MessageBodyType { get; set; }
     
    }

    public class ExchangeEmailServicce
    {
        /// <summary>
        /// exchange协议服务地址
        /// </summary>
        public string ExchangeServiceUrl { get; set; }
        /// <summary>
        /// 发送人
        /// </summary>
        public string UserName { get; set; }
        /// <summary>
        /// 密码
        /// </summary>
        public string UserPwd { get; set; }
        /// <summary>
        /// 域名
        /// </summary>
        public string Domain { get; set; }

        /// <summary>
        /// 邮件集合
        /// </summary>
        public List<ExchangeEmailInfo> EmailInfoList { get; set; }
    }

     public ResponseModel<string> SendMail(ExchangeEmailServicce emailServicce)
        {
            ResponseModel<string> result = new ResponseModel<string>() { IsSuccess = true, ErrorCode = 0 };
            System.Text.StringBuilder builder = new System.Text.StringBuilder();
         
            try
            {

                ServicePointManager.ServerCertificateValidationCallback = delegate (object s, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors) { return true; };

                ExchangeService exchangeService = new ExchangeService(ExchangeVersion.Exchange2013);
                if (string.IsNullOrWhiteSpace(emailServicce.Domain))
                    exchangeService.Credentials = new WebCredentials(emailServicce.UserName, emailServicce.UserPwd);
                else
                    exchangeService.Credentials = new WebCredentials(emailServicce.UserName, emailServicce.UserPwd, emailServicce.Domain);

                exchangeService.TraceEnabled = true;
                exchangeService.TraceFlags = TraceFlags.All;
                exchangeService.Url = new Uri(emailServicce.ExchangeServiceUrl);
                if (emailServicce == null || emailServicce.EmailInfoList.Count <= 0)
                {
                    log.Error(result.Message);
                    result.IsSuccess = false;
                    result.Message = "邮件信息不能为空";
                    return result;
                }
                foreach (var item in emailServicce.EmailInfoList)
                {
                    EmailMessage email = new EmailMessage(exchangeService);
                    email.ToRecipients.AddRange(item.ToRecipients);
                    email.Subject = item.Subject;
                    if (item.CcRecipients != null && item.CcRecipients.Count > 0)
                        email.CcRecipients.AddRange(item.CcRecipients);
                    MessageBody body = new MessageBody()
                    {
                        BodyType = item.MessageBodyType == 0 ? BodyType.HTML : BodyType.Text,
                        Text = item.MessageBodyContent
                    };
                    email.Body = body;
                    email.Send();
                    builder.Append(JsonConvert.SerializeObject(item.ToRecipients) + "-");
                }
                return result;
            }
            catch (System.ObjectDisposedException ex)
            {
                result.Message = "程序异常,请重试。";
                result.ErrorCode = 1;
            }
            catch (ServiceVersionException ex)
            {
                result.Message = "服务版本异常,请重试";
                result.ErrorCode = 1;
            }

            catch (ServiceValidationException ex)
            {
                result.Message = "服务验证失败,请重试";
                result.ErrorCode = 1;
            }
            catch (ServiceLocalException ex)
            {
                result.Message = "本地服务异常,请重试";
                result.ErrorCode = 1;
            }
            catch (Exception e)
            {
                result.Message = e.ToString();
                result.ErrorCode = 2;
            }
            
            if (builder != null && string.IsNullOrWhiteSpace(builder.ToString()))
                log.Error("参数:" + JsonConvert.SerializeObject(emailServicce) + "/n已成功发送的邮件:"+builder.ToString()+"/n错误信息:" + result.Message);
            else
                log.Error("参数:" + JsonConvert.SerializeObject(emailServicce) + "/n错误信息:" + result.Message);
            result.IsSuccess = false;
            return result;
        }
   
    //exchange协议发送邮件  mailTo,mailCC 多个收件人和多个抄送人之间分别用英文逗隔开
    ExchangeSendMail = function (serviceUrl, userName, UserPwd, mailTo, mailCC, mailSubject, mailBody, mailBodyType, domain) {

        if (mailTo == null || mailTo == undefined) {
            alert('接收人不能为空');
            return;
        }

        var infoList = new Array();
        var emailInfo = {};

        emailInfo.ToRecipients = mailTo.split(',');
        if (mailCC != null && mailCC != undefined)
            emailInfo.CcRecipients = mailCC.split(',');
        emailInfo.Subject = mailSubject;
        emailInfo.MessageBodyContent = mailBody;
        emailInfo.MessageBodyType = (mailBodyType == null || mailBodyType == undefined) ? 1 : mailBodyType;

        infoList.push(emailInfo)

        var para = {
            ExchangeServiceUrl: serviceUrl
            , userName: userName
            , UserPwd: UserPwd
            , Domain: (domain == null || domain == undefined) ? "" : domain
            , EmailInfoList: infoList
        };

        $.ajax({
            url: Display.config.VirtualPath + '/api/ExchangeEmail/SendMessage',
            type: "POST",
            contentType: 'application/json',
            data: JSON.stringify({ args: para, messageType: 1 }),
            success: function (data) {
                if (!data.IsSuccess)
                    alert(data.Message);
            }
        });
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值