在C#中为多个ID读取多个Outlook电子邮件

时间:2017-05-31 05:29:44

标签: c# email outlook office-interop

参考帖子中提到的答案: Reading Outlook Mail with C#

此代码适用于单个帐户,但当前代码的问题在于它会读取默认ID的电子邮件,该电子邮件设置为Outlook应用程序中的第一个。

例如,如果" abcxyz@outlook.com"被设置为第一个帐户和" decxyz@outlook.com"设置为第二个,然后它只读取第一个id的收件箱,即" abcxyz@outlook.com"。我尝试在代码中做一些修改,但它没有用。以下是我的代码:

  public static void OutLookMailStart(string EmailID, string password)
    {
        Microsoft.Office.Interop.Outlook.Application app = null;
        Microsoft.Office.Interop.Outlook._NameSpace ns = null;
        Microsoft.Office.Interop.Outlook.PostItem item = null;
        Microsoft.Office.Interop.Outlook.MAPIFolder inboxFolder = null;
        Microsoft.Office.Interop.Outlook.MAPIFolder subFolder = null;
        Microsoft.Office.Interop.Outlook.MailItem mailItem = null;
        try
        {
            app = new Microsoft.Office.Interop.Outlook.Application();
            ns = app.GetNamespace("MAPI");

            ns.Logon(EmailID, password, false, true);
            inboxFolder = ns.GetDefaultFolder(Microsoft.Office.Interop.Outlook.OlDefaultFolders.olFolderInbox);

            foreach (Object mail in inboxFolder.Items)
            {
                if ((mail as MailItem) != null && (mail as MailItem).UnRead == true)
                {
                    // Email Subject 
                    string Subject = (mail as MailItem).Subject.ToString();
                    if (Subject.Contains(FileDomain))
                    {
                        // Email Body
                        var ReplyText = ExtractReply(((mail as MailItem).Body.ToString()), FromTrimName);
                    }
                    // (mail as MailItem).UnRead = false;
                    (mail as MailItem).Save();
                }
            }
        }
        catch (System.Exception ex)
        {
            throw ex;
        }
        finally
        {
            ns.Logoff();
            inboxFolder = null;
            subFolder = null;
            mailItem = null;
            app = null;
        }}

任何形式的帮助都将受到赞赏。

2 个答案:

答案 0 :(得分:2)

 public static void OutLookMailStart(string EmailID, string password)
        {
            Microsoft.Office.Interop.Outlook.Application app = null;
            Microsoft.Office.Interop.Outlook._NameSpace ns = null;
            Microsoft.Office.Interop.Outlook.PostItem item = null;
            Microsoft.Office.Interop.Outlook.MAPIFolder inboxFolder = null;
            Microsoft.Office.Interop.Outlook.MAPIFolder subFolder = null;
            Microsoft.Office.Interop.Outlook.MailItem mailItem = null;


            try
            {
                app = new Microsoft.Office.Interop.Outlook.Application();
                ns = app.GetNamespace("MAPI");

                ns.Logon(EmailID, password, true, true);

                inboxFolder = ns.Folders[EmailID].Folders[2];

                foreach (Microsoft.Office.Interop.Outlook.MailItem mailItemm in inboxFolder.Items)
                {
                    if (mailItemm.UnRead) // I only process the mail if unread
                    {
                        // Email Subject 
                        Console.WriteLine("Subject : {0}", mailItemm.Subject);
                        string Subject = mailItemm.Subject;
                        if (!string.IsNullOrEmpty(Subject) && !string.IsNullOrWhiteSpace(Subject))
                        {
                            if (Subject.Contains(FileDomain))
                            {


                                var SenderName = mailItemm.Sender.Name;
                                //Email Body
                                Console.WriteLine("Accounts: {0}", mailItemm.Body);




                                // Read All Attachements  
                                var attachments = (mailItemm as MailItem).Attachments;
                                if (attachments != null && attachments.Count > 0)
                                {
                                    for (int i = 1; i <= attachments.Count; i++)
                                    {
                                        attachments[i].SaveAsFile(tempFolderPath + (mailItemm as MailItem).Attachments[i].FileName);


                                    }
                                }
                            }
                        }
                    }
                }
            }
            catch (System.Exception ex)
            {
                throw ex;
            }
            finally
            {
                ns.Logoff();
                inboxFolder = null;
                subFolder = null;
                mailItem = null;
                app = null;
            }
        }

