コード例 #1
0
        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);
            }
        }
コード例 #2
0
        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;
        }
コード例 #3
0
ファイル: User.cs プロジェクト: cuplexProjects/C-Projects
        public void Update()
        {
            DbStorage ds = DbStorageCreator.CreateDatabaseStorage(null);

            try
            {
                ds.UpdateUserColumn(_id_column, _id_user, _value);
            }
            finally
            {
                ds.Disconnect();
            }
        }
コード例 #4
0
ファイル: User.cs プロジェクト: cuplexProjects/C-Projects
        public static UserColumn[] GetColumnsFromDb(int id_user)
        {
            DbStorage ds = DbStorageCreator.CreateDatabaseStorage(null);

            try
            {
                return(ds.GetUserColumns(id_user));
            }
            finally
            {
                ds.Disconnect();
            }
        }
コード例 #5
0
ファイル: User.cs プロジェクト: cuplexProjects/C-Projects
        public static void DeleteColumn(UserColumn column)
        {
            DbStorage ds = DbStorageCreator.CreateDatabaseStorage(null);

            try
            {
                ds.DeleteUserColumn(column);
            }
            finally
            {
                ds.Disconnect();
            }
        }
コード例 #6
0
ファイル: User.cs プロジェクト: cuplexProjects/C-Projects
        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();
            }
        }
コード例 #7
0
        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);
                    }
                }
            }
        }
コード例 #8
0
 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);
             }
         }
     }
 }
コード例 #9
0
        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;
                            }
                        }
                    }
                }
            }
        }
コード例 #10
0
 public AddressBookDBStorage(Account account)
     : base(account)
 {
     _dbStorage = DbStorageCreator.CreateDatabaseStorage(account);
 }
コード例 #11
0
        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);
            }
        }
コード例 #12
0
        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);
        }
コード例 #13
0
        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;
                    }
                }
            }
        }