예제 #1
0
 // Token: 0x06000017 RID: 23 RVA: 0x00002920 File Offset: 0x00000B20
 internal void ResetAsUidStore(string newCommandId, string uid, ImapMailFlags flags, bool addFlags)
 {
     this.Reset(ImapCommandType.Store, newCommandId, delegate(ImapCommand cmd)
     {
         StringBuilder cachedStringBuilder = cmd.CachedStringBuilder;
         cachedStringBuilder.Length        = 0;
         cachedStringBuilder.Append(cmd.CommandId);
         cachedStringBuilder.Append(" UID STORE ");
         cachedStringBuilder.Append((string)cmd.CommandParameters[0]);
         if (addFlags)
         {
             cachedStringBuilder.Append(" +FLAGS.SILENT ");
         }
         else
         {
             cachedStringBuilder.Append(" -FLAGS.SILENT ");
         }
         ImapUtilities.AppendStringBuilderImapFlags((ImapMailFlags)cmd.CommandParameters[1], cachedStringBuilder);
         cachedStringBuilder.Append("\r\n");
         return(cachedStringBuilder.ToString());
     }, new object[]
     {
         uid,
         flags
     });
 }
예제 #2
0
        internal static SyncEmailContext GetSyncEmailContext(ImapClientFolder folder, ImapMessageRec messageRec)
        {
            ArgumentValidator.ThrowIfNull("folder", folder);
            ArgumentValidator.ThrowIfNull("messageRec", messageRec);
            SyncEmailContext result         = default(SyncEmailContext);
            ImapMailFlags    imapMailFlags  = messageRec.ImapMailFlags;
            ImapMailFlags    imapMailFlags2 = folder.SupportedFlags;

            if (folder.DefaultFolderType.Equals(ImapDefaultFolderType.Drafts))
            {
                imapMailFlags  |= ImapMailFlags.Draft;
                imapMailFlags2 |= ImapMailFlags.Draft;
            }
            if (imapMailFlags2.HasFlag(ImapMailFlags.Draft))
            {
                result.IsDraft = new bool?(imapMailFlags.HasFlag(ImapMailFlags.Draft));
            }
            if (imapMailFlags2.HasFlag(ImapMailFlags.Seen))
            {
                result.IsRead = new bool?(imapMailFlags.HasFlag(ImapMailFlags.Seen));
            }
            if (imapMailFlags2.HasFlag(ImapMailFlags.Answered))
            {
                result.ResponseType = new SyncMessageResponseType?(imapMailFlags.HasFlag(ImapMailFlags.Answered) ? SyncMessageResponseType.Replied : SyncMessageResponseType.None);
            }
            ImapExtendedMessageRec imapExtendedMessageRec = messageRec as ImapExtendedMessageRec;

            if (imapExtendedMessageRec != null)
            {
                result.SyncMessageId = imapExtendedMessageRec.MessageId;
            }
            return(result);
        }
예제 #3
0
        // Token: 0x06000048 RID: 72 RVA: 0x00003424 File Offset: 0x00001624
        public void StoreMessageFlags(string uid, ImapMailFlags flagsToStore, ImapMailFlags previousFlags)
        {
            base.CheckDisposed();
            this.ThrowIfNotConnected();
            AsyncOperationResult <DBNull> asyncOperationResult = ImapConnectionCore.StoreMessageFlags(this.ConnectionContext, uid, flagsToStore, previousFlags, null, null);

            this.ThrowIfExceptionNotNull(asyncOperationResult.Exception);
        }
예제 #4
0
        // Token: 0x06000046 RID: 70 RVA: 0x000033AC File Offset: 0x000015AC
        public string AppendMessageToImapMailbox(string mailboxName, ImapMailFlags messageFlags, Stream messageMimeStream)
        {
            base.CheckDisposed();
            this.ThrowIfNotConnected();
            AsyncOperationResult <string> asyncOperationResult = ImapConnectionCore.AppendMessageToImapMailbox(this.ConnectionContext, mailboxName, messageFlags, messageMimeStream, null, null);

            this.ThrowIfExceptionNotNull(asyncOperationResult.Exception);
            return(asyncOperationResult.Data);
        }
예제 #5
0
        internal static ImapMailFlags ConvertStringFormToFlags(string stringForm)
        {
            ImapMailFlags imapMailFlags = ImapMailFlags.None;

            if (!string.IsNullOrEmpty(stringForm))
            {
                string[] array = stringForm.ToUpperInvariant().Trim(new char[]
                {
                    '(',
                    ')'
                }).Split(new char[]
                {
                    ' '
                });
                foreach (string text in array)
                {
                    string a;
                    if ((a = text) != null)
                    {
                        if (!(a == "\\ANSWERED"))
                        {
                            if (!(a == "\\DELETED"))
                            {
                                if (!(a == "\\DRAFT"))
                                {
                                    if (!(a == "\\FLAGGED"))
                                    {
                                        if (a == "\\SEEN")
                                        {
                                            imapMailFlags |= ImapMailFlags.Seen;
                                        }
                                    }
                                    else
                                    {
                                        imapMailFlags |= ImapMailFlags.Flagged;
                                    }
                                }
                                else
                                {
                                    imapMailFlags |= ImapMailFlags.Draft;
                                }
                            }
                            else
                            {
                                imapMailFlags |= ImapMailFlags.Deleted;
                            }
                        }
                        else
                        {
                            imapMailFlags |= ImapMailFlags.Answered;
                        }
                    }
                }
            }
            return(imapMailFlags);
        }
