public void CopyFolder(IMailFolder folder, Folder sqlEntity, bool update, string password) { try { folder.Open(FolderAccess.ReadOnly); } catch (Exception) { return; } Random rng = AzusaContext.GetInstance().RandomNumberGenerator; IList <UniqueId> uuids = folder.Search(FolderService.GetSearchQuery(sqlEntity)); foreach (UniqueId uuid in uuids) { if (MessageService.TestForMessage((int)uuid.Id)) { continue; } var message = folder.GetMessage(uuid); byte[] saltBuffer = new byte[16]; rng.NextBytes(saltBuffer); Array.Copy(azusaString, 0, saltBuffer, 0, azusaString.Length); int iterations = rng.Next(1000, short.MaxValue); Rfc2898DeriveBytes deriveBytes = new Rfc2898DeriveBytes(password, saltBuffer, iterations); Aes aes = Aes.Create(); aes.Key = deriveBytes.GetBytes(32); aes.IV = deriveBytes.GetBytes(16); MemoryStream ms = new MemoryStream(); CryptoStream cryptoStream = new CryptoStream(ms, aes.CreateEncryptor(), CryptoStreamMode.Write); message.WriteTo(cryptoStream); cryptoStream.Flush(); Mail child = new Mail(); child.Uid = (int)uuid.Id; child.MessageUtime = message.Date.DateTime.ToUnixTime(); child.Folder = sqlEntity.id; child.From = message.From[0].ToString(); if (message.To.Count > 0) { child.To = message.To[0].ToString(); } else { child.To = null; } child.Subject = message.Subject; child.Salt = saltBuffer; child.Iterations = (short)iterations; child.Data = new byte[ms.Position]; Array.Copy(ms.GetBuffer(), 0, child.Data, 0, ms.Position); MessageService.StoreMessage(child); } folder.Close(false); }