Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/266.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将outlook项目移动到存档_C#_Outlook_Outlook 2013 - Fatal编程技术网

C# 将outlook项目移动到存档

C# 将outlook项目移动到存档,c#,outlook,outlook-2013,C#,Outlook,Outlook 2013,我有一个C#程序(实际上它只是NUnit正在使用的一个C#库),我希望根据本文稍作修改:。我目前面临着一个文件夹,它大约有3500条信息,大小约为350kb,并且要花很长时间才能移动到我的归档文件中,这样我才能再次发送和接收电子邮件(因为我的收件箱目前为500Mb中的1.5Gb…lol),但就我的一生而言,我不知道如何获取我的归档文件夹。因为我在工作,所以我有点一心多用,所以我可以边做边编辑。因此,如果您有任何代码可以随时找到归档文件夹,那就太好了。多谢各位 编辑 好的,以表明我确实有一些正在进

我有一个C#程序(实际上它只是NUnit正在使用的一个C#库),我希望根据本文稍作修改:。我目前面临着一个文件夹,它大约有3500条信息,大小约为350kb,并且要花很长时间才能移动到我的归档文件中,这样我才能再次发送和接收电子邮件(因为我的收件箱目前为500Mb中的1.5Gb…lol),但就我的一生而言,我不知道如何获取我的归档文件夹。因为我在工作,所以我有点一心多用,所以我可以边做边编辑。因此,如果您有任何代码可以随时找到归档文件夹,那就太好了。多谢各位

编辑

好的,以表明我确实有一些正在进行的工作(基于负面反馈),这是我现在拥有的代码(因为是的,我知道我有一个给我编码)

这是我的NUnit测试用例,它查看一个文件夹,并为我提供特定的信息

    [Test]
    public void CheckMessages()
    {
        List<EmailMessage> messages = new List<EmailMessage>();
        using (var target = new EmailMessageProvider())
        {
            messages.AddRange(target.GetEmailMessages("UnexpectedErrors\\NotFindImage"));
        }

        Dictionary<int, string> asdf = new Dictionary<int, string>();

        foreach (var item in messages)
        {
            var line = item.Body.Split(new string[] { Environment.NewLine }, StringSplitOptions.None)[2];

            var revisionId = int.Parse(Regex.Match(line, @"\-*\d+").Value);
            var path = line.Substring(line.IndexOf("\\\\"));
            if (asdf.ContainsKey(revisionId))
            {
                Assert.That(path, Is.EqualTo(asdf[revisionId]));
            }
            else
            {
                asdf.Add(revisionId, path);
            }
        }

        foreach (var item in asdf.OrderBy(x => x.Key))
        {
            Console.WriteLine($"{item.Key} {item.Value}");
        }
    }
[测试]
公共void CheckMessages()
{
列表消息=新列表();
使用(var target=new EmailMessageProvider())
{
messages.AddRange(target.GetEmailMessages(“意外错误\\NotFindImage”);
}
Dictionary asdf=新字典();
foreach(消息中的var项)
{
var line=item.Body.Split(新字符串[]{Environment.NewLine},StringSplitOptions.None)[2];
var-revisionId=int.Parse(Regex.Match(第行@“\-*\d+”).Value);
var path=line.Substring(line.IndexOf(“\\\”);
if(asdf.ContainsKey(修订ID))
{
Assert.That(路径,Is.EqualTo(asdf[revisionId]);
}
其他的
{
asdf.Add(修订ID,路径);
}
}
foreach(asdf.OrderBy中的var项(x=>x.Key))
{
WriteLine($“{item.Key}{item.Value}”);
}
}
我使用同一个类来查找消息(在另一个测试中),并将其移动到该测试正在使用的子文件夹中

这是我做移动的代码

    public void MoveSurveyPrintComponentsNotFound()
    {
        var destination = _baseFolder.Folders["UnexpectedErrors"].Folders["NotFindImage"];
        foreach (var mailItem in _baseFolder.Folders["UnexpectedErrors"].Items.OfType<MailItem>())
        {
            mailItem.UseMailItem(x =>
            {
                if (x.Body.Contains("Foobar.Common.Exceptions.ImageNotFound"))
                    x.Move(destination);
            });
        }
    }
public void moveSurveyPrintComponents notfound()
{
var destination=_baseFolder.Folders[“意外错误”]。Folders[“NotFindImage”];
foreach(var mailItem位于_baseFolder.Folders[“UnexpectedErrors”].Items.OfType()中)
{
UseMailItem(x=>
{
if(x.Body.Contains(“Foobar.Common.Exceptions.ImageNotFound”))
x、 移动(目的地);
});
}
}
编辑2


看来我大概已经知道了。我发现在
MAPI Namspace
中有一个子文件夹是归档文件。我将尝试改变一些变量,看看它是否移动。问题是检查一个文件夹需要31秒以上。哦,好吧。总比没有好。

我明白了。这也没有我想象的那么难,所以我会分享我所拥有的,以防其他人有这个问题。在我的程序中,我做了两件事。一个是将
\u basefolder
设置为我默认电子邮件地址的文件夹。其次是将
\u mapi
设置为
Outlook.GetNamespace(“mapi”)
。这两件事我已经在我的构造器

    private readonly OutlookApplication _outlook;
    private readonly NameSpace _mapi;
    private MAPIFolder _baseFolder;

    public EmailMessageProvider()
    {
        _outlook = new OutlookApplication();
        _mapi = _outlook.GetNamespace("MAPI");
        _baseFolder = _mapi.Folders["robert@defaultEmail.com"];
    }
归档文件的工作原理与任何其他文件夹一样,因此只需获取该文件夹即可。对我来说,它在
\u mapi.Folders[“Archive”]
中。我认为这是相当标准的,所以如果你复制和粘贴它应该工作得很好

所以现在我要列出所有我想通过的电子邮件,并适当地移动tham

    public void MoveSpecificEmailsToArchives()
    {
        var destination = _mapi.Folders["Archives"];
        foreach (var mailItem in _baseFolder.Folders["Unexpected Error"].Items.OfType<MailItem>())
        {
            mailItem.UseMailItem(x =>
            {
                if (x.Body.Contains("offensiveProgram.exe ERROR "))
                    x.Move(destination);
            });
        }
        Release(destination);
    }
    public static void UseMailItem(this MailItem item, Action<MailItem> mailItemAction)
    {
        mailItemAction(item);
        Marshal.ReleaseComObject(item);
    }