Files
OutlookCaseHelper/OutlookCaseHelper/OutlookHelper.cs
T
2026-03-16 19:32:16 +00:00

127 lines
4.4 KiB
C#

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");
}
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;
// Aceita "TrackingID#1234567890" com qualquer número
Match match = Regex.Match(email.Subject, @"TrackingID#(\d+)");
if (match.Success)
return match.Groups[1].Value;
return null;
}
catch { return null; }
}
public bool CreateFolderAndMoveEmails(string trackingId)
{
try
{
Outlook.Folder? inboxFolder =
outlookNamespace.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderInbox) as Outlook.Folder;
if (inboxFolder == null) return false;
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; }
}
public bool RemoveRuleAndMoveToClosed(string trackingId)
{
try
{
Outlook.Folder? inboxFolder =
outlookNamespace.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderInbox) as Outlook.Folder;
if (inboxFolder == null) return false;
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");
trackingFolder.MoveTo(closedFolder);
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 (Outlook.Folder)parent.Folders.Add(name);
}
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;
// Procura "TrackingID#" + os números no subject
if (mail != null && mail.Subject != null && mail.Subject.Contains($"TrackingID#{trackingId}"))
toMove.Add(mail);
}
foreach (var mail in toMove)
mail.Move(dest);
}
}
}