设为首页 收藏本站
查看: 1155|回复: 0

[经验分享] 读取Exchange邮件或任务(第一种方法)

[复制链接]
发表于 2017-12-8 17:31:05 | 显示全部楼层 |阅读模式
  第一种
  企业邮件系统Exchange往往会与企业业务协作平台SharePoint一起搭配使用,如在SharePoint企业门户上显示当前登录用户所有未读邮件或最新的待办任务信息等,以便于用户可以在门户上选择未读邮件或待办任务直接打开Exchange邮件系统显示信息的正文,而不需要用户再去通过OutLook客户端或OWA方式去登录邮件系统去查看信息,从而提高了工作效率。
  而要在SharePoint门户上显示邮件系统上未读邮件或任务需要通过代码编程来实现,将这个功能开发成一个自定义的WebPart后部署到门户上去。

  接下来介绍如何通asp.net代码来读取Exchange邮件或任务:通过Exchange Web Service、Exchange Web Services Managed API
  一、通过Exchange Web Service来读取

  1、首先,在项目上添加Web Service引用,这个Web Service的URL 地址格式如:https://Exchange邮件系统的服务器名/EWS/Exchange.asmx

  2、引入如下命名空间:
using System.Net;
using System.Net.Security;
using System.Security.Cryptography.X509Certificates;

  3、编写代码读取邮件信息:



DSC0000.gif
            //忽略SSL证书请求必须的,不添加在执行时会报错,错误信息好像是(记不清了)“客户端响应错误………html / text”
            ServicePointManager.ServerCertificateValidationCallback =
                    delegate(Object obj, X509Certificate certificate, X509Chain chain, SslPolicyErrors errors)
                    { return true; };

            //创建Exchange服务绑定对象
                ExchangeServiceBinding exchangeServer = new ExchangeServiceBinding();
            //创建安全身份凭证
                ICredentials creds = new NetworkCredential("username", "password", "domain");
            //建立信任连接
                exchangeServer.Credentials = creds;
                exchangeServer.Url = "https://Exchange邮件系统的服务器名/EWS/Exchange.asmx";
            
            //定义邮件的收件箱
                DistinguishedFolderIdType[] folderIDArray = new DistinguishedFolderIdType[1];
                folderIDArray[0] = new DistinguishedFolderIdType();
                folderIDArray[0].Id = DistinguishedFolderIdNameType.inbox; //读取inbox文件夹下所有邮件,不包括子文件夹
            //folderIDArray[0].Id = DistinguishedFolderIdNameType.tasks;//读取Task文件夹下的所有任务,不包括子文件夹

            //设置要读取所需满足的条件
                PathToUnindexedFieldType ptuftDisplayName = new PathToUnindexedFieldType();
                ptuftDisplayName.FieldURI = UnindexedFieldURIType.folderDisplayName;

                PathToExtendedFieldType pteftComment = new PathToExtendedFieldType();
                pteftComment.PropertyTag = "0x3004";
                pteftComment.PropertyType = MapiPropertyTypeType.String;

                GetFolderType myfoldertype = new GetFolderType();
                myfoldertype.FolderIds = folderIDArray;
                myfoldertype.FolderShape = new FolderResponseShapeType();
                myfoldertype.FolderShape.BaseShape = DefaultShapeNamesType.IdOnly;
                myfoldertype.FolderShape.AdditionalProperties = new BasePathToElementType[2];
                myfoldertype.FolderShape.AdditionalProperties[0] = ptuftDisplayName;
                myfoldertype.FolderShape.AdditionalProperties[1] = pteftComment;
            
            //获取Exchange邮件系统中指定类型文件夹信息
                GetFolderResponseType myFolder = exchangeServer.GetFolder(myfoldertype);

                FolderInfoResponseMessageType firmtInbox =
                    (FolderInfoResponseMessageType)myFolder.ResponseMessages.Items[0];

                PathToUnindexedFieldType ptuftSubject = new PathToUnindexedFieldType();
                ptuftSubject.FieldURI = UnindexedFieldURIType.itemSubject;

                PathToUnindexedFieldType ptuftBody = new PathToUnindexedFieldType();
                ptuftBody.FieldURI = UnindexedFieldURIType.itemAttachments;

                PathToExtendedFieldType pteftFlagStatus = new PathToExtendedFieldType();
                pteftFlagStatus.PropertyTag = "0x1090";
                pteftFlagStatus.PropertyType = MapiPropertyTypeType.Integer;

            //  定义FindItemType对象,准备获取收件箱中的集合
                FindItemType findItemRequest = new FindItemType();
                findItemRequest.Traversal = ItemQueryTraversalType.Shallow;
                findItemRequest.ItemShape = new ItemResponseShapeType();
                findItemRequest.ItemShape.BaseShape = DefaultShapeNamesType.Default;

                findItemRequest.ParentFolderIds = new FolderIdType[1];
                findItemRequest.ParentFolderIds[0] = firmtInbox.Folders[0].FolderId;

            //获取指定收件箱中的邮件集合
                FindItemResponseType firt = exchangeServer.FindItem(findItemRequest);

                MessageType mt = new MessageType();  //邮件类型
                int newEmail = 0;//Unread email number
                foreach (FindItemResponseMessageType firmtMessage in firt.ResponseMessages.Items)
                {
                    if (firmtMessage.RootFolder.TotalItemsInView > 0)
                    {
                        foreach (ItemType it in ((ArrayOfRealItemsType)firmtMessage.RootFolder.Item).Items)
                        {
                            mt = it as MessageType;
                            if (mt != null)
                            {
                                //this.TextBox1.Text += string.Format(string.Format("是否已读: {0}
", mt.IsRead.ToString()));
                                if (!mt.IsRead) //判断邮件是否是已读还是未读
                                    newEmail++;
                                else
                                    continue;
                            }

                            #region Eg codes

                            Response.Write(string.Format("

标题: {0}
", it.Subject));
                            Response.Write(string.Format("

标题: {0}
", it.Subject) + string.Format("发件人: {0}
", mt.From.Item.Name.ToString()));
                           
                            #endregion
                        }

                        Response.Write(newEmail.ToString());

                    }
                }

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-422223-1-1.html 上篇帖子: Exchange 2010 与 RMS(集成权限管理服务)集成 下篇帖子: Exchange 2016 中客户端和邮件流的网络端口
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表