太原app定制,seo sem是什么,ui设计界面效果图,免费设计软件下载网站大全大部分的参考是来自MSDN#xff1a; http://msdn.microsoft.com/en-us/library/exchangewebservices(EXCHG.80).aspx 2007版的Exchange服务器提供了webservice#xff0c;我们可以方便的在.NET程序中添加该引用#xff0c;然后就可以方便的实现邮件的抓取#xff0c;发送…大部分的参考是来自MSDN http://msdn.microsoft.com/en-us/library/exchangewebservices(EXCHG.80).aspx 2007版的Exchange服务器提供了webservice我们可以方便的在.NET程序中添加该引用然后就可以方便的实现邮件的抓取发送删除等功能。我测试是在控制台程序中使用该webservice步骤如下 1 新建一个站点然后添加 exchange webservice 的引用 输入邮件服务器的 OWA 地址http://yourmailserver/EWS/Services.wsdl ,如果是在公司的内部域中添加的过程中要求输入你的域帐号和密码。 2 添加成功以后再项目中导入该命名空间以其他必须的命名空间 ; 3 下面就是具体的代码具体的请看注释 发送邮件 1 public static void CreateEmail( string userName, string passWord, string domain, string url, string mailFrom, string mailTo) 2 { 3 // Create service binding. 4 // 建立service绑定 5 ExchangeServiceBinding esb new ExchangeServiceBinding(); 6 esb.Credentials new NetworkCredential(userName, passWord, domain); 7 esb.Url url; 8 9 // Create the CreateItem request. 10 CreateItemType createItemRequest new CreateItemType();11 12 // Specifiy how the created items are handled13 // 如何处理邮件 14 createItemRequest.MessageDisposition MessageDispositionType.SendAndSaveCopy;15 createItemRequest.MessageDispositionSpecified true ;16 17 // Specify the location of sent items. 18 createItemRequest.SavedItemFolderId new TargetFolderIdType();19 DistinguishedFolderIdType sentitems new DistinguishedFolderIdType();20 sentitems.Id DistinguishedFolderIdNameType.sentitems;21 createItemRequest.SavedItemFolderId.Item sentitems;22 23 // Create the array of items. 24 createItemRequest.Items new NonEmptyArrayOfAllItemsType();25 26 // Create a single e-mail message.27 // 新建一封邮件message对象 28 MessageType message new MessageType();29 message.Subject Tommy Test ;30 message.Body new BodyType();31 message.Body.BodyType1 BodyTypeType.Text;32 message.Body.Value This is tommys test use exchange webservice ;33 message.ItemClass IPM.Note ;34 message.Sender new SingleRecipientType();35 message.Sender.Item new EmailAddressType();36 message.Sender.Item.EmailAddress mailFrom;37 message.ToRecipients new EmailAddressType[ 1 ];38 message.ToRecipients[ 0 ] new EmailAddressType();39 message.ToRecipients[ 0 ].EmailAddress mailTo;40 message.Sensitivity SensitivityChoicesType.Normal;41 42 // Add the message to the array of items to be created. 43 createItemRequest.Items.Items new ItemType[ 1 ];44 createItemRequest.Items.Items[ 0 ] message;45 46 try 47 {48 // Send the request to create and send the e-mail item, and get the response. 49 CreateItemResponseType createItemResponse esb.CreateItem(createItemRequest);50 51 // Determine whether the request was a success. 52 if (createItemResponse.ResponseMessages.Items[ 0 ].ResponseClass ResponseClassType.Error)53 {54 throw new Exception(createItemResponse.ResponseMessages.Items[ 0 ].MessageText);55 } 56 else 57 {58 Console.WriteLine( Item was created );59 Console.ReadLine();60 } 61 } 62 catch (Exception e)63 {64 Console.WriteLine(e.Message);65 Console.ReadLine();66 } 67 } 抓取以及删除邮件 1 public static void GetMailMessage( string userName, string passWord, string domain, string url) 2 { 3 // 绑定exchange服务器 4 ExchangeServiceBinding exchangeServer new ExchangeServiceBinding(); 5 ICredentials creds new NetworkCredential(userName, passWord, domain); 6 7 // 建立信任连接 8 exchangeServer.Credentials creds; 9 exchangeServer.Url url; 10 11 // 定义邮件的收件箱 12 DistinguishedFolderIdType[] folderIDArray new DistinguishedFolderIdType[ 1 ]; 13 folderIDArray[ 0 ] new DistinguishedFolderIdType(); 14 folderIDArray[ 0 ].Id DistinguishedFolderIdNameType.inbox; 15 16 PathToUnindexedFieldType ptuftDisplayName new PathToUnindexedFieldType(); 17 ptuftDisplayName.FieldURI UnindexedFieldURIType.folderDisplayName; 18 19 PathToExtendedFieldType pteftComment new PathToExtendedFieldType(); 20 pteftComment.PropertyTag 0x3004 ; // PR_COMMENT 21 pteftComment.PropertyType MapiPropertyTypeType.String; 22 23 // 定义GetFolderType对象设置相应属性 24 GetFolderType myfoldertype new GetFolderType(); 25 myfoldertype.FolderIds folderIDArray; 26 myfoldertype.FolderShape new FolderResponseShapeType(); 27 myfoldertype.FolderShape.BaseShape DefaultShapeNamesType.IdOnly; 28 myfoldertype.FolderShape.AdditionalProperties new BasePathToElementType[ 2 ]; 29 myfoldertype.FolderShape.AdditionalProperties[ 0 ] ptuftDisplayName; 30 myfoldertype.FolderShape.AdditionalProperties[ 1 ] pteftComment; 31 32 // 获取服务器中的文件夹的集合 33 GetFolderResponseType myFolder exchangeServer.GetFolder(myfoldertype); 34 35 // 获取收件箱 36 FolderInfoResponseMessageType firmtInbox 37 (FolderInfoResponseMessageType)myFolder.ResponseMessages.Items[ 0 ]; 38 39 // 显示收件箱 40 Console.WriteLine( string .Format( got folder: {0} , firmtInbox.Folders[ 0 ].DisplayName)); 41 42 43 PathToUnindexedFieldType ptuftSubject new PathToUnindexedFieldType(); 44 ptuftSubject.FieldURI UnindexedFieldURIType.itemSubject; 45 46 PathToUnindexedFieldType ptuftBody new PathToUnindexedFieldType(); 47 ptuftBody.FieldURI UnindexedFieldURIType.itemAttachments; 48 49 PathToExtendedFieldType pteftFlagStatus new PathToExtendedFieldType(); 50 pteftFlagStatus.PropertyTag 0x1090 ; // PR_FLAG_STATUS 51 pteftFlagStatus.PropertyType MapiPropertyTypeType.Integer; 52 53 // 定义FindItemType对象准备获取收件箱中的集合 54 FindItemType findItemRequest new FindItemType(); 55 findItemRequest.Traversal ItemQueryTraversalType.Shallow; 56 findItemRequest.ItemShape new ItemResponseShapeType(); 57 findItemRequest.ItemShape.BaseShape DefaultShapeNamesType.AllProperties; 58 59 60 findItemRequest.ParentFolderIds new FolderIdType[ 1 ]; 61 findItemRequest.ParentFolderIds[ 0 ] firmtInbox.Folders[ 0 ].FolderId; 62 63 // 获取邮件 64 FindItemResponseType firt exchangeServer.FindItem(findItemRequest); 65 66 // 循环迭代每一封邮件 67 foreach (FindItemResponseMessageType firmtMessage in firt.ResponseMessages.Items) 68 { 69 // 如果包含邮件显示出来 70 if (firmtMessage.RootFolder.TotalItemsInView 0 ) 71 { 72 // 循环迭代每一封邮件详细信息 73 foreach (ItemType it in ((ArrayOfRealItemsType)firmtMessage.RootFolder.Item).Items) 74 { 75 Console.WriteLine( string .Format( 邮件标题: {0} , it.Subject)); 76 Console.WriteLine( string .Format( 发件人: {0} ,((MessageType)(it)).From.Item.Name)); 77 Console.WriteLine( string .Format( 收件人: {0} , it.DisplayTo)); 78 Console.WriteLine( string .Format( 抄送: {0} , it.DisplayCc)); 79 Console.WriteLine( string .Format( 大小: {0} , it.Size.ToString())); 80 Console.WriteLine( string .Format( 重要性: {0} , it.Importance.ToString())); 81 Console.WriteLine( string .Format( 是否已读: {0} , ((MessageType)(it)).IsRead.ToString())); 82 Console.WriteLine( string .Format( 是否有附件: {0} , it.HasAttachments.ToString())); 83 // Console.WriteLine(string.Format(发送时间{0}, it.DateTimeSent.ToString())); 84 Console.WriteLine( string .Format( 接收时间: {0} , it.DateTimeReceived.ToString())); 85 86 87 // 通过GetItemType对象来得到邮件的正文 88 GetItemType getItemRequest new GetItemType(); 89 // 设置必要的属性 90 getItemRequest.ItemIds new BaseItemIdType[ 1 ]; 91 getItemRequest.ItemIds[ 0 ] (BaseItemIdType)it.ItemId; 92 getItemRequest.ItemShape new ItemResponseShapeType(); 93 getItemRequest.ItemShape.BaseShape DefaultShapeNamesType.AllProperties; 94 getItemRequest.ItemShape.IncludeMimeContent true ; 95 96 // 获得服务器的相应 97 GetItemResponseType getItemResponse exchangeServer.GetItem(getItemRequest); 98 99 // 得到邮件体 100 ItemInfoResponseMessageType getItemResponseMessage 101 getItemResponse.ResponseMessages.Items[ 0 ] as 102 ItemInfoResponseMessageType;103 104 // 显示邮件正文 105 Console.WriteLine( 邮件格式{0} , getItemResponseMessage.Items.Items[ 0 ].Body.BodyType1);106 Console.WriteLine( string .Format( 正文{0} , getItemResponseMessage.Items.Items[ 0 ].Body.Value));107 108 // 获取当前邮件的附件集合 109 if (getItemResponseMessage.Items.Items[ 0 ].HasAttachments)110 {111 AttachmentType[] attachments getItemResponseMessage.Items.Items[ 0 ].Attachments;112 113 // 循环获取当前邮件的每一个附件 114 for ( int i 0 ; i attachments.Length - 1 ;i )115 {116 // 定义GetAttachmentType设置相应的属性进行模式验证来获取附件 117 GetAttachmentType getAttachment new GetAttachmentType();118 RequestAttachmentIdType[] attachmentIDArry new RequestAttachmentIdType[ 1 ];119 attachmentIDArry[ 0 ] new RequestAttachmentIdType();120 attachmentIDArry[ 0 ].Id attachments[i].AttachmentId.Id;121 getAttachment.AttachmentIds attachmentIDArry;122 getAttachment.AttachmentShape new AttachmentResponseShapeType();123 124 // 获取附件 125 GetAttachmentResponseType getAttachmentResponse exchangeServer.GetAttachment(getAttachment);126 127 // 返回服务器的响应对象 128 AttachmentInfoResponseMessageType responseMessage getAttachmentResponse.ResponseMessages.Items[ 0 ] as AttachmentInfoResponseMessageType;129 if (responseMessage ! null )130 {131 // 没有异常显示附件信息 132 if (responseMessage.ResponseClass ResponseClassType.Success responseMessage.Attachments ! null 133 responseMessage.Attachments.Length 0 )134 {135 AttachmentType attachment responseMessage.Attachments[ 0 ];136 Console.WriteLine( 附件名{0}\n , attachment.Name);137 // Console.WriteLine(附件类型{0}\n, attachment.ContentId); 138 } 139 } 140 } 141 } 142 143 // 删除当前邮件 144 DeleteItemType deleteItem new DeleteItemType();145 deleteItem.ItemIds new BaseItemIdType[ 1 ];146 147 // 将要删除邮件的ID,changekey赋值给ItemIdType对象 148 ItemIdType itemIDType new ItemIdType();149 itemIDType.Id it.ItemId.Id;150 itemIDType.ChangeKey it.ItemId.ChangeKey;151 152 deleteItem.ItemIds[ 0 ] itemIDType;153 154 // 执行删除 155 DeleteItemResponseType deleteResponse exchangeServer.DeleteItem(deleteItem);156 157 // 删除成功 158 if (deleteResponse.ResponseMessages.Items.Length 0 deleteResponse.ResponseMessages.Items[ 0 ].ResponseClass ResponseClassType.Success)159 {160 Console.WriteLine( 删除成功 );161 } 162 163 } 164 } 165 166 } 167 } 本文来自CSDN博客转载请标明出处http://blog.csdn.net/thy822/archive/2010/09/09/5873244.aspx 第一次做webdav方法读取excahnge邮件方面的东西将网上查找到的代码改成了.ascx控件后台代码如下 代码 using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Web;using System.Web.UI;using System.Web.UI.WebControls;using System.Net;using System.Data;using System.Xml;namespace SharePoint.Exchange2003{ public class unreadmailcontrol : UserControl { GridView GridView1; protected void Page_Load(object sender, EventArgs e) { try { GridView1 (GridView)this.FindControl(GridView1); GridView1.DataSource GetUnReadMail(); GridView1.DataBind(); } catch (Exception ex) { } } private DataTable GetUnReadMail() { string url http://ip/exchange/; //指定Exchange服务器地址 System.Net.HttpWebRequest Request; System.Net.WebResponse Response; System.Net.CredentialCache MyCredentialCache; string strUserName administrator; //指定登录的用户名 string strRootURI url strUserName.Trim() /收件箱/; //得到要访问邮箱的WebDAV地址 string strPassword test; //指定该用户的密码 string strDomain test; //指定域名 string strQuery ; byte[] bytes null; System.IO.Stream RequestStream null; System.IO.Stream ResponseStream null; XmlDocument ResponseXmlDoc null; XmlNodeList HrefNodes null; XmlNodeList SizeNodes null; int count 0; try { // 用SQL查询WebDAV返回结果中的unreadcount节点. //strQuery ?xml version\1.0\?D:searchrequest xmlns:D \DAV:\ // D:sqlSELECT \DAV:displayname\,\urn:schemas:httpmail:subject\,\urn:schemas:httpmail:unreadcount\ FROM \ strRootURI \ // /D:sql/D:searchrequest; strQuery ?xml version\1.0\?D:searchrequest xmlns:D \DAV:\ D:sqlSELECT \urn:schemas:httpmail:importance\,\urn:schemas:httpmail:from\,\urn:schemas:httpmail:read\,\urn:schemas:httpmail:datereceived\,\urn:schemas:httpmail:subject\,\urn:schemas:httpmail:hasattachment\, \DAV:contentclass\,\DAV:getcontentlength\,\DAV:displayname\ FROM \ strRootURI \ WHERE \DAV:ishidden\ false AND \DAV:isfolder\ false /D:sql/D:searchrequest; // 创建新的CredentialCache对象构建身份凭据 MyCredentialCache new System.Net.CredentialCache(); MyCredentialCache.Add(new System.Uri(strRootURI), NTLM, new System.Net.NetworkCredential(strUserName, strPassword, strDomain) ); // Create the HttpWebRequest object. Request (System.Net.HttpWebRequest)HttpWebRequest.Create(strRootURI); // 指定HttpWebRequest的身份凭据此处为关键所在。如果使用之前 // 创建的MyCredentialCache则这个身份凭据是可以从Web服务器传递 // 到Exchange服务器的但是这样带来的问题也很明显就是不能够自 // 动获取当前登录到域的用户的身份。即便已经成功登录到域那也只 // 能通过form再次输入用户名密码。因此我在这里用的是 // Request.Credentials CredentialCache.DefaultCredentials // 这样便可以获得当前用户的凭据但是这样带来的问题便是上面提到的 // 身份凭据无法传递的问题解决方法请关注下篇文章。 Request.Credentials MyCredentialCache; // 指定WebDAV的SEARCH方法 Request.Method SEARCH; // Encode the body using UTF-8. bytes Encoding.UTF8.GetBytes((string)strQuery); // Set the content header length. This must be // done before writing data to the request stream. Request.ContentLength bytes.Length; // Get a reference to the request stream. RequestStream Request.GetRequestStream(); // Write the SQL query to the request stream. RequestStream.Write(bytes, 0, bytes.Length); // Close the Stream object to release the connection // for further use. RequestStream.Close(); // Set the content type header. Request.ContentType text/xml; // Send the SEARCH method request and get the // response from the server. Response (HttpWebResponse)Request.GetResponse(); // Get the XML response stream. ResponseStream Response.GetResponseStream(); // 创建XmlDocument对象并获取收件箱的unreadcount节点的值 ResponseXmlDoc new XmlDocument(); ResponseXmlDoc.Load(ResponseStream); //HrefNodes ResponseXmlDoc.GetElementsByTagName(a:displayname); //SizeNodes ResponseXmlDoc.GetElementsByTagName(d:unreadcount); //for (int i 0; i HrefNodes.Count; i) //{ // if (HrefNodes[i].InnerText 收件箱) // count int.Parse(SizeNodes[i].InnerText); //} //ResponseStream.Close(); //Response.Close(); XmlNodeList idNodes ResponseXmlDoc.GetElementsByTagName(a:displayname); XmlNodeList SenderNodes ResponseXmlDoc.GetElementsByTagName(d:from); XmlNodeList importanceNodes ResponseXmlDoc.GetElementsByTagName(d:importance); XmlNodeList contextclassNodes ResponseXmlDoc.GetElementsByTagName(a:contentclass); XmlNodeList readNodes ResponseXmlDoc.GetElementsByTagName(d:read); XmlNodeList datareceiveNodes ResponseXmlDoc.GetElementsByTagName(d:datereceived); XmlNodeList subjectNodes ResponseXmlDoc.GetElementsByTagName(d:subject); XmlNodeList getcontentlengthNodes ResponseXmlDoc.GetElementsByTagName(a:getcontentlength); XmlNodeList hasattachmentNodes ResponseXmlDoc.GetElementsByTagName(d:hasattachment); XmlNodeList hrefNodes ResponseXmlDoc.GetElementsByTagName(a:href); DataTable dt new DataTable(); dt.Columns.Add(Subject); dt.Columns.Add(Href); dt.Columns.Add(Time); dt.Columns[Time].DataType Type.GetType(System.DateTime); for (int j 0; j readNodes.Count; j) { //if (readNodes[j].InnerText 1)continue;//只取未读邮件 dt.Rows.Add(subjectNodes[j].InnerText, hrefNodes[j].InnerText, DateTime.Parse(datareceiveNodes[j].InnerText)); } ResponseStream.Close(); Response.Close(); return dt; } catch { return null; } } }} 前台展示页面.ascx如下 代码 % Control LanguageC# InheritsSharePoint.Exchange2003.unreadmailcontrol, SharePoint.Exchange2003, Version1.0.0.0, Cultureneutral, PublicKeyToken7da4c70ffa3a2438 % style typetext/css img { border-style: none; } body { font-size: 12px; } .td { } a { text-decoration: none; color: #616161; } #header { width: 225px; height: 20px; background-repeat: no-repeat; background-image: url(/_layouts/images/header.png); padding-left: 180px; padding-top: 4px; } #header a { color: #B88A00; } #dataTable { height: 259px; width: 223px; border-style: solid; border-width: 1px; border-color: Gray; } #mainDiv { } /style div idmainDiv div idheader a hrefhttp://ip/exchange/ target_blank更多.../a/div div iddataTable asp:GridView IDGridView1 runatserver ShowHeaderFalse AutoGenerateColumnsFalse Width223px RowStyle-Height23px RowStyle-CssClasstd AllowPagingTrue BorderColor#CCCCCC BorderStyleGroove PagerSettings VisibleFalse / RowStyle CssClasstd Height23px/RowStyle Columns asp:TemplateField ShowHeaderFalse ItemTemplate img alt src/_layouts/images/email.jpg / /ItemTemplate /asp:TemplateField asp:TemplateField ShowHeaderFalse ItemStyle-Height23 ItemTemplate div styletext-overflow: ellipsis; white-space: nowrap; overflow: hidden; width: 145px; padding-left: 3px; a idLinkButton1 runatserver href%# DataBinder.Eval(Container.DataItem, Href) % target_blank %# DataBinder.Eval(Container.DataItem, Subject) % /a /div /ItemTemplate ItemStyle Height23px/ItemStyle /asp:TemplateField asp:BoundField DataFieldTime DataFormatString{0:MM-dd} ItemStyle Width45px ForeColorGray Font-NamesVerdana HorizontalAlign Center Font-Size10px/ItemStyle /asp:BoundField /Columns /asp:GridView /div /div 转载于:https://www.cnblogs.com/ahjxxy/archive/2010/11/14/1876887.html