今天,我有下面的代码可以按主题在共享邮箱中过滤邮件。来自项目的信息将插入到数据表中。
代码工作正常,但我还需要包括子文件夹。我试图解决,但完全陷入困境。
感谢所有帮助。
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 = "[email protected]";
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();
}
Enumerating through all outlook folders recursively
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) { }
}