/// <summary> /// Gets specified IMAP folder's messges info. /// </summary> /// <param name="userName"></param> /// <param name="folder">IMAP folder which messages info to get. Eg. 'Inbox'.</param> /// <param name="messages"></param> public void GetMessagesInfo(string userName,string folder,LumiSoft.Net.IMAP.Server.IMAP_Messages messages) { switch(m_DB_Type) { #region DB_Type.XML case DB_Type.XML: string path = m_MailStorePath + "Mailboxes\\" + userName + "\\" + folder; // Check if Directory exists, if not Create for Inbox only if(!Directory.Exists(path)){ if(folder.ToLower().Trim() == "inbox"){ Directory.CreateDirectory(path); } else{ throw new Exception("Folder '" + folder + "' doesn't exist"); } } string[] files = Directory.GetFiles(path,"*.eml"); foreach(string file in files){ int messageSize = 0; using(FileStream fStream = File.OpenRead(file)){ messageSize = (int)fStream.Length; } // date[yyyyMMddHHmmss]_int[uid]_int[flags] string[] fileParts = Path.GetFileNameWithoutExtension(file).Split('_'); DateTime recieveDate = DateTime.ParseExact(fileParts[0],"yyyyMMddHHmmss",System.Globalization.DateTimeFormatInfo.InvariantInfo); int uid = Convert.ToInt32(fileParts[1]); LumiSoft.Net.IMAP.Server.IMAP_MessageFlags flags = (LumiSoft.Net.IMAP.Server.IMAP_MessageFlags)Enum.Parse(typeof(LumiSoft.Net.IMAP.Server.IMAP_MessageFlags),fileParts[2]); messages.AddMessage(Path.GetFileNameWithoutExtension(file),uid,flags,messageSize,recieveDate); } break; #endregion #region DB_Type.MSSQL case DB_Type.MSSQL: using(WSqlCommand sqlCmd = new WSqlCommand(m_ConStr,"lspr_GetMessageList")){ sqlCmd.AddParameter("@Mailbox",SqlDbType.NVarChar,userName); sqlCmd.AddParameter("@Folder" ,SqlDbType.NVarChar,folder); DataSet ds = sqlCmd.Execute(); ds.Tables[0].TableName = "lsMailStore"; foreach(DataRow dr in ds.Tables["lsMailStore"].Rows){ string messageID = dr["MessageID"].ToString(); int size = Convert.ToInt32(dr["Size"]); DateTime date = Convert.ToDateTime(dr["Date"]); int flags = Convert.ToInt32(dr["MessageFlags"]); int uid = Convert.ToInt32(dr["UID"]); messages.AddMessage(messageID,uid,(IMAP_MessageFlags)flags,size,date); } } break; #endregion } }
/// <summary> /// Gets Inbox messages info for specified user mailbox. /// </summary> /// <param name="mailBox"></param> /// <param name="msgs"></param> public void GetMessageList(string mailBox,LumiSoft.Net.POP3.Server.POP3_Messages msgs) { switch(m_DB_Type) { #region DB_Type.XML case DB_Type.XML: string path = m_MailStorePath + "Mailboxes\\" + mailBox + "\\Inbox\\"; // Check if Directory exists, if not Create if(!Directory.Exists(path)){ Directory.CreateDirectory(path); } string[] files = Directory.GetFiles(path,"*.eml"); foreach(string file in files){ int messageSize = 0; using(FileStream fStream = File.OpenRead(file)){ messageSize = (int)fStream.Length; } msgs.AddMessage(Path.GetFileNameWithoutExtension(file),messageSize); } break; #endregion #region DB_Type.MSSQL case DB_Type.MSSQL: using(WSqlCommand sqlCmd = new WSqlCommand(m_ConStr,"lspr_GetMessageList")){ sqlCmd.AddParameter("@Mailbox",SqlDbType.NVarChar,mailBox); sqlCmd.AddParameter("@Folder" ,SqlDbType.NVarChar,"Inbox"); DataSet ds = sqlCmd.Execute(); ds.Tables[0].TableName = "lsMailStore"; foreach(DataRow dr in ds.Tables["lsMailStore"].Rows){ string messageID = dr["MessageID"].ToString(); int size = Convert.ToInt32(dr["Size"]); msgs.AddMessage(messageID,size); } } break; #endregion } }