答案 1 :(得分:0)

使用ExchangeService服务

public static void Cloud_OutLookMailStart(string EmailID, string password, string StoreFilePath)
{
    try
    {
        LogHelper.LogMessage("<----- Cloud_OutLookMailStart Start ----->");

        DistributionReplyEntity ObjDistributionReplyEntity = new DistributionReplyEntity();
        ObjDistributionReplyEntity.OutLookEmailID = EmailID;
        ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2010_SP1);
        service.Credentials = new WebCredentials(EmailID, password);
        service.TraceEnabled = true;
        service.TraceFlags = TraceFlags.All;
        //service.Url = new Uri("https://IP/EWS/Exchange.asmx");
        service.AutodiscoverUrl(EmailID, RedirectionUrlValidationCallback);

        Microsoft.Exchange.WebServices.Data.Folder inbox = Microsoft.Exchange.WebServices.Data.Folder.Bind(service, WellKnownFolderName.Inbox);

        var items = service.FindItems(
        //Find Mails from Inbox of the given Mailbox
        new FolderId(WellKnownFolderName.Inbox, new Mailbox(EmailID)),
        //Filter criterion
        //  new SearchFilter.SearchFilterCollection(LogicalOperator.And, new SearchFilter[] {
        //  new SearchFilter.ContainsSubstring(ItemSchema.Subject, ConfigurationManager.AppSettings["ValidEmailIdentifier"].ToString()),
        new SearchFilter.IsEqualTo(EmailMessageSchema.IsRead, false),
        //  }),

        //View Size as 15


        new ItemView(50));

        Console.WriteLine("Email {0}, unread Total Count{1}", EmailID, items.Count());


        foreach (Item item in items)
        {
            EmailMessage email = EmailMessage.Bind(service, new ItemId(item.Id.UniqueId.ToString()));

            if (!string.IsNullOrEmpty(email.Subject) && !string.IsNullOrWhiteSpace(email.Subject))
            {
                var subject = email.Subject.ToString();
                String[] arr = subject.Split(' ');

                String firstWord = arr[0];
                if (firstWord != "Undeliverable:")
                {
                    //PROCESS EMAIL MESSAGE 
                    Console.WriteLine("Subject :{0}", email.Subject);
                    // TO
                    if (email.ToRecipients.Count > 0)
                    {

                        var propertySet = new PropertySet(ItemSchema.UniqueBody);
                        EmailMessage email2 = EmailMessage.Bind(service, email.Id, propertySet);
                        EmailMessage str = (EmailMessage)email2;
                        string str1 = str.UniqueBody.Text.ToString();
                        var EmailBody = ExtractReply(str1, "");
                        // string ReceiverEmail = email.ReceivedBy != null?email.ReceivedBy.Address:"" ;
                        // Email Body 

                        // var subjectEmail = ExtractReply(email.Body.ToString(), email.ReceivedBy.Address);

                        Console.WriteLine("Body {0}", EmailBody.ToString()); // Body
                        ObjDistributionReplyEntity.EmailBody = EmailBody;

                        string maltipleTo = string.Empty;
                        foreach (var toemailid in email.ToRecipients)
                        {
                            if (string.IsNullOrEmpty(maltipleTo))
                            {
                                maltipleTo = toemailid.Address.ToString();
                            }
                            else
                            {
                                maltipleTo += ";" + toemailid.Address.ToString();
                            }
                        }
                        Console.WriteLine("TO {0}", maltipleTo.ToString()); // TO
                        ObjDistributionReplyEntity.ReplyTO = maltipleTo.ToString();
                    }
                    // CC
                    if (email.CcRecipients.Count > 0)
                    {
                        string maltipleCC = string.Empty;
                        foreach (var ccemailid in email.CcRecipients)
                        {

                            if (string.IsNullOrEmpty(maltipleCC))
                            {
                                maltipleCC = ccemailid.Address.ToString();
                            }
                            else
                            {
                                maltipleCC += ";" + ccemailid.Address.ToString();
                            }
                        }

                        Console.WriteLine("CC {0}", maltipleCC.ToString());
                        ObjDistributionReplyEntity.ReplyCC = maltipleCC.ToString();
                    }
                    // Form
                    if (email.Sender.Address != "")
                    {
                        ObjDistributionReplyEntity.ReplyForm = email.Sender.Address;
                    }

                    Console.WriteLine("Subject {0}", email.Subject.ToString()); // Subject
                    ObjDistributionReplyEntity.Subject = email.Subject.ToString();


                    ObjDistributionReplyEntity.TransactionsID = 0;
                    ObjDistributionReplyEntity.IsProjectRelated = 0;
                    string Subject = email.Subject;




                    ObjDistributionReplyEntity.ReceivedTime = email.DateTimeReceived;

                    var getSharePointFileUrl = GetAttachmentsFromEmail(service, item.Id, StoreFilePath, ObjDistributionReplyEntity.TransactionsID);


                    email.IsRead = true;
                    email.Update(ConflictResolutionMode.AlwaysOverwrite);
                }
            }
        }

        LogHelper.LogMessage("<----- Cloud_OutLookMailStart Start ----->");

    }
    catch (Exception ex)
    {
        LogHelper.LogError("OutLookMailStart -> Cloud_OutLookMailStart Exception");
        LogHelper.LogError("Exception Message :" + ex.Message);
        if (ex.InnerException != null)
        {
            LogHelper.LogError("Exception InnerException :" + ex.InnerException);
        }
        LogHelper.LogError("Exception StackTrace :" + ex.StackTrace);
        LogHelper.LogError("OutLookMailStart -> Cloud_OutLookMailStart Exception");
    }
}

