protected override bool RunInternal(ImapCommand cmd) { // <sequnce set> mbox // NO - Wrong name Context.CommandProvider.Write("* " + cmd.Args + "\r\n"); var match = Regex.Match(cmd.Args, "(?<sq>[^ ]+) (?<mbox>[^ ]+)$"); if (!match.Success || !match.Groups["mbox"].Success || !match.Groups["sq"].Success || string.IsNullOrWhiteSpace(match.Groups["mbox"].Value)) { Context.CommandProvider.Write($"{cmd.Tag} BAD\r\n"); return(true); } var mailbox = match.Groups["mbox"].Value; var sqString = match.Groups["sq"].Value; var isUid = Context.States.Any(s => s.State == ImapState.Uid); var idType = isUid ? MessageIdType.Uid : MessageIdType.Id; var sequenceSet = ImapCommon.GetMessageSequenceSet(sqString); var uids = ImapCommon.ExtractRealMessageIds(Context, sequenceSet, idType); if (!Context.EntityProvider.DirectoryProvider.Copy(mailbox, uids.ToArray())) { Context.CommandProvider.Write($"{cmd.Tag} NO\r\n"); return(true); } if (!isUid) { Context.CommandProvider.Write($"{cmd.Tag} OK COPY\r\n"); } return(true); }
protected override bool RunInternal(ImapCommand cmd) { var args = cmd.Args.Split(' '); if (args.Length < 1) { Context.CommandProvider.Write($"{cmd.Tag} BAD\r\n"); } var range = ImapCommon.GetMessageSequenceSet(args[0]); if (range.Item1 == ImapCommon.MessageSequenceType.None) { Context.CommandProvider.Write($"{cmd.Tag} BAD\r\n"); } var dataItemsString = string.Join(' ', args.Skip(1)); var idType = Context.States.Any(s => s.State == ImapState.Uid) ? MessageIdType.Uid : MessageIdType.Id; var messageIds = ImapCommon.ExtractRealMessageIds(Context, range, idType).ToList(); if (!messageIds.Any()) { Context.CommandProvider.Write($"{cmd.Tag} NO\r\n"); } foreach (var messageId in messageIds) { var fetchData = ParseDataItems(dataItemsString); if (!FetchMessage(messageId, fetchData)) { Context.CommandProvider.Write($"{cmd.Tag} BAD"); return(false); } } // Если команда была вызвана из SELECT ящика // не из UID и не из STORE if (Context.PrePeekState.State == ImapState.Selected) { Context.CommandProvider.Write($"{cmd.Tag} OK FETCH\r\n"); } return(true); }
protected override bool RunInternal(ImapCommand cmd) { var args = cmd.Args.Split(' '); var sequenceSet = ImapCommon.GetMessageSequenceSet(args[0]); var idType = Context.States.Any(s => s.State == ImapState.Uid) ? MessageIdType.Uid : MessageIdType.Id; var messageIds = ImapCommon.ExtractRealMessageIds(Context, sequenceSet, idType).ToArray(); var flagsData = ParseStoreFlagData(cmd.Args); if (flagsData == null) { Context.CommandProvider.Write($"{cmd.Tag} BAD\r\n"); return(true); } if (!ApplyStore(messageIds, flagsData)) { return(false); } Context.CommandProvider.Write($"{cmd.Tag} OK STORE completed\r\n"); return(true); }