public override void RunCommand(object sender) { var engine = (AutomationEngineInstance)sender; MimeMessage vMimeMessage = (MimeMessage)v_IMAPMimeMessage.ConvertUserVariableToObject(engine); string vIMAPHost = v_IMAPHost.ConvertUserVariableToString(engine); string vIMAPPort = v_IMAPPort.ConvertUserVariableToString(engine); string vIMAPUserName = v_IMAPUserName.ConvertUserVariableToString(engine); string vIMAPPassword = v_IMAPPassword.ConvertUserVariableToString(engine); var vIMAPDestinationFolder = v_IMAPDestinationFolder.ConvertUserVariableToString(engine); using (var client = new ImapClient()) { client.ServerCertificateValidationCallback = (sndr, certificate, chain, sslPolicyErrors) => true; client.SslProtocols = SslProtocols.None; using (var cancel = new CancellationTokenSource()) { try { client.Connect(v_IMAPHost, int.Parse(v_IMAPPort), true, cancel.Token); //SSL } catch (Exception) { client.Connect(v_IMAPHost, int.Parse(v_IMAPPort)); //TLS } client.AuthenticationMechanisms.Remove("XOAUTH2"); client.Authenticate(vIMAPUserName, vIMAPPassword, cancel.Token); var splitId = vMimeMessage.MessageId.Split('#').ToList(); UniqueId messageId = UniqueId.Parse(splitId.Last()); splitId.RemoveAt(splitId.Count - 1); string messageFolder = string.Join("", splitId); IMailFolder toplevel = client.GetFolder(client.PersonalNamespaces[0]); IMailFolder foundSourceFolder = GetIMAPEmailsCommand.FindFolder(toplevel, messageFolder); IMailFolder foundDestinationFolder = GetIMAPEmailsCommand.FindFolder(toplevel, vIMAPDestinationFolder); if (foundSourceFolder != null) { foundSourceFolder.Open(FolderAccess.ReadWrite, cancel.Token); } else { throw new Exception("Source Folder not found"); } if (foundDestinationFolder == null) { throw new Exception("Destination Folder not found"); } var messageSummary = foundSourceFolder.Fetch(new[] { messageId }, MessageSummaryItems.Flags); if (v_IMAPOperationType == "Move MimeMessage") { if (v_IMAPMoveCopyUnreadOnly == "Yes") { if (!messageSummary[0].Flags.Value.HasFlag(MessageFlags.Seen)) { foundSourceFolder.MoveTo(messageId, foundDestinationFolder, cancel.Token); } } else { foundSourceFolder.MoveTo(messageId, foundDestinationFolder, cancel.Token); } } else if (v_IMAPOperationType == "Copy MimeMessage") { if (v_IMAPMoveCopyUnreadOnly == "Yes") { if (!messageSummary[0].Flags.Value.HasFlag(MessageFlags.Seen)) { foundSourceFolder.CopyTo(messageId, foundDestinationFolder, cancel.Token); } } else { foundSourceFolder.CopyTo(messageId, foundDestinationFolder, cancel.Token); } } client.Disconnect(true, cancel.Token); client.ServerCertificateValidationCallback = null; } } }