欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

EWS:邮箱的一个开放的接口服务

程序员文章站 2022-04-09 10:07:49
https://3gstudent.github.io/3gstudent.github.io/Exchange-Web-Service(EWS)%E5%BC%80%E5%8F%91%E6%8C%87%E5%8D%97/ EWS是邮箱的一个开放的接口服务,可以取到邮箱的各种信息,邮件收发、会议、日期 ......

https://3gstudent.github.io/3gstudent.github.io/exchange-web-service(ews)%e5%bc%80%e5%8f%91%e6%8c%87%e5%8d%97/

ews是邮箱的一个开放的接口服务,可以取到邮箱的各种信息,邮件收发、会议、日期安排

首先需要引入 microsoft.exchange.webservices.dll 引用

 

   class program
    {
        /// <summary>
        /// exchange服务对象    
        /// </summary>
        //private static exchangeservice _exchangeservice = new exchangeservice(exchangeversion.exchange2010_sp1);
        static void main(string[] args)
        {
            #region 需要依赖 microsoft.exchange.webservices 读取未邮件箱
            //exchangeservice版本为2007sp1
            exchangeservice service = new exchangeservice(exchangeversion.exchange2007_sp1);
            //参数是用户名,密码,域
            service.credentials = new webcredentials("email.qq.com", "zh.123456", "qq.com");
            //给出exchange server的url https://xxxxxxx
            service.url = new uri("https://mail.xxxx.com/ews/exchange.asmx");
            //你自己的邮件地址 xxx@xxx.xxx 
            service.autodiscoverurl("email.com", redirectioncallback);
            //创建过滤器, 条件为邮件未读.
            searchfilter sf = new searchfilter.isequalto(emailmessageschema.isread, true);
            //查找inbox,加入过滤器条件,结果10条
            finditemsresults<item> findresults = service.finditems(wellknownfoldername.inbox, sf, new itemview(10));
            foreach (item item in findresults.items)
            {
                emailmessage email = emailmessage.bind(service, item.id);
                if (!email.isread)
                {
                    console.writeline(email.body);
                    //标记为已读
                    email.isread = true;
                    //将对邮件的改动提交到服务器
                    email.update(conflictresolutionmode.alwaysoverwrite);
                }
            }
            #endregion
    
            #region 不需要依赖 microsoft.exchange.webservices 邮件发送
            string user = "email@qq.com";
            string password = "zh.123456"; 
            servicepointmanager.servercertificatevalidationcallback = (sender, certificate, chain, sslpolicyerrors) => { return true; };
            streamreader senddata = new streamreader("ews.xml", encoding.default);
            byte[] senddatabyte = encoding.utf8.getbytes(senddata.readtoend());
            senddata.close();
            try
            {
                httpwebrequest request = (httpwebrequest)webrequest.create("https://mail.xxxxx.com/ews/exchange.asmx");
                request.method = "post";
                request.contenttype = "text/xml";
                request.contentlength = senddatabyte.length;
                request.allowautoredirect = false;
                request.credentials = new networkcredential(user, password);
                stream requeststream = request.getrequeststream();
                requeststream.write(senddatabyte, 0, senddatabyte.length);
                requeststream.close();

                httpwebresponse response = (httpwebresponse)request.getresponse();
                if (response.statuscode != httpstatuscode.ok)
                {
                    throw new webexception(response.statusdescription);
                }
                stream receivestream = response.getresponsestream();

                streamreader readstream = new streamreader(receivestream, encoding.utf8);

                string receivestring = readstream.readtoend();
                response.close();
                readstream.close();

                streamwriter receivedata = new streamwriter("out.xml");
                receivedata.write(receivestring);
                receivedata.close();
            }
            catch (webexception e)
            {
                console.writeline("[!]{0}", e.message);
                environment.exit(0);
            }
            console.writeline("[+]done");

            #endregion
        }
        static bool redirectioncallback(string url)
        {
            // return true if the url is an https url.
            return true;
        }

        public static void sendbyexchange(string[] toemails, string[] ctoemails, string title, string body, string[] filename)
        {
            try
            {
                servicepointmanager.servercertificatevalidationcallback = delegate { return true; };//至关重要的一句 否则会报错:the autodiscover service couldn't be located.
                exchangeservice service = new exchangeservice(exchangeversion.exchange2007_sp1);
                service.credentials = new networkcredential("email@qq.com", "zh.123456");
                service.url = new uri(@"https://mail.xxxxx.com/ews/exchange.asmx");//exchange服务器上接口地址
                service.traceenabled = false;
                service.autodiscoverurl("email@qq.com");
                emailmessage message = new emailmessage(service);
                message.subject = title;
                message.body = body;
                if (filename != null)
                {
                    foreach (var str in filename)
                        message.attachments.addfileattachment(str);
                }
                if (ctoemails != null)
                {
                    foreach (var email in ctoemails)
                        message.ccrecipients.add(email);
                }
                if (toemails != null)
                {
                    foreach (var email in toemails)
                        message.torecipients.add(email);
                }

                message.sendandsavecopy();
            }
            catch (exception ex)
            {
                //utility.loghelper.writelog("发送邮件失败", ex);
            }
        }
    }