2

Outlook 规则将所有来自 Facebook 的邮件放入 Facebook 文件夹中,一个外部进程正在运行,如此处详述,以通过 Outlook 规则进程不可行的方式分离该文件夹的内容,最初我让这个进程在 Outlook 中的 VBA 中运行但它是一头猪窒息前景资源。所以我决定把它从外部扔掉,因为我想提高我的 c# 技能,这同时也是一个转换。无论如何,邮件处理工作正常,项目将更正子文件夹,但由于某种原因,在 i 次迭代后退出的临时约束没有按应有的方式进行。如果 Facebook 文件夹中有 800 封邮件(我是许多群组的成员),它只运行 400 次迭代,如果有 30 封,它只处理 15 次等等。

我一辈子都看不懂为什么——谁能把我说得对?谢谢

        private void PassFBMail()
        {
            //do something
            // result = MsgBox("Are you sure you wish to run the 'Allocate to FB Recipient' process", vbOKCancel, "Hold up")
            //If result = Cancel Then Exit Sub
            var result = MessageBox.Show("Are you sure you wish to run the Are you sure you wish to run the 'Allocate to SubFolders' process","Sure?",MessageBoxButtons.OKCancel,MessageBoxIcon.Question,MessageBoxDefaultButton.Button2);
            if (result == DialogResult.Cancel)
            {
                return; 
            }

            try
            {
                OutLook._Application outlookObj = new OutLook.Application();

                OutLook.MAPIFolder inbox = (OutLook.MAPIFolder)
                           outlookObj.Session.GetDefaultFolder(OutLook.OlDefaultFolders.olFolderInbox);

                OutLook.MAPIFolder fdr = inbox.Folders["facebook"];
                OutLook.MAPIFolder fdrForDeletion = inbox.Folders["_ForDeletion"];
//                foreach (OutLook.MAPIFolder fdr in inbox.Folders)
//                {
//                    if (fdr.Name == "facebook")
//                    {
//                        break;
//                    }
//                }

                //openFacebookFolder Loop through mail
                           //LOOPING THROUGH MAIL ITEMS IN THAT FOLDER.
                Redemption.SafeMailItem sMailItem = new Redemption.SafeMailItem();

                int i = 0;                
                foreach ( Microsoft.Office.Interop.Outlook._MailItem mailItem in fdr.Items.Restrict("[MessageClass] = 'IPM.Note'"))
                {
                    //temp only process 500 mails
                    i++;
                    if (i == 501) 
                    {
                        break;
                    }
//                  eml.Item = em
//                  If eml.To <> "" And eml.ReceivedByName <> "" Then
//                        strNewFolder = DeriveMailFolder(eml.To, eml.ReceivedByName)
//                  End If

                    sMailItem.Item = mailItem;

                    string strTgtFdr = null;

                    if (sMailItem.To != null  && sMailItem.ReceivedByName != null) 
                    {
                        strTgtFdr = GetTargetFolder(sMailItem.To, sMailItem.ReceivedByName );
                    }

//                    If fdr.Name <> strNewFolder Then
//                        If dDebug Then DebugPrint "c", "fdr.Name <> strNewFolder"
//                        eml.Move myInbox.Folders(strNewFolder)
//                        If dDebug Then DebugPrint "w", "myInbox.Folders(strNewFolder) = " & myInbox.Folders(strNewFolder)
//                    Else
//                        eml.Move myInbox.Folders("_ForDeletion")
//                    End If
                    if (fdr.Name != strTgtFdr)
                    {
                        OutLook.MAPIFolder destFolder = inbox.Folders[strTgtFdr];
                        mailItem.Move(destFolder);
                    }
                    else
                    {
                        mailItem.Move(fdrForDeletion);
                    }

                }




            //allocate to subfolders

            //Process othersGroups
            //Likes Max 3 per day  per user, max 20% of group posts
            //Comments one per day per user, max 10% of group posts
            //Shares one per day per user, max 10% of group posts
            }
            catch(System.Exception crap)
            {
                OutCrap(crap);
                MessageBox.Show("MailCamp experienced an issues while processing the run request and aborted - please review the error log","Errors during the process",MessageBoxButtons.OK,MessageBoxIcon.Error,MessageBoxDefaultButton.Button1);

            }

        }
4

1 回答 1

2

foreach如果您正在修改集合中的项目数,请不要使用循环。

MAPIFolder.Items.Count从下循环到1.

于 2013-07-26T21:35:29.840 回答