Solved

Extract Attachment from Exchange server in C# VS 2008

Posted on 2010-11-23
10
801 Views
Last Modified: 2013-12-17
Hi there,

this sounds simple, but after googling to much my head has gone google.

I need to write a service that will scan an email box for new emails and pull out the attachments. The I will unzip them and process them. Sounds simple.

I have use .net to send emails but never to attach to an inbox and check for emails.

What is the simplest and easy way to do this... bearing in mind that the email account will be in my organisation that uses Outlook. I have seen some people use 3rd party POP3 libaries etc but surely this can be done by straight forward .net libaries.

I was going to test this by connecting to my own account and testing so any sample code on this would be great.

Much appreciated.. mick
0
Comment
Question by:MickyMc
  • 4
  • 2
  • 2
10 Comments
 
LVL 70

Accepted Solution

by:
Éric Moreau earned 250 total points
ID: 34195559
0
 

Author Comment

by:MickyMc
ID: 34195737
thanks emoreau..

I put some code together and just curious why you dont use the Interop.Outlook like below

        private void btnConnect_Click(object sender, EventArgs e)
        {
            Outlook.Application outlook = new Outlook.ApplicationClass();
            Outlook.NameSpace ns = outlook.GetNamespace("Mapi");

            object _missing = Type.Missing;
            ns.Logon(_missing, _missing, false, true);


            Outlook.MAPIFolder inbox = ns.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderInbox);

            int unread = inbox.UnReadItemCount;

            foreach (Outlook.MailItem mail in inbox.Items)
            {
                String subject;

                if (mail.Attachments.Count > 0)
                {
                    if (mail.Subject.Length > 20)
                        subject = mail.Subject.Substring(0, 20) + "..";
                    else
                        subject = mail.Subject;

                    dgvEmails.Rows.Add(mail.SenderName, subject, mail.ReceivedTime, mail.UnRead, mail.Attachments.Count);
                    dgvEmails.Refresh();
                    Application.DoEvents();
                }
            }                        
        }

Open in new window


I'm just reading through my outlook inbox and putting the results in a grid. However I get an exception on this for loop..
foreach (Outlook.MailItem mail in inbox.Items)

Open in new window

It tells me invalid cast... but it works for most mails and only throws an exception on some... any ideas
0
 

Author Comment

by:MickyMc
ID: 34196911
OK so it seems that when you iterate through the MailItems there can be Calendar items in your inbox and when you try to cast them... Exception.

Instead you have to iteratie through all the items and try and cast them to an Mail Item.

So back to the question ... is this the best approach  
0
PRTG Network Monitor: Intuitive Network Monitoring

Network Monitoring is essential to ensure that computer systems and network devices are running. Use PRTG to monitor LANs, servers, websites, applications and devices, bandwidth, virtual environments, remote systems, IoT, and many more. PRTG is easy to set up & use.

 
LVL 32

Expert Comment

by:Robberbaron (robr)
ID: 34204973
if you are using Exchange 2007 & 2010, the the EWS API is quite easy to use. http://msdn.microsoft.com/en-us/library/dd637749(EXCHG.80).aspx


0
 

Author Comment

by:MickyMc
ID: 34208287
robberbaron, you could be on the money here. This actually looks good. My only beef is that I cant see how I can specify an email server and login details. I used Interop.Outlook and found that it takes the creditentials from the client Outlook on my destop and just ignores the login creditentials in the api. I took emoreau advice and used http://www.lesnikowski.com/mail/  which is a great little application for the price. I could specify the server and get different users to login into their accounts and pull back the emails. However I'm not sure if my company will allow 3rd party controls to be used other than Microsoft.

So if you can let me know if this supports connections to various exchange servers with differential creditals the points are yours..
0
 
LVL 70

Expert Comment

by:Éric Moreau
ID: 34210017
what do you want to do exactly? if you login using different credentials, yes you will be able to access what those credentials gives you access to.
0
 
LVL 32

Assisted Solution

by:Robberbaron (robr)
Robberbaron (robr) earned 250 total points
ID: 34210377
can certainly connect using various credentials.

All of my coding has been against PublicFolders, where i use a "service account" that can access the entire store.
But impersonation is available too.

see http://msdn.microsoft.com/en-us/library/dd633680%28EXCHG.80%29.aspx for both options.
 This links to the EWS documentation that has a number of useful examples.
0
 

Author Closing Comment

by:MickyMc
ID: 34225363
thanks Gents, I'm splitting the points as both answers where of great help so it comes down to a matter of preference. Thanks for all your help...

regards Mick
0

Featured Post

Free Tool: IP Lookup

Get more info about an IP address or domain name, such as organization, abuse contacts and geolocation.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
How to solve this Exchange 2010 issue? 6 41
Vb.net threads keep increasing 2 36
Name Space error VS2015 1 27
Exchange 2010 to Office 365 Hybrid or Staged? 16 25
This article explains in simple steps how to renew expiring Exchange Server Internal Transport Certificate.
A list of top three free exchange EDB viewers that helps the user to extract a mailbox from an unmounted .edb file and get a clear preview of all emails & other items with just a single click on mailboxes.
This video demonstrates how to sync Microsoft Exchange Public Folders with smartphones using CodeTwo Exchange Sync and Exchange ActiveSync. To learn more about CodeTwo Exchange Sync and download the free trial, go to: http://www.codetwo.com/excha…
A short tutorial showing how to set up an email signature in Outlook on the Web (previously known as OWA). For free email signatures designs, visit https://www.mail-signatures.com/articles/signature-templates/?sts=6651 If you want to manage em…

830 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question