I am trying to use the following code to connect and download an attachment from email in an inbox using C# and Exchange Web Services but I am getting a 'System.ArgumentOutOfRangeException' error and I cant see why. I have googled for an answer but i cant find one or the answers I find are for very old versions of EWS.
I know that the rest of the code generally works as I can access other information relating to the email, just not access the attachment.
Cany anyone show me the error of my ways?
Thanks in advance,
James
static void Main(string[] args)
{
ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2007_SP1);
service.Credentials = new NetworkCredential("MYLOGIN", "MYPASSWORD", "MYDOMAIN");
service.Url = new Uri("https://MYMAILSERVER/EWS/Exchange.asmx");
ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };
FindItemsResults<Item> findResults = service.FindItems(WellKnownFolderName.Inbox, new ItemView(1000));
foreach (Item item in findResults.Items)
{
if (item.HasAttachments && item.Attachments[0] is FileAttachment)
{
FileAttachment fileAttachment = item.Attachments[0] as FileAttachment;
fileAttachment.Load("C:\\temp\\" + fileAttachment.Name);
}
}
}
}
Solved but new problem
I have sorted the issue now by changing the 'foreach (Item item in findResults.Items)' to 'foreach (EmailMessage item in findResults.Items)' but now I need to find out how to enumerate through the attachments - any ideas anyone?
Check your profile. If you're running on light mode, attachments are not being downloaded with message.
add following line
item.Load() // loads the entire message with attachment
The answer to your new problem is
ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2007_SP1);
//service.Credentials = new NetworkCredential( "{Active Directory ID}", "{Password}", "{Domain Name}" );
service.AutodiscoverUrl("[email protected]");
FindItemsResults<Item> findResults = service.FindItems(
WellKnownFolderName.Inbox,
new ItemView(10));
foreach (Item item in findResults.Items)
{
Console.WriteLine(item.Subject);
item.Load();
if(item.HasAttachments)
{
foreach (var i in item.Attachments)
{
FileAttachment fileAttachment = i as FileAttachment;
fileAttachment.Load();
Console.WriteLine("FileName: " + fileAttachment.Name);
}
}
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With