예제 #6
0
        internal static ImapMailFlags FilterFlagsAgainstSupported(ImapMailFlags incomingFlags, ImapMailbox mailbox)
        {
            ImapMailFlags imapMailFlags = ImapMailFlags.All;

            if (mailbox != null)
            {
                imapMailFlags = mailbox.PermanentFlags;
            }
            return(incomingFlags & imapMailFlags);
        }
예제 #7
0
        protected ImapMessageRec(string uidString, ImapMailFlags imapMailFlags)
        {
            uint uid;

            if (!uint.TryParse(uidString, out uid))
            {
                throw new InvalidUidException(uidString);
            }
            this.Uid           = uid;
            this.ImapMailFlags = imapMailFlags;
        }
예제 #8
0
 private void SetReadFlags(byte[] messageEntryId, byte[] folderEntryId, bool isRead)
 {
     base.CheckDisposed();
     using (ImapFolder folder = base.GetFolder <ImapSourceFolder>(folderEntryId))
     {
         if (folder == null)
         {
             MrsTracer.Provider.Warning("Source folder {0} doesn't exist", new object[]
             {
                 TraceUtils.DumpBytes(folderEntryId)
             });
             throw new ImapObjectNotFoundException(TraceUtils.DumpBytes(folderEntryId));
         }
         uint        item = ImapEntryId.ParseUid(messageEntryId);
         List <uint> list = new List <uint>(1);
         list.Add(item);
         List <ImapMessageRec> list2 = folder.Folder.LookupMessages(base.ImapConnection, list);
         if (list2.Count == 0)
         {
             MrsTracer.Provider.Warning("Source message {0} doesn't exist", new object[]
             {
                 TraceUtils.DumpBytes(messageEntryId)
             });
             throw new ImapObjectNotFoundException(TraceUtils.DumpBytes(messageEntryId));
         }
         ImapMailFlags imapMailFlags  = list2[0].ImapMailFlags;
         ImapMailFlags imapMailFlags2 = isRead ? (imapMailFlags | ImapMailFlags.Seen) : (imapMailFlags & ~ImapMailFlags.Seen);
         if (imapMailFlags != imapMailFlags2)
         {
             string text = item.ToString(CultureInfo.InvariantCulture);
             MrsTracer.Provider.Debug("StoreMessageFlags - uid: {0}, flagsToStore: {1}, previousFlags {2}", new object[]
             {
                 text,
                 imapMailFlags2,
                 imapMailFlags
             });
             base.ImapConnection.StoreMessageFlags(text, imapMailFlags2, imapMailFlags);
         }
     }
 }
예제 #9
0
        internal static void AppendStringBuilderImapFlags(ImapMailFlags flags, StringBuilder builderToUse)
        {
            builderToUse.Append('(');
            string value = string.Empty;

            if ((flags & ImapMailFlags.Answered) == ImapMailFlags.Answered)
            {
                builderToUse.Append(value);
                builderToUse.Append("\\Answered");
                value = " ";
            }
            if ((flags & ImapMailFlags.Deleted) == ImapMailFlags.Deleted)
            {
                builderToUse.Append(value);
                builderToUse.Append("\\Deleted");
                value = " ";
            }
            if ((flags & ImapMailFlags.Draft) == ImapMailFlags.Draft)
            {
                builderToUse.Append(value);
                builderToUse.Append("\\Draft");
                value = " ";
            }
            if ((flags & ImapMailFlags.Flagged) == ImapMailFlags.Flagged)
            {
                builderToUse.Append(value);
                builderToUse.Append("\\Flagged");
                value = " ";
            }
            if ((flags & ImapMailFlags.Seen) == ImapMailFlags.Seen)
            {
                builderToUse.Append(value);
                builderToUse.Append("\\Seen");
            }
            builderToUse.Append(')');
        }
예제 #10
0
 // Token: 0x06000016 RID: 22 RVA: 0x00002824 File Offset: 0x00000A24
 internal void ResetAsAppend(string newCommandId, string mailboxName, ImapMailFlags messageFlags, Stream messageBody)
 {
     this.Reset(ImapCommandType.Append, newCommandId, delegate(ImapCommand cmd)
     {
         string value = cmd.ConvertToQuotableString((string)cmd.CommandParameters[0]);
         StringBuilder cachedStringBuilder = cmd.CachedStringBuilder;
         cachedStringBuilder.Length        = 0;
         cachedStringBuilder.Append(cmd.CommandId);
         cachedStringBuilder.Append(" APPEND \"");
         cachedStringBuilder.Append(value);
         cachedStringBuilder.Append("\" ");
         ImapUtilities.AppendStringBuilderImapFlags((ImapMailFlags)cmd.CommandParameters[1], cachedStringBuilder);
         cachedStringBuilder.Append(" {");
         cachedStringBuilder.Append((long)cmd.CommandParameters[3]);
         cachedStringBuilder.Append("}\r\n");
         return(cachedStringBuilder.ToString());
     }, new object[]
     {
         mailboxName,
         messageFlags,
         messageBody,
         messageBody.Length
     });
 }
예제 #11
0
 private ImapExtendedMessageRec(ImapMailbox folder, string uidString, string messageId, ImapMailFlags imapMailFlags, long messageSize, int messageSeqNum) : base(uidString, imapMailFlags)
 {
     if (string.IsNullOrEmpty(messageId))
     {
         messageId = this.ConstructMessageId(folder);
     }
     this.MessageId     = messageId;
     this.MessageSize   = messageSize;
     this.MessageSeqNum = messageSeqNum;
 }