Exchage 2007 Client Application Functions(2) -- 如何收取邮件
上一篇介绍的Exchange2007客户端程序中怎么发送邮件。
现在,我来简单介绍一下怎么收取邮件。
来看代码:
public Hashtable GetAllMails(DateTime StartDate, DateTime EndDate)
{
try
{
if (null == this.m_esb) return null;

DistinguishedFolderIdType[] dfit = new DistinguishedFolderIdType[1];

//get the root folder ID

dfit[0] = new DistinguishedFolderIdType();

dfit[0].Id = DistinguishedFolderIdNameType.inbox;

//set the props that we want to retrieve

FolderResponseShapeType frst = new FolderResponseShapeType();

frst.BaseShape = DefaultShapeNamesType.AllProperties;

//get the folder

GetFolderType gftRoot = new GetFolderType();

gftRoot.FolderIds = dfit;

gftRoot.FolderShape = frst;

GetFolderResponseType gfrt = this.m_esb.GetFolder(gftRoot);

FolderInfoResponseMessageType firmt = ((FolderInfoResponseMessageType)gfrt.ResponseMessages.Items[0]);

FolderIdType[] fita = new FolderIdType[1];

fita[0] = new FolderIdType();

if (firmt.ResponseClass == ResponseClassType.Success)
{
fita[0].Id = ((FolderInfoResponseMessageType)gfrt.ResponseMessages.Items[0]).Folders[0].FolderId.Id;
}

if (fita[0].Id == null) return new Hashtable();
//request AllProperties

PathToUnindexedFieldType[] ptufta = new PathToUnindexedFieldType[1];

ptufta[0] = new PathToUnindexedFieldType();

ptufta[0].FieldURI = UnindexedFieldURIType.itemItemClass;

ItemResponseShapeType irst = new ItemResponseShapeType();

irst.BaseShape = DefaultShapeNamesType.AllProperties;

irst.IncludeMimeContent = false;

irst.AdditionalProperties = ptufta;

//restrict the returned items to just items of a specific message class

PathToUnindexedFieldType MsgClassField = new

PathToUnindexedFieldType();

MsgClassField.FieldURI = UnindexedFieldURIType.itemItemClass;

ConstantValueType MsgClassToGet = new ConstantValueType();

MsgClassToGet.Value = "IPM.NOTE";

FieldURIOrConstantType MsgClassConstant = new FieldURIOrConstantType();

MsgClassConstant.Item = MsgClassToGet;

IsEqualToType iett = new IsEqualToType();

iett.FieldURIOrConstant = MsgClassConstant;

iett.Item = MsgClassField;

//restrict the returned items greater than a specified date

PathToUnindexedFieldType StartDateReceivedField = new PathToUnindexedFieldType();

StartDateReceivedField.FieldURI = UnindexedFieldURIType.itemDateTimeReceived;

ConstantValueType StartDateReceivedToGet = new ConstantValueType();

StartDateReceivedToGet.Value = StartDate.ToUniversalTime().ToString();

FieldURIOrConstantType StartDateReceivedConstant = new FieldURIOrConstantType();

StartDateReceivedConstant.Item = StartDateReceivedToGet;

IsGreaterThanOrEqualToType igtett = new IsGreaterThanOrEqualToType();

igtett.FieldURIOrConstant = StartDateReceivedConstant;

igtett.Item = StartDateReceivedField;


//restrict the returned items less than a specified date

PathToUnindexedFieldType EndDateReceivedField = new PathToUnindexedFieldType();

EndDateReceivedField.FieldURI = UnindexedFieldURIType.itemDateTimeReceived;

ConstantValueType EndDateReceivedToGet = new ConstantValueType();

EndDateReceivedToGet.Value = EndDate.ToUniversalTime().ToString();

FieldURIOrConstantType EndDateReceivedConstant = new FieldURIOrConstantType();

EndDateReceivedConstant.Item = EndDateReceivedToGet;

IsLessThanOrEqualToType iltett = new IsLessThanOrEqualToType();

iltett.FieldURIOrConstant = EndDateReceivedConstant;

iltett.Item = EndDateReceivedField;

AndType at = new AndType();

at.Items = new SearchExpressionType[3];

at.Items[0] = igtett;

at.Items[1] = iltett;

at.Items[2] = iett;

//TODO: Uncomment the following line if you want to display only email items from folder

// If the following line is commented then all items would be returned from folder,

// for e.g. Reports, Appointment, Meeting Requests, Contacts etc.


RestrictionType rt = new RestrictionType();

rt.Item = at;

//find the items

FindItemType fit = new FindItemType();

fit.ItemShape = irst;

fit.ParentFolderIds = fita;

fit.Restriction = rt;

FindItemResponseType firt = m_esb.FindItem(fit);

// That's it!
ItemType[] list = ((ArrayOfRealItemsType)((FindItemResponseMessageType)firt.ResponseMessages.Items[0]).RootFolder.Item).Items; // Emails We want to.

//foreach (ItemType i in list)
//{
// SetIsReadFlag(i.ItemId);//set is read flag.
//}

Hashtable ht = new Hashtable();
if (list != null)
{
foreach (ItemType itemOne in list)
{
ItemType Item = new ItemType();
ht.Add(Item.ItemId, Item);
}
}
return ht;
}
catch (Exception e)
{
throw new Exception("Error :" + e.Message);
}
}
那么得到的Hashtable 则是目标邮件的队列:)
现在,我来简单介绍一下怎么收取邮件。
来看代码:
public Hashtable GetAllMails(DateTime StartDate, DateTime EndDate)
{
try
{
if (null == this.m_esb) return null;
DistinguishedFolderIdType[] dfit = new DistinguishedFolderIdType[1];
//get the root folder ID
dfit[0] = new DistinguishedFolderIdType();
dfit[0].Id = DistinguishedFolderIdNameType.inbox;
//set the props that we want to retrieve
FolderResponseShapeType frst = new FolderResponseShapeType();
frst.BaseShape = DefaultShapeNamesType.AllProperties;
//get the folder
GetFolderType gftRoot = new GetFolderType();
gftRoot.FolderIds = dfit;
gftRoot.FolderShape = frst;
GetFolderResponseType gfrt = this.m_esb.GetFolder(gftRoot);
FolderInfoResponseMessageType firmt = ((FolderInfoResponseMessageType)gfrt.ResponseMessages.Items[0]);
FolderIdType[] fita = new FolderIdType[1];
fita[0] = new FolderIdType();
if (firmt.ResponseClass == ResponseClassType.Success)
{
fita[0].Id = ((FolderInfoResponseMessageType)gfrt.ResponseMessages.Items[0]).Folders[0].FolderId.Id;
}
if (fita[0].Id == null) return new Hashtable();
//request AllProperties
PathToUnindexedFieldType[] ptufta = new PathToUnindexedFieldType[1];
ptufta[0] = new PathToUnindexedFieldType();
ptufta[0].FieldURI = UnindexedFieldURIType.itemItemClass;
ItemResponseShapeType irst = new ItemResponseShapeType();
irst.BaseShape = DefaultShapeNamesType.AllProperties;
irst.IncludeMimeContent = false;
irst.AdditionalProperties = ptufta;
//restrict the returned items to just items of a specific message class
PathToUnindexedFieldType MsgClassField = new
PathToUnindexedFieldType();
MsgClassField.FieldURI = UnindexedFieldURIType.itemItemClass;
ConstantValueType MsgClassToGet = new ConstantValueType();
MsgClassToGet.Value = "IPM.NOTE";
FieldURIOrConstantType MsgClassConstant = new FieldURIOrConstantType();
MsgClassConstant.Item = MsgClassToGet;
IsEqualToType iett = new IsEqualToType();
iett.FieldURIOrConstant = MsgClassConstant;
iett.Item = MsgClassField;
//restrict the returned items greater than a specified date
PathToUnindexedFieldType StartDateReceivedField = new PathToUnindexedFieldType();
StartDateReceivedField.FieldURI = UnindexedFieldURIType.itemDateTimeReceived;
ConstantValueType StartDateReceivedToGet = new ConstantValueType();
StartDateReceivedToGet.Value = StartDate.ToUniversalTime().ToString();
FieldURIOrConstantType StartDateReceivedConstant = new FieldURIOrConstantType();
StartDateReceivedConstant.Item = StartDateReceivedToGet;
IsGreaterThanOrEqualToType igtett = new IsGreaterThanOrEqualToType();
igtett.FieldURIOrConstant = StartDateReceivedConstant;
igtett.Item = StartDateReceivedField;

//restrict the returned items less than a specified date
PathToUnindexedFieldType EndDateReceivedField = new PathToUnindexedFieldType();
EndDateReceivedField.FieldURI = UnindexedFieldURIType.itemDateTimeReceived;
ConstantValueType EndDateReceivedToGet = new ConstantValueType();
EndDateReceivedToGet.Value = EndDate.ToUniversalTime().ToString();
FieldURIOrConstantType EndDateReceivedConstant = new FieldURIOrConstantType();
EndDateReceivedConstant.Item = EndDateReceivedToGet;
IsLessThanOrEqualToType iltett = new IsLessThanOrEqualToType();
iltett.FieldURIOrConstant = EndDateReceivedConstant;
iltett.Item = EndDateReceivedField;
AndType at = new AndType();
at.Items = new SearchExpressionType[3];
at.Items[0] = igtett;
at.Items[1] = iltett;
at.Items[2] = iett;
//TODO: Uncomment the following line if you want to display only email items from folder
// If the following line is commented then all items would be returned from folder, 
// for e.g. Reports, Appointment, Meeting Requests, Contacts etc.

RestrictionType rt = new RestrictionType();
rt.Item = at;
//find the items
FindItemType fit = new FindItemType();
fit.ItemShape = irst;
fit.ParentFolderIds = fita;
fit.Restriction = rt;
FindItemResponseType firt = m_esb.FindItem(fit);
// That's it!
ItemType[] list = ((ArrayOfRealItemsType)((FindItemResponseMessageType)firt.ResponseMessages.Items[0]).RootFolder.Item).Items; // Emails We want to.
//foreach (ItemType i in list)
//{
// SetIsReadFlag(i.ItemId);//set is read flag.
//}
Hashtable ht = new Hashtable();
if (list != null)
{
foreach (ItemType itemOne in list)
{
ItemType Item = new ItemType();
ht.Add(Item.ItemId, Item);
}
}
return ht;
}
catch (Exception e)
{
throw new Exception("Error :" + e.Message);
}
}那么得到的Hashtable 则是目标邮件的队列:)

浙公网安备 33010602011771号