예제 #1
0
 public static Stream GetRecycleBinMessage(string messageID)
 {
     using (FileStream file = RecycleBinManager.GetFile())
     {
         int num = 0;
         StreamLineReader streamLineReader = new StreamLineReader(file);
         long             arg_15_0         = file.Position;
         for (string text = streamLineReader.ReadLineString(); text != null; text = streamLineReader.ReadLineString())
         {
             if (!text.StartsWith("#"))
             {
                 if (text.StartsWith("\0"))
                 {
                     num++;
                 }
                 else
                 {
                     string[] array = TextUtils.SplitQuotedString(text, ' ');
                     if (array[0] == messageID)
                     {
                         string arg_59_0 = array[2];
                         TextUtils.UnQuoteString(array[3]);
                         return(File.OpenRead(RecycleBinManager.m_RecycleBinPath + messageID + ".eml"));
                     }
                 }
             }
             long arg_87_0 = file.Position;
         }
     }
     throw new Exception("Specified message doesn't exist !");
 }
예제 #2
0
 public static void RestoreFromRecycleBin(string messageID, IMailServerManagementApi api)
 {
     using (FileStream file = RecycleBinManager.GetFile())
     {
         int num = 0;
         StreamLineReader streamLineReader = new StreamLineReader(file);
         long             position         = file.Position;
         for (string text = streamLineReader.ReadLineString(); text != null; text = streamLineReader.ReadLineString())
         {
             if (!text.StartsWith("#"))
             {
                 if (text.StartsWith("\0"))
                 {
                     num++;
                 }
                 else
                 {
                     string[] array = TextUtils.SplitQuotedString(text, ' ');
                     if (array[0] == messageID)
                     {
                         string text2 = array[2];
                         string text3 = TextUtils.UnQuoteString(array[3]);
                         using (FileStream fileStream = File.OpenRead(RecycleBinManager.m_RecycleBinPath + messageID + ".eml"))
                         {
                             if (!api.FolderExists(text2 + "/" + text3))
                             {
                                 api.CreateFolder("system", text2, text3);
                             }
                             api.StoreMessage("system", text2, text3, fileStream, DateTime.Now, new string[]
                             {
                                 "Recent"
                             });
                         }
                         byte[] array2 = new byte[file.Position - position - 2L];
                         file.Position = position;
                         file.Write(array2, 0, array2.Length);
                         file.Position += 2L;
                         num++;
                         File.Delete(RecycleBinManager.m_RecycleBinPath + messageID + ".eml");
                         break;
                     }
                 }
             }
             position = file.Position;
         }
         if (num > 500)
         {
             RecycleBinManager.Vacuum(file);
         }
     }
 }
예제 #3
0
        public static void StoreToRecycleBin(string folderOwner, string folder, string messageFile)
        {
            string text  = Guid.NewGuid().ToString().Replace("-", "");
            string text2 = "";
            int    num   = 0;

            try
            {
                Mail_Message entity = Mail_Message.ParseFromFile(messageFile);
                text2 = IMAP_Envelope.ConstructEnvelope(entity);
                num   = (int)new FileInfo(messageFile).Length;
            }
            catch
            {
            }
            if (!Directory.Exists(RecycleBinManager.m_RecycleBinPath))
            {
                try
                {
                    Directory.CreateDirectory(RecycleBinManager.m_RecycleBinPath);
                }
                catch
                {
                }
            }
            File.Copy(messageFile, RecycleBinManager.m_RecycleBinPath + text + ".eml");
            using (FileStream file = RecycleBinManager.GetFile())
            {
                file.Position = file.Length;
                byte[] bytes = Encoding.UTF8.GetBytes(string.Concat(new object[]
                {
                    text,
                    " ",
                    DateTime.Now.ToString("yyyyMMddHHmmss"),
                    " ",
                    folderOwner,
                    " ",
                    TextUtils.QuoteString(folder),
                    " ",
                    num,
                    " ",
                    TextUtils.QuoteString(text2),
                    "\r\n"
                }));
                file.Write(bytes, 0, bytes.Length);
            }
        }
예제 #4
0
        public static List <RecycleBinMessageInfo> GetMessagesInfo(string user, DateTime startDate, DateTime endDate)
        {
            List <RecycleBinMessageInfo> list = new List <RecycleBinMessageInfo>();

            using (FileStream file = RecycleBinManager.GetFile())
            {
                TextReader textReader = new StreamReader(file);
                for (string text = textReader.ReadLine(); text != null; text = textReader.ReadLine())
                {
                    if (!text.StartsWith("#") && !text.StartsWith("\0"))
                    {
                        string[] array = TextUtils.SplitQuotedString(text, ' ', true);
                        bool     flag  = false;
                        if (user != null && user != "" && array[2].ToLower() != user.ToLower())
                        {
                            flag = true;
                        }
                        if (startDate != DateTime.MinValue && startDate > DateTime.ParseExact(array[1], "yyyyMMddHHmmss", CultureInfo.InvariantCulture).Date)
                        {
                            flag = true;
                        }
                        if (endDate != DateTime.MinValue && endDate < DateTime.ParseExact(array[1], "yyyyMMddHHmmss", CultureInfo.InvariantCulture).Date)
                        {
                            break;
                        }
                        if (!flag)
                        {
                            if (array.Length == 5)
                            {
                                list.Add(new RecycleBinMessageInfo(array[0], DateTime.ParseExact(array[1], "yyyyMMddHHmmss", DateTimeFormatInfo.CurrentInfo), array[2], array[3], 0, ""));
                            }
                            else if (array.Length == 6)
                            {
                                list.Add(new RecycleBinMessageInfo(array[0], DateTime.ParseExact(array[1], "yyyyMMddHHmmss", DateTimeFormatInfo.CurrentInfo), array[2], array[3], Convert.ToInt32(array[4]), array[5]));
                            }
                        }
                    }
                }
            }
            return(list);
        }
예제 #5
0
 public static void DeleteRecycleBinMessage(string messageID)
 {
     using (FileStream file = RecycleBinManager.GetFile())
     {
         int num = 0;
         StreamLineReader streamLineReader = new StreamLineReader(file);
         long             position         = file.Position;
         for (string text = streamLineReader.ReadLineString(); text != null; text = streamLineReader.ReadLineString())
         {
             if (!text.StartsWith("#"))
             {
                 if (text.StartsWith("\0"))
                 {
                     num++;
                 }
                 else
                 {
                     string[] array = TextUtils.SplitQuotedString(text, ' ');
                     if (array[0] == messageID)
                     {
                         string arg_63_0 = array[2];
                         TextUtils.UnQuoteString(array[3]);
                         File.Delete(RecycleBinManager.m_RecycleBinPath + messageID + ".eml");
                         byte[] array2 = new byte[file.Position - position - 2L];
                         file.Position = position;
                         file.Write(array2, 0, array2.Length);
                         file.Position += 2L;
                         num++;
                         break;
                     }
                 }
             }
             position = file.Position;
         }
         if (num > 500)
         {
             RecycleBinManager.Vacuum(file);
         }
     }
 }