公共静态字符串GetAttachmentsFromEmail(ExchangeService服务,ItemId itemId,字符串StoreFilePath,Int64 TransactionsID)     {

    try
    {
        LogHelper.LogMessage("<----- GetAttachmentsFromEmail Start ----->");





        // Bind to an existing message item and retrieve the attachments collection.
        // This method results in an GetItem call to EWS.
        EmailMessage message = EmailMessage.Bind(service, itemId, new PropertySet(ItemSchema.Attachments));
        List<ResponseMessage> ObjResponseMessage = new List<ResponseMessage>();
        // Iterate through the attachments collection and load each attachment.
        foreach (Attachment attachment in message.Attachments)
        {
            if (attachment is FileAttachment)
            {
                FileAttachment fileAttachment = attachment as FileAttachment;

                // Load the attachment into a file.
                // This call results in a GetAttachment call to EWS.

                fileAttachment.Load(StoreFilePath + fileAttachment.Name);


                string FileName = fileAttachment.Name;





                LogHelper.LogMessage("OutLookMailStart In attachments File Name :" + FileName );


                Console.WriteLine("File attachment name: " + fileAttachment.Name);
            }
            else // Attachment is an item attachment.
            {
                ItemAttachment itemAttachment = attachment as ItemAttachment;

                // Load attachment into memory and write out the subject.
                // This does not save the file like it does with a file attachment.
                // This call results in a GetAttachment call to EWS.
                itemAttachment.Load();

                Console.WriteLine("Item attachment name: " + itemAttachment.Name);
            }
        }
    }
    catch (Exception ex)
    {
        LogHelper.LogError("OutLookMailStart -> GetAttachmentsFromEmail Exception");
        LogHelper.LogError("Exception Message :" + ex.Message);
        if (ex.InnerException != null)
        {
            LogHelper.LogError("Exception InnerException :" + ex.InnerException);
        }
        LogHelper.LogError("Exception StackTrace :" + ex.StackTrace);
        LogHelper.LogError("OutLookMailStart -> GetAttachmentsFromEmail Exception"); ;
    }
    LogHelper.LogMessage("<----- GetAttachmentsFromEmail End ----->");


}