gpt4 book ai didi

c# - 在 C# 中访问交换电子邮件

转载 作者:可可西里 更新时间:2023-11-01 07:50:06 24 4
gpt4 key购买 nike

你知道有没有办法?

我用过 this library访问 pop3 服务器,但它不适用于交换服务器。

您是否知道任何其他库或一段代码可以告诉我如何去做?

我无法更改服务器上的任何设置。

最佳答案

如果您使用 Exchange 2007 并启用了 Web 服务,这很容易。我在我的 VS2008 项目中添加了一个 2.0 风格的经典 Web Reference,我可以收到这样的邮件消息:

// exchange 2007 lets us use web services to check mailboxes.
using (ExchangeServiceBinding exchangeServer = new ExchangeServiceBinding())
{
ICredentials creds = new NetworkCredential("user","password");
exchangeServer.Credentials = creds;
exchangeServer.Url = "https://myexchangeserver.com/EWS/Exchange.asmx";
FindItemType findItemRequest = new FindItemType();
findItemRequest.Traversal = ItemQueryTraversalType.Shallow;

// define which item properties are returned in the response
ItemResponseShapeType itemProperties = new ItemResponseShapeType();
itemProperties.BaseShape = DefaultShapeNamesType.AllProperties;
findItemRequest.ItemShape = itemProperties;

// identify which folder to search
DistinguishedFolderIdType[] folderIDArray = new DistinguishedFolderIdType[1];
folderIDArray[0] = new DistinguishedFolderIdType();
folderIDArray[0].Id = DistinguishedFolderIdNameType.inbox;

// add folders to request
findItemRequest.ParentFolderIds = folderIDArray;

// find the messages
FindItemResponseType findItemResponse = exchangeServer.FindItem(findItemRequest);

// read returned
FindItemResponseMessageType folder = (FindItemResponseMessageType)findItemResponse.ResponseMessages.Items[0];
ArrayOfRealItemsType folderContents = new ArrayOfRealItemsType();
folderContents = (ArrayOfRealItemsType)folder.RootFolder.Item;
ItemType[] items = folderContents.Items;

// if no messages were found, then return null -- we're done
if (items == null || items.Count() <= 0)
return null;

// FindItem never gets "all" the properties, so now that we've found them all, we need to get them all.
BaseItemIdType[] itemIds = new BaseItemIdType[items.Count()];
for (int i = 0; i < items.Count(); i++)
itemIds[i] = items[i].ItemId;

GetItemType getItemType = new GetItemType();
getItemType.ItemIds = itemIds;
getItemType.ItemShape = new ItemResponseShapeType();
getItemType.ItemShape.BaseShape = DefaultShapeNamesType.AllProperties;
getItemType.ItemShape.BodyType = BodyTypeResponseType.Text;
getItemType.ItemShape.BodyTypeSpecified = true;

GetItemResponseType getItemResponse = exchangeServer.GetItem(getItemType);
ItemType[] messages = new ItemType[getItemResponse.ResponseMessages.Items.Count()];

for (int j = 0; j < messages.Count(); j++)
messages[j] = ((ItemInfoResponseMessageType)getItemResponse.ResponseMessages.Items[j]).Items.Items[0];

return messages;
}

“messages”变量将是从 exchange 返回的 ItemType 对象数组,这些对象具有您期望的邮件消息的所有属性(正文、附件等)。希望对您有所帮助!

关于c# - 在 C# 中访问交换电子邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/865267/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com