/// <summary> /// Moves Mail item into new folder /// </summary> /// <param name="newFolder" - Folder object representing Folder to move to></param> public void Move(MailFolder newFolder) { _mailitem = _mailitem.Move(newFolder.OutlookFolderItem); }
/// <summary> /// Handle the email /// </summary> /// <param name="entryIdItem">The email we want to handle.</param> /// <returns></returns> private async Task <bool> HandleItemFlagedAsBeingProcessedInLock(string entryIdItem) { Outlook._MailItem mailItem = null; try { // new email has arrived, we need to try and classify it. mailItem = _session.GetItemFromID(entryIdItem, System.Reflection.Missing.Value) as Outlook._MailItem; } catch (Exception e) { _engine.Logger.LogException(e); } if (mailItem == null) { _engine.Logger.LogWarning($"Could not locate mail item {entryIdItem} to move."); return(false); } // did we send this email? if (MailWasSentByUs(mailItem)) { _engine.Logger.LogWarning($"Mail item {entryIdItem} was sent by us and will not be classified."); return(false); } // either way, this is a valid 'processed' email UpdateLastProcessedEmailInLock(mailItem); // the message note. if (!IsUsableClassNameForClassification(mailItem.MessageClass)) { return(false); } // start the watch var watch = StopWatch.Start(_engine.Logger); // look for the category var guessCategoryResponse = await CategorizeAsync(mailItem).ConfigureAwait(false); // var categoryId = guessCategoryResponse.CategoryId; var wasMagnetUsed = guessCategoryResponse.WasMagnetUsed; // did we find a category? if (-1 == categoryId) { _engine.Logger.LogVerbose($"I could not classify the new message {entryIdItem} into any categories. ('{mailItem.Subject}')"); watch.Checkpoint("I could not classify the new message into any categories: (in: {0})"); return(false); } // watch.Checkpoint($"I classified the new message category : {categoryId} (in: {{0}})"); // // Do we want to train this var options = _engine.Options; if (options.ReAutomaticallyTrainMessages || (wasMagnetUsed && options.ReAutomaticallyTrainMagnetMessages)) { // get the weight var weight = (wasMagnetUsed ? options.MagnetsWeight : 1); // we can now classify it. await ClassifyAsync(mailItem, (uint)categoryId, weight).ConfigureAwait(false); } try { // get the posible folder. var folderId = _engine.Categories.FindFolderIdByCategoryId(categoryId); if (string.IsNullOrEmpty(folderId)) { _engine.Logger.LogWarning($"Could not locate folder id for category {categoryId}, cannot move item."); // the user does not want to move to another folder. return(false); } var folder = _engine.Folders.FindFolderById(folderId); if (null == folder) { // _engine.Logger.LogWarning($"Could not locate folder for category {categoryId}, cannot move item."); // the user does not want to move to another folder. return(false); } // don't move it if we don't need to. var currentFolder = (Outlook.MAPIFolder)mailItem.Parent; // if they are not the same, we can move it. if (currentFolder.EntryID == folder.Id()) { _engine.Logger.LogVerbose($"No need to move mail, '{mailItem.Subject}', to folder, '{folder.Name()}', already in folder"); return(true); } // if this is an ignored conversation, we will not move it. if (IsIgnoredConversation(mailItem)) { _engine.Logger.LogVerbose($"Mail, '{mailItem.Subject}' is part of an ignored conversation and will not be moved."); return(true); } // this is where we want to move to. var itemToFolder = (folder as OutlookFolder)?.Folder; if (null == itemToFolder) { throw new Exception($"The folder {folder.Name()} does not seem to be of type 'Folder' and cannot be used."); } // try and move mailItem.Move(itemToFolder); // and log it. _engine.Logger.LogVerbose($"Moved mail, '{mailItem.Subject}', to folder, '{folder.Name()}'"); } catch (Exception ex) { _engine.Logger.LogException(ex); return(false); } return(true); }
public void Move(IMailFolder newFolder) { var provider = newFolder as MailFolderProviderOM; _mailItem = _mailItem.Move(provider.Handle); }