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