C# 从子文件夹VSTO获取邮件项
今天,我用下面的代码在共享邮箱中按主题过滤邮件。 项目中的信息插入到数据表中 代码运行良好,但我需要包括子文件夹以及。 我试图解决这个问题,但完全是个傻瓜 感谢所有的帮助C# 从子文件夹VSTO获取邮件项,c#,outlook,vsto,C#,Outlook,Vsto,今天,我用下面的代码在共享邮箱中按主题过滤邮件。 项目中的信息插入到数据表中 代码运行良好,但我需要包括子文件夹以及。 我试图解决这个问题,但完全是个傻瓜 感谢所有的帮助 try { DataTable dtForExport = new DataTable(); dtForExport.Clear(); dtForExport.Columns.Add("Typ"); dtForEx
try
{
DataTable dtForExport = new DataTable();
dtForExport.Clear();
dtForExport.Columns.Add("Typ");
dtForExport.Columns.Add("Inkom");
dtForExport.Columns.Add("Orsak");
Outlook.Application outlookapp = new Outlook.Application();
Outlook.NameSpace ns = outlookapp.GetNamespace("MAPI");
// additional email address
string recipientName = "Foo@bar.com";
Outlook.Recipient recip = ns.CreateRecipient(recipientName);
recip.Resolve();
Outlook.MAPIFolder inbox = ns.GetSharedDefaultFolder(recip, Outlook.OlDefaultFolders.olFolderInbox);
Outlook.Items items = inbox.Items;
Outlook.MailItem mailItem = null;
object folderItem;
string subjectName = string.Empty;
string filter = "[Subject] = 'Sjukanmälan' OR [Subject] = 'Friskanmälan'";
folderItem = items.Find(filter);
string pattern = ".*Orsak.*";
Regex r = new Regex(pattern);
while (folderItem != null)
{
mailItem = folderItem as Outlook.MailItem;
MessageBox.Show(folderItem.ToString());
if (mailItem != null)
{
var SickType = "";
foreach (Match m in r.Matches(mailItem.Body))
{
SickType = m.Value.Replace("Orsak: ", "");
}
dtForExport.Rows.Add(mailItem.Subject, mailItem.ReceivedTime, SickType);
}
folderItem = items.FindNext();
}
谢谢你的回答。但是我该如何把事情组合起来呢?我可以循环浏览并找出名称,但我的两个悬而未决的问题是:它列出了个人收件箱和共享收件箱,我认为行Outlook.MAPIFolder inbox=ns.GetSharedDefaultFolder(recip,Outlook.OlDefaultFolders.olFolderInbox);设置什么以使用共享邮箱。如何从所有文件夹中取出该项目?对不起,我不明白你写的是什么。您的代码正在搜索一个文件夹,因此我给了您一个链接,可以“递归地枚举所有outlook文件夹”。
private void LoadTree()
{
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;
try
{
app = new Microsoft.Office.Interop.Outlook.Application();
ns = app.GetNamespace("MAPI");
ns.Logon(null, null, false, false);
TreeNode root = new TreeNode();
root.Text = "MAPI";
Microsoft.Office.Interop.Outlook.Folders folders = ns.Folders;
foreach (Microsoft.Office.Interop.Outlook.Folder folder in folders)
{
TreeNode newnode = new TreeNode();
newnode.Text = folder.Name;
LoadSubFolder(ref newnode, folder.Folders);
//foreach (Microsoft.Office.Interop.Outlook.Folder subfolder in folder.Folders)
//{
// TreeNode newsub = new TreeNode();
// newsub.Text = subfolder.Name;
// newnode.Nodes.Add(newsub);
//}
root.Nodes.Add(newnode);
}
root.Expand();
treeView1.Nodes.Add(root);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
finally
{
ns = null;
app = null;
inboxFolder = null;
}
}
private void LoadSubFolder(ref TreeNode node, Microsoft.Office.Interop.Outlook.Folders folders)
{
try
{
foreach (Microsoft.Office.Interop.Outlook.Folder subfolder in folders)
{
TreeNode newNode = new TreeNode();
newNode.Text = subfolder.Name;
LoadSubFolder(ref newNode, subfolder.Folders);
node.Nodes.Add(newNode);
}
}
catch (Exception ex) { }
}