1

さて、私は問題に遭遇しました。

私はC#を使用してMS Outlook APIを使用して、受信した電子メールからいくつかのExcelベースのレポートを生成しています。

さて、最初にこれを始めたとき、フォルダ内の電子メールの数が少し少なかったので問題ありませんでした。数日後、その数は数千になりました。

 Application app = null;
            _NameSpace ns = null;
            MailItem item = null;
            MAPIFolder inboxFolder = null;
            MAPIFolder subFolder = null;

            DateTime MyDateTime;
            MyDateTime = new DateTime();
            MyDateTime = DateTime.ParseExact(dateFilter, "yyyy-MM-dd HH:mm tt", null);

            try
            {
                app = new Application();
                ns = app.GetNamespace("MAPI");
                ns.Logon(null, null, false, false);

                inboxFolder = ns.GetDefaultFolder(Microsoft.Office.Interop.Outlook.OlDefaultFolders.olFolderInbox);
                subFolder = inboxFolder.Folders["Alerts"];


                for (int i = 1; i <= subFolder.Items.Count; i++)
                {
                    item = (Microsoft.Office.Interop.Outlook.MailItem)subFolder.Items[i];

                    string subject = item.Subject;
                    DateTime sent = item.SentOn;

                    if (item.SentOn > MyDateTime && item.SentOn < MyDateTime.AddDays(1))
{//Do some logging
}}

上記のコードの問題は、最後に受信した電子メールから検索を開始することです。これにより、「フィルター」に到達するまでの時間が長くなります。

もしあれば、コードを改善するための提案が必要です。

私を読んでくれてありがとう。

4

2 に答える 2

4

ループの前に、Restrict メソッドによってフィルター処理された subFolder からアイテムのコレクションを取得します。使用するフィルター文字列で日付範囲を使用できます (私はそれをテストする立場になく、誤解を招きたくないので、ここには書きませんでした。検索すると多くの例が得られるはずです)。次に、必要なアイテムだけを含む必要がある結果のコレクションをループ/反復します。

Microsoft.Office.Interop.Outlook.Items restrictedItems = subFolder.Items.Restrict("*filter*");

for (int i = 1; i <= restrictedItems.Count; i++)...
于 2012-12-17T13:10:21.950 に答える