Add project files.
This commit is contained in:
@@ -0,0 +1,163 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text.RegularExpressions;
|
||||
using Outlook = Microsoft.Office.Interop.Outlook;
|
||||
|
||||
namespace OutlookCaseHelper
|
||||
{
|
||||
public class OutlookHelper
|
||||
{
|
||||
private Outlook.Application outlookApp;
|
||||
private Outlook.NameSpace outlookNamespace;
|
||||
|
||||
public OutlookHelper()
|
||||
{
|
||||
outlookApp = new Outlook.Application();
|
||||
outlookNamespace = outlookApp.GetNamespace("MAPI");
|
||||
}
|
||||
|
||||
// Get Tracking ID from selected email subject
|
||||
public string? GetSelectedEmailTrackingId()
|
||||
{
|
||||
try
|
||||
{
|
||||
Outlook.Explorer activeExplorer = outlookApp.ActiveExplorer();
|
||||
if (activeExplorer == null)
|
||||
return null;
|
||||
|
||||
Outlook.Selection selection = activeExplorer.Selection;
|
||||
if (selection.Count == 0)
|
||||
return null;
|
||||
|
||||
Outlook.MailItem email = selection[1] as Outlook.MailItem;
|
||||
if (email == null)
|
||||
return null;
|
||||
|
||||
// Subject pattern: "Something - TrackingID1234567890123456"
|
||||
string pattern = @"TrackingID(\d+)";
|
||||
Match match = Regex.Match(email.Subject, pattern);
|
||||
|
||||
if (match.Success)
|
||||
return match.Groups[1].Value;
|
||||
|
||||
return null;
|
||||
}
|
||||
catch
|
||||
{
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
// Create folder and move all emails with this tracking id
|
||||
public bool CreateFolderAndMoveEmails(string trackingId)
|
||||
{
|
||||
try
|
||||
{
|
||||
Outlook.Folder inboxFolder =
|
||||
outlookNamespace.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderInbox) as Outlook.Folder;
|
||||
|
||||
Outlook.Folder casesFolder = GetOrCreateFolder(inboxFolder, "Cases");
|
||||
Outlook.Folder activeFolder = GetOrCreateFolder(casesFolder, "Active");
|
||||
Outlook.Folder trackingFolder = GetOrCreateFolder(activeFolder, trackingId);
|
||||
|
||||
MoveEmailsWithTrackingId(inboxFolder, trackingId, trackingFolder);
|
||||
|
||||
Outlook.Folder sentFolder =
|
||||
outlookNamespace.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderSentMail) as Outlook.Folder;
|
||||
if (sentFolder != null)
|
||||
MoveEmailsWithTrackingId(sentFolder, trackingId, trackingFolder);
|
||||
|
||||
return true;
|
||||
}
|
||||
catch
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
// Remove rule: move folder from Active to Closed
|
||||
public bool RemoveRuleAndMoveToClosed(string trackingId)
|
||||
{
|
||||
try
|
||||
{
|
||||
Outlook.Folder inboxFolder =
|
||||
outlookNamespace.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderInbox) as Outlook.Folder;
|
||||
|
||||
Outlook.Folder casesFolder = GetFolder(inboxFolder, "Cases");
|
||||
if (casesFolder == null) return false;
|
||||
|
||||
Outlook.Folder activeFolder = GetFolder(casesFolder, "Active");
|
||||
if (activeFolder == null) return false;
|
||||
|
||||
Outlook.Folder trackingFolder = GetFolder(activeFolder, trackingId);
|
||||
if (trackingFolder == null) return false;
|
||||
|
||||
Outlook.Folder closedFolder = GetOrCreateFolder(casesFolder, "Closed");
|
||||
MoveAllItemsFromFolder(trackingFolder, closedFolder);
|
||||
|
||||
try
|
||||
{
|
||||
activeFolder.Folders.Remove(trackingId);
|
||||
}
|
||||
catch { }
|
||||
|
||||
return true;
|
||||
}
|
||||
catch
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
private Outlook.Folder GetOrCreateFolder(Outlook.Folder parent, string name)
|
||||
{
|
||||
foreach (Outlook.Folder folder in parent.Folders)
|
||||
{
|
||||
if (folder.Name == name)
|
||||
return folder;
|
||||
}
|
||||
|
||||
return parent.Folders.Add(name) as Outlook.Folder;
|
||||
}
|
||||
|
||||
private Outlook.Folder? GetFolder(Outlook.Folder parent, string name)
|
||||
{
|
||||
foreach (Outlook.Folder folder in parent.Folders)
|
||||
{
|
||||
if (folder.Name == name)
|
||||
return folder;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
private void MoveEmailsWithTrackingId(Outlook.Folder source, string trackingId, Outlook.Folder dest)
|
||||
{
|
||||
var toMove = new List<Outlook.MailItem>();
|
||||
|
||||
foreach (object item in source.Items)
|
||||
{
|
||||
Outlook.MailItem mail = item as Outlook.MailItem;
|
||||
if (mail != null && mail.Subject.Contains($"TrackingID{trackingId}"))
|
||||
toMove.Add(mail);
|
||||
}
|
||||
|
||||
foreach (var mail in toMove)
|
||||
mail.Move(dest);
|
||||
}
|
||||
|
||||
private void MoveAllItemsFromFolder(Outlook.Folder source, Outlook.Folder dest)
|
||||
{
|
||||
var toMove = new List<Outlook.MailItem>();
|
||||
|
||||
foreach (object item in source.Items)
|
||||
{
|
||||
Outlook.MailItem mail = item as Outlook.MailItem;
|
||||
if (mail != null)
|
||||
toMove.Add(mail);
|
||||
}
|
||||
|
||||
foreach (var mail in toMove)
|
||||
mail.Move(dest);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user