public void UserLoginByEmail(string email, string login, string password, WMStartPage startPage, string toEmail) { Account acct = Account.LoginAccount(email, login, password); if (acct != null) { string sessionHash = Utils.GetMD5DigestHexString(HttpContext.Current.Session.SessionID); DbStorage storage = DbStorageCreator.CreateDatabaseStorage(acct); try { storage.Connect(); storage.CreateTempRow(acct.ID, string.Format(@"sessionHash_{0}", sessionHash)); } catch (WebMailException) { throw; } catch (Exception ex) { throw new WebMailDatabaseException(ex); } finally { storage.Disconnect(); } HttpContext.Current.Response.Redirect(_wmRoot + @"/" + string.Format(@"integration/integr.aspx?hash={0}&scr={1}&to={2}", sessionHash, (int)startPage, toEmail), false); } }
private void GetNewMessagesFromServerAndSaveToDb(DbStorage dbStorage, Folder fld, int[] Indexes, out bool errorOccured, ref ArrayList pop3Uids) { _folderName = Utils.GetLocalizedFolderNameByType(fld); _msgNumber = 1; _msgsCount = Indexes.Length; MailMessageCollection mailMessageCollection = new MailMessageCollection(); // const int maxMsgsPersession = Constants.DownloadChunk; try { foreach (int index in Indexes) { // int downloadMsgsCount = ((_msgsCount) > maxMsgsPersession) ? maxMsgsPersession : _msgsCount; if ((_msgsCount) > 0) { if ((fld.SyncType == FolderSyncType.NewEntireMessages) || (fld.SyncType == FolderSyncType.AllEntireMessages)) { mailMessageCollection.Add(_pop3Obj.DownloadEntireMessage(index)); // mailMessageCollection = _pop3Obj.DownloadEntireMessages(newMsgStartIndex + 1, downloadMsgsCount); } if ((fld.SyncType == FolderSyncType.NewHeadersOnly) || (fld.SyncType == FolderSyncType.AllHeadersOnly)) { mailMessageCollection.Add(_pop3Obj.DownloadMessageHeader(index)); // mailMessageCollection = _pop3Obj.DownloadMessageHeaders(newMsgStartIndex + 1, downloadMsgsCount); } if (!_updatedFolders.ContainsKey(fld.ID)) { _updatedFolders.Add(fld.ID, fld.FullPath); } } } WebMailMessageCollection coll = new WebMailMessageCollection(_account, mailMessageCollection, true, fld); ApplyXSpam(coll); ApplyFilters(coll, dbStorage, fld, ref pop3Uids); if (_account.MailMode == MailMode.DeleteMessagesFromServer) { if ((fld.SyncType == FolderSyncType.AllHeadersOnly) || (fld.SyncType == FolderSyncType.NewHeadersOnly)) { Log.WriteLine("GetNewMessagesFromServerAndSaveToDb", "Incorrect Settings: " + _account.MailMode.ToString() + " + " + fld.SyncType.ToString()); } else { DeleteMessages(coll.ToUidsCollection(true), null); } } errorOccured = false; } catch (Exception ex) { errorOccured = true; Log.WriteException(ex); throw new WebMailException(ex); } _folderName = ""; _msgNumber = 0; _msgsCount = 0; }
public void Update() { DbStorage ds = DbStorageCreator.CreateDatabaseStorage(null); try { ds.UpdateUserColumn(_id_column, _id_user, _value); } finally { ds.Disconnect(); } }
public static UserColumn[] GetColumnsFromDb(int id_user) { DbStorage ds = DbStorageCreator.CreateDatabaseStorage(null); try { return(ds.GetUserColumns(id_user)); } finally { ds.Disconnect(); } }
public static void DeleteColumn(UserColumn column) { DbStorage ds = DbStorageCreator.CreateDatabaseStorage(null); try { ds.DeleteUserColumn(column); } finally { ds.Disconnect(); } }
public static UserColumn CreateColumn(int id_column, int id_user, int value) { DbStorage ds = DbStorageCreator.CreateDatabaseStorage(null); try { return(ds.CreateUserColumn(id_column, id_user, value)); } finally { ds.Disconnect(); } }
protected void AutoCheckMailForAccount(Account acct) { if (acct != null) { try { DbStorage dbs = DbStorageCreator.CreateDatabaseStorage(acct); MailProcessor mp = new MailProcessor(dbs); WebmailResourceManager _resMan = (new WebmailResourceManagerCreator()).CreateResourceManager(); try { mp.MessageDownloaded += new DownloadedMessageHandler(mp_MessageDownloaded); mp.Connect(); FolderCollection fc1 = dbs.GetFolders(); FolderCollection fc2 = new FolderCollection(); foreach (Folder fld in fc1) { if (fld.Type == FolderType.Inbox) { fc2.Add(fld); } } Dictionary <long, string> updatedFolders = mp.Synchronize(fc2); string strFolders = ""; foreach (KeyValuePair <long, string> kvp in updatedFolders) { strFolders += "{id: " + kvp.Key.ToString() + ", fullName: '" + kvp.Value + "'}, "; } Response.Write(@"<script type=""text/javascript"">parent.SetUpdatedFolders([" + strFolders.TrimEnd(new char[2] { ',', ' ' }) + "], false);</script>"); } finally { mp.MessageDownloaded -= new DownloadedMessageHandler(mp_MessageDownloaded); mp.Disconnect(); } } catch (WebMailException ex) { Log.WriteException(ex); errorDesc = Utils.EncodeJsSaveString(ex.Message); if (Type == 1 || Type == 2) { Session.Add(Constants.sessionErrorText, errorDesc); } } } }
protected void CheckMailForAccount(Account acct) { if (acct != null) { try { DbStorage dbs = DbStorageCreator.CreateDatabaseStorage(acct); MailProcessor mp = new MailProcessor(dbs); WebmailResourceManager _resMan = (new WebmailResourceManagerCreator()).CreateResourceManager(); try { mp.MessageDownloaded += new DownloadedMessageHandler(mp_MessageDownloaded); Response.Write(@"<script type=""text/javascript"">parent.SetStateTextHandler(""" + _resMan.GetString("LoggingToServer") + @""");</script>"); mp.Connect(); Response.Write(@"<script type=""text/javascript"">parent.SetStateTextHandler(""" + _resMan.GetString("GettingMsgsNum") + @""");</script>"); Dictionary <long, string> updatedFolders = mp.Synchronize(dbs.GetFolders()); if (Type == 0) { string strFolders = ""; foreach (KeyValuePair <long, string> kvp in updatedFolders) { strFolders += "{id: " + kvp.Key.ToString() + ", fullName: '" + kvp.Value + "'}, "; } Response.Write(@"<script type=""text/javascript"">parent.SetUpdatedFolders([" + strFolders.TrimEnd(new char[2] { ',', ' ' }) + "]);</script>"); } } finally { mp.MessageDownloaded -= new DownloadedMessageHandler(mp_MessageDownloaded); Response.Write(@"<script type=""text/javascript"">parent.SetStateTextHandler(""" + _resMan.GetString("LoggingOffFromServer") + @""");</script>"); mp.Disconnect(); } } catch (WebMailException ex) { Log.WriteException(ex); errorDesc = Utils.EncodeJsSaveString(ex.Message); if (Type == 1) { Session.Add(Constants.sessionErrorText, errorDesc); } } } }
protected void Page_Load(object sender, EventArgs e) { Account acct = Session[Constants.sessionAccount] as Account; if (acct != null) { int fileType = (string.Compare(Request.Form["file_type"], "0", true, CultureInfo.InvariantCulture) == 0) ? 0 : 1; HttpFileCollection files = Request.Files; if ((files != null) && (files.Count > 0)) { HttpPostedFile file = files[0]; if (file != null) { byte[] buffer = null; using (Stream uploadStream = file.InputStream) { buffer = new byte[uploadStream.Length]; long numBytesToRead = uploadStream.Length; long numBytesRead = 0; while (numBytesToRead > 0) { int n = uploadStream.Read(buffer, (int)numBytesRead, (int)numBytesToRead); if (n == 0) { break; } numBytesRead += n; numBytesToRead -= n; } } if (buffer != null) { try { string csvText = Encoding.Default.GetString(buffer); CsvParser parser = new CsvParser(csvText, true); DataTable dt = parser.Parse(); if (dt.Rows.Count == 0) { WebmailResourceManager resMan = (new WebmailResourceManagerCreator()).CreateResourceManager(); Log.WriteLine("import Page_Load", "Error: No contacts for import"); _jsErrorCode = 2; _jsContactsImported = 0; Session[Constants.sessionReportText] = string.Format(@"{0}", resMan.GetString("ErrorNoContacts")); return; } ArrayList contacts = new ArrayList(); for (int rowsIndex = 0; rowsIndex < dt.Rows.Count; rowsIndex++) { bool contactInitialized = false; AddressBookContact contact = new AddressBookContact(); contact.IDUser = acct.UserOfAccount.ID; string firstName = string.Empty; string lastName = string.Empty; string nickname = string.Empty; string displayName = string.Empty; string birthday = string.Empty; DataRow dr = dt.Rows[rowsIndex]; for (int columnsIndex = 0; columnsIndex < dt.Columns.Count; columnsIndex++) { if (dr[columnsIndex] != DBNull.Value) { if (dr[columnsIndex] as string != null) { switch (dt.Columns[columnsIndex].ColumnName.ToLower()) { case "first name": case "firstname": firstName = dr[columnsIndex] as string; contactInitialized = true; break; case "last name": case "lastname": lastName = dr[columnsIndex] as string; contactInitialized = true; break; case "notes": contact.Notes = dr[columnsIndex] as string; contactInitialized = true; break; case "home street": case "homestreet": case "homeaddress": contact.HStreet = dr[columnsIndex] as string; contactInitialized = true; break; case "home city": case "homecity": contact.HCity = dr[columnsIndex] as string; contactInitialized = true; break; case "home postal code": case "zip": contact.HZip = dr[columnsIndex] as string; contactInitialized = true; break; case "home state": case "homestate": contact.HState = dr[columnsIndex] as string; contactInitialized = true; break; case "home country": case "homecountry": case "home country/region": contact.HCountry = dr[columnsIndex] as string; contactInitialized = true; break; case "home phone": case "homephone": contact.HPhone = dr[columnsIndex] as string; contactInitialized = true; break; case "home fax": case "homefax": contact.HFax = dr[columnsIndex] as string; contactInitialized = true; break; case "mobile phone": case "mobilephone": contact.HMobile = dr[columnsIndex] as string; contactInitialized = true; break; case "web page": case "webpage": case "personal web page": case "personalwebpage": contact.HWeb = dr[columnsIndex] as string; contactInitialized = true; break; case "company": contact.BCompany = dr[columnsIndex] as string; contactInitialized = true; break; case "business street": case "businessstreet": contact.BStreet = dr[columnsIndex] as string; contactInitialized = true; break; case "business city": case "businesscity": contact.BCity = dr[columnsIndex] as string; contactInitialized = true; break; case "business state": case "businessstate": contact.BState = dr[columnsIndex] as string; contactInitialized = true; break; case "business postal code": contact.BZip = dr[columnsIndex] as string; contactInitialized = true; break; case "business country": case "business country/region": contact.BCountry = dr[columnsIndex] as string; contactInitialized = true; break; case "job title": case "jobtitle": contact.BJobTitle = dr[columnsIndex] as string; contactInitialized = true; break; case "department": contact.BDepartment = dr[columnsIndex] as string; contactInitialized = true; break; case "office location": case "officelocation": contact.BOffice = dr[columnsIndex] as string; contactInitialized = true; break; case "business phone": case "businessphone": contact.BOffice = dr[columnsIndex] as string; contactInitialized = true; break; case "business fax": case "businessfax": contact.BFax = dr[columnsIndex] as string; contactInitialized = true; break; case "business web page": case "businesswebpage": contact.BWeb = dr[columnsIndex] as string; contactInitialized = true; break; case "e-mail address": case "e-mailaddress": case "emailaddress": case "e-mail": case "email": contact.HEmail = dr[columnsIndex] as string; contactInitialized = true; break; case "e-mail display name": case "e-maildisplayname": case "emaildisplayname": case "name": displayName = dr[columnsIndex] as string; contactInitialized = true; break; case "birthday": birthday = dr[columnsIndex] as string; contactInitialized = true; break; case "nickname": nickname = dr[columnsIndex] as string; contactInitialized = true; break; } } } } if (!contactInitialized) { WebmailResourceManager resMan = (new WebmailResourceManagerCreator()).CreateResourceManager(); Log.WriteLine("import Page_Load", "Error: CSV file has invalid format"); _jsErrorCode = 3; _jsContactsImported = 0; Session[Constants.sessionReportText] = string.Format(@"{0}", resMan.GetString("ErrorInvalidCSV")); break; } string fullName; if (nickname != string.Empty) { fullName = string.Format("{0} \"{1}\" {2}", firstName, nickname, lastName); } else { fullName = string.Format("{0} {1}", firstName, lastName); } contact.FullName = fullName; try { DateTime birthdayDate = DateTime.Parse(birthday); contact.BirthdayDay = (byte)birthdayDate.Day; contact.BirthdayMonth = (byte)birthdayDate.Month; contact.BirthdayYear = (short)birthdayDate.Year; } catch {} contacts.Add(contact); } DbStorage storage = DbStorageCreator.CreateDatabaseStorage(acct); try { storage.Connect(); foreach (AddressBookContact contact in contacts) { contact.AutoCreate = true; try { storage.CreateAddressBookContact(contact); _jsContactsImported++; } catch { } } _jsErrorCode = 1; WebmailResourceManager resMan = (new WebmailResourceManagerCreator()).CreateResourceManager(); Session[Constants.sessionReportText] = string.Format(@"{0} {1} {2}", resMan.GetString("InfoHaveImported"), _jsContactsImported, resMan.GetString("InfoNewContacts")); } finally { storage.Disconnect(); } } catch { Log.WriteLine("import Page_Load", "Error while importing contacts"); _jsErrorCode = 0; _jsContactsImported = 0; } } } } } }
public AddressBookDBStorage(Account account) : base(account) { _dbStorage = DbStorageCreator.CreateDatabaseStorage(account); }
protected void ApplyFilters(WebMailMessageCollection messageCollection, DbStorage dbStorage, Folder fld, ref ArrayList arr) { Filter[] filters = dbStorage.GetFilters(); if (_account.MailIncomingProtocol == IncomingMailProtocol.WMServer) { ArrayList allFiltersArr = new ArrayList(); Folder virusFolder = dbStorage.GetFolder(FolderType.Quarantine); if (virusFolder != null) { Filter fltVirus = new Filter(0, _account.ID, FilterField.XVirusHeader, FilterCondition.BeginsWithSubstring, "infected", FilterAction.MoveToFolder, virusFolder.ID, true); allFiltersArr.Add(fltVirus); } Folder spamFolder = dbStorage.GetFolder(FolderType.Spam); if (spamFolder != null) { Filter flt = new Filter(0, _account.ID, FilterField.XSpamHeader, FilterCondition.BeginsWithSubstring, "spam", FilterAction.MoveToFolder, spamFolder.ID, true); allFiltersArr.Add(flt); } if (filters.Length > 0) { foreach (Filter flt in filters) { allFiltersArr.Add(flt); } } Filter[] allFilters = (Filter[])allFiltersArr.ToArray(typeof(Filter)); // if (filters.Length > 0) filters.CopyTo(allFilters, 0); filters = allFilters; } int id_msg = dbStorage.GetLastMsgID(); foreach (WebMailMessage webMsg in messageCollection) { id_msg = Utils.RandMsgID(++id_msg); bool needToSave = true; if (fld.Type == FolderType.Inbox) { foreach (Filter flt in filters) { if (flt.Applied == false) { continue; } FilterAction action = flt.GetActionToApply(webMsg); switch (action) { case FilterAction.DeleteFromServerImmediately: { object[] messageIndexSet = new object[] { -1 }; if (_account.MailIncomingProtocol != IncomingMailProtocol.Imap4) { messageIndexSet[0] = webMsg.StrUid; } else if (_account.MailIncomingProtocol == IncomingMailProtocol.Imap4) { messageIndexSet[0] = webMsg.IntUid; } DeleteMessages(messageIndexSet, fld); needToSave = false; break; } case FilterAction.MoveToFolder: if (needToSave) { Folder toFld = dbStorage.GetFolder(flt.IDFolder); if (toFld != null) { if (fld.FullPath != toFld.FullPath) { if (_account.MailIncomingProtocol == IncomingMailProtocol.WMServer) { WmServerFS wmserverFS = new WmServerFS(_account); webMsg.StrUid = wmserverFS.MoveMessage(webMsg.StrUid, fld.FullPath, toFld.FullPath); } } dbStorage.SaveMessage(id_msg, webMsg, toFld); if (!_updatedFolders.ContainsKey(toFld.ID)) { _updatedFolders.Add(toFld.ID, toFld.FullPath); } } needToSave = false; } break; case FilterAction.MarkGrey: webMsg.Grayed = true; break; } } } if (needToSave) { dbStorage.SaveMessage(id_msg, webMsg, fld); } arr.Add((webMsg.IntUid > 0) ? (object)webMsg.IntUid : webMsg.StrUid); } }
public override Dictionary <long, string> Synchronize(FolderCollection foldersTree) { DbStorage dbStorage = DbStorageCreator.CreateDatabaseStorage(_account); FolderCollection folders = new FolderCollection(); FolderCollection.CreateFolderListFromTree(ref folders, foldersTree); ArrayList pop3Uids = new ArrayList(); bool downloadErrorOccured = false; Folder fld = folders[FolderType.Inbox]; if (fld != null) { if (fld.SyncType == FolderSyncType.DirectMode) { if (!_updatedFolders.ContainsKey(fld.ID)) { _updatedFolders.Add(fld.ID, fld.FullPath); } return(_updatedFolders); } if (fld.SyncType == FolderSyncType.DontSync) { return(_updatedFolders); } try { dbStorage.Connect(); // get new messages start index string[] pop3DbUids = dbStorage.GetUids(); string[] pop3ServerUids = _pop3Obj.GetMessageUids(); ArrayList dbUidsToDelete = new ArrayList(); ArrayList pop3ServerIndexesToDownload = new ArrayList(); foreach (string pop3DbUid in pop3DbUids) { if (Array.IndexOf(pop3ServerUids, pop3DbUid) == -1) { dbUidsToDelete.Add(pop3DbUid); } } foreach (string pop3ServerUid in pop3ServerUids) { if (Array.IndexOf(pop3DbUids, pop3ServerUid) == -1) { pop3ServerIndexesToDownload.Add(_pop3Obj.GetMessageIndexFromUid(pop3ServerUid)); } } if ((_account.MailMode == MailMode.KeepMessagesOnServer) || (_account.MailMode == MailMode.KeepMessagesOnServerAndDeleteMessageWhenItsRemovedFromTrash)) { object[] serverUidsToDelete = dbStorage.GetOldMessagesUids(_account.MailsOnServerDays); // delete from server if (serverUidsToDelete.Length > 0) { DeleteMessages(serverUidsToDelete, fld); } } // retrieve new messages GetNewMessagesFromServerAndSaveToDb(dbStorage, fld, (int[])pop3ServerIndexesToDownload.ToArray(typeof(int)), out downloadErrorOccured, ref pop3Uids); if ((fld.SyncType == FolderSyncType.NewEntireMessages) || (fld.SyncType == FolderSyncType.NewHeadersOnly)) { return(_updatedFolders); } // delete messages from db if (dbUidsToDelete.Count > 0) { WebMailMessageCollection msgsToDelete = dbStorage.LoadMessagesByUids((string[])dbUidsToDelete.ToArray(typeof(string)), fld, false); dbStorage.DeleteMessages(msgsToDelete.ToIDsCollection(), fld); if (!_updatedFolders.ContainsKey(fld.ID)) { _updatedFolders.Add(fld.ID, fld.FullPath); } } } finally { if (!downloadErrorOccured) { // get all uids and save it to db pop3Uids = ArrayList.Adapter(_pop3Obj.GetMessageUids()); dbStorage.ReplaceUids(pop3Uids.ToArray()); } else { dbStorage.SaveUids(pop3Uids.ToArray()); } dbStorage.Disconnect(); } } return(_updatedFolders); }
protected void Page_Load(object sender, System.EventArgs e) { string hash = Request.QueryString["hash"] as string; string screen = Request.QueryString["scr"] as string; string to = Request.QueryString["to"] as string; if ((hash != null) && (hash.Length >= 0)) { WebmailSettings settings = (new WebMailSettingsCreator()).CreateWebMailSettings(); TempRow row = null; DbStorage storage = DbStorageCreator.CreateDatabaseStorage(null); try { storage.Connect(); row = storage.GetTempRow(-1, string.Format(@"sessionHash_{0}", hash)); if (row != null) { storage.DeleteTempRow(row.ID); } else { throw new WebMailException("Temp Row Is NULL"); } } catch (Exception ex) { Log.WriteException(ex); Response.Redirect(@"../default.aspx", true); } finally { storage.Disconnect(); } if (row != null) { Account acct = Account.LoadFromDb(row.IDAcct, -1, false); if (Session[Constants.sessionAccount] == null) { Session.Add(Constants.sessionAccount, acct); } else { Session[Constants.sessionAccount] = acct; } if (Session[Constants.sessionUserID] == null) { Session.Add(Constants.sessionUserID, acct.IDUser); } else { Session[Constants.sessionUserID] = acct.IDUser; } WMStartPage page = WMStartPage.Mailbox; try { short scrNum = short.Parse(screen); page = (WMStartPage)scrNum; } catch {} switch (page) { case WMStartPage.NewMessage: if (to != null) { to = string.Format(@"&to={0}", to); } goto default; case WMStartPage.Settings: goto default; case WMStartPage.Contacts: goto default; case WMStartPage.Mailbox: goto default; case WMStartPage.Calendar: goto default; default: string check = string.Empty; if (acct.GetMailAtLogin) { check = "check=1&"; } HttpContext.Current.Response.Redirect(string.Format(@"../webmail.aspx?" + check + @"start={0}{1}", (int)page, to)); break; } } } }