protected MailboxDomain ToMailboxDomain(object[] r) { var d = new MailboxDomain { Id = Convert.ToInt32(r[0]), ProviderId = Convert.ToInt32(r[1]), Name = Convert.ToString(r[2]) }; return(d); }
public int SaveDomain(MailboxDomain domain) { var query = new SqlInsert(MailboxDomainTable.TABLE_NAME, true) .InColumnValue(MailboxDomainTable.Columns.Id, domain.Id) .InColumnValue(MailboxDomainTable.Columns.ProviderId, domain.ProviderId) .InColumnValue(MailboxDomainTable.Columns.DomainName, domain.Name) .Identity(0, 0, true); var id = Db.ExecuteScalar <int>(query); return(id); }
public bool SaveMailBox(MailBoxData mailbox, AuthorizationServiceType authType = AuthorizationServiceType.None) { if (mailbox == null) { throw new ArgumentNullException("mailbox"); } if (mailbox.IsTeamlab) { throw new ArgumentException("Mailbox with specified email can't be updated"); } using (var daoFactory = new DaoFactory()) { using (var tx = daoFactory.DbManager.BeginTransaction()) { var daoMailbox = daoFactory.CreateMailboxDao(); var daoMailboxServer = daoFactory.CreateMailboxServerDao(); var daoMailboxDomain = daoFactory.CreateMailboxDomainDao(); var daoMailboxProvider = daoFactory.CreateMailboxProviderDao(); var existingMailbox = daoMailbox.GetMailBox( new СoncreteUserMailboxExp( mailbox.EMail, mailbox.TenantId, mailbox.UserId)); int newInServerId, newOutServerId; var mailboxId = 0; var dateCreated = DateTime.UtcNow; var enabled = true; var host = authType == AuthorizationServiceType.Google ? Defines.GOOGLE_HOST : mailbox.EMail.Host; // Get new imap/pop3 server from MailBoxData var newInServer = new MailboxServer { Hostname = mailbox.Server, Port = mailbox.Port, Type = mailbox.Imap ? Defines.IMAP : Defines.POP3, Username = mailbox.EMail.ToLoginFormat(mailbox.Account) ?? mailbox.Account, SocketType = mailbox.Encryption.ToNameString(), Authentication = mailbox.Authentication.ToNameString() }; // Get new smtp server from MailBoxData var newOutServer = new MailboxServer { Hostname = mailbox.SmtpServer, Port = mailbox.SmtpPort, Type = Defines.SMTP, Username = mailbox.SmtpAuthentication != SaslMechanism.None ? mailbox.EMail.ToLoginFormat(mailbox.SmtpAccount) ?? mailbox.SmtpAccount : "", SocketType = mailbox.SmtpEncryption.ToNameString(), Authentication = mailbox.SmtpAuthentication.ToNameString() }; if (existingMailbox != null) { mailboxId = existingMailbox.Id; enabled = existingMailbox.Enabled; dateCreated = existingMailbox.DateCreated; // Get existing settings by existing ids var dbInServer = daoMailboxServer.GetServer(existingMailbox.ServerId); var dbOutServer = daoMailboxServer.GetServer(existingMailbox.SmtpServerId); // Compare existing settings with new if (!dbInServer.Equals(newInServer) || !dbOutServer.Equals(newOutServer)) { var domain = daoMailboxDomain.GetDomain(host); List <MailboxServer> trustedServers = null; if (domain != null) { trustedServers = daoMailboxServer.GetServers(domain.ProviderId); } newInServerId = GetMailboxServerId(daoMailboxServer, dbInServer, newInServer, trustedServers); newOutServerId = GetMailboxServerId(daoMailboxServer, dbOutServer, newOutServer, trustedServers); } else { newInServerId = existingMailbox.ServerId; newOutServerId = existingMailbox.SmtpServerId; } } else { //Find settings by host var domain = daoMailboxDomain.GetDomain(host); if (domain != null) { //Get existing servers with isUserData = 0 var trustedServers = daoMailboxServer.GetServers(domain.ProviderId); //Compare existing settings with new var foundInServer = trustedServers.FirstOrDefault(ts => ts.Equals(newInServer)); var foundOutServer = trustedServers.FirstOrDefault(ts => ts.Equals(newOutServer)); //Use existing or save new servers newInServerId = foundInServer != null ? foundInServer.Id : SaveMailboxServer(daoMailboxServer, newInServer, domain.ProviderId); newOutServerId = foundOutServer != null ? foundOutServer.Id : SaveMailboxServer(daoMailboxServer, newOutServer, domain.ProviderId); } else { //Save new servers var newProvider = new MailboxProvider { Id = 0, Name = host, DisplayShortName = "", DisplayName = "", Url = "" }; newProvider.Id = daoMailboxProvider.SaveProvider(newProvider); var newDomain = new MailboxDomain { Id = 0, Name = host, ProviderId = newProvider.Id }; daoMailboxDomain.SaveDomain(newDomain); newInServerId = SaveMailboxServer(daoMailboxServer, newInServer, newProvider.Id); newOutServerId = SaveMailboxServer(daoMailboxServer, newOutServer, newProvider.Id); } } var loginDelayTime = GetLoginDelayTime(mailbox); //Save Mailbox to DB var mb = new Mailbox { Id = mailboxId, Tenant = mailbox.TenantId, User = mailbox.UserId, Address = mailbox.EMail.Address.ToLowerInvariant(), Name = mailbox.Name, Password = mailbox.Password, MsgCountLast = mailbox.MessagesCount, SmtpPassword = mailbox.SmtpPassword, SizeLast = mailbox.Size, LoginDelay = loginDelayTime, Enabled = enabled, Imap = mailbox.Imap, BeginDate = mailbox.BeginDate, OAuthType = mailbox.OAuthType, OAuthToken = mailbox.OAuthToken, ServerId = newInServerId, SmtpServerId = newOutServerId, DateCreated = dateCreated }; var mailBoxId = daoMailbox.SaveMailBox(mb); mailbox.MailBoxId = mailBoxId; if (mailBoxId < 1) { tx.Rollback(); return(false); } tx.Commit(); } } return(true); }
public bool SetMailBoxSettings(ClientConfig config, bool isUserData) { try { if (string.IsNullOrEmpty(config.EmailProvider.Id) || !config.EmailProvider.Domain.Any() || config.EmailProvider.IncomingServer == null || !config.EmailProvider.IncomingServer.Any() || config.EmailProvider.OutgoingServer == null || !config.EmailProvider.OutgoingServer.Any()) { throw new Exception("Incorrect config"); } using (var daoFactory = new DaoFactory()) { using (var tx = daoFactory.DbManager.BeginTransaction()) { var daoMbProvider = daoFactory.CreateMailboxProviderDao(); var provider = daoMbProvider.GetProvider(config.EmailProvider.Id); if (provider == null) { provider = new MailboxProvider { Id = 0, Name = config.EmailProvider.Id, DisplayName = config.EmailProvider.DisplayName, DisplayShortName = config.EmailProvider.DisplayShortName, Url = config.EmailProvider.Documentation.Url }; provider.Id = daoMbProvider.SaveProvider(provider); if (provider.Id < 0) { tx.Rollback(); throw new Exception("id_provider not saved into DB"); } } var daoMbDomain = daoFactory.CreateMailboxDomainDao(); foreach (var domainName in config.EmailProvider.Domain) { var domain = daoMbDomain.GetDomain(domainName); if (domain != null) { continue; } domain = new MailboxDomain { Id = 0, ProviderId = provider.Id, Name = domainName }; domain.Id = daoMbDomain.SaveDomain(domain); if (domain.Id < 0) { tx.Rollback(); throw new Exception("id_domain not saved into DB"); } } var daoMbServer = daoFactory.CreateMailboxServerDao(); var existingServers = daoMbServer.GetServers(provider.Id); var newServers = config.EmailProvider .IncomingServer .ConvertAll(s => new MailboxServer { Id = 0, Username = s.Username, Type = s.Type, ProviderId = provider.Id, Hostname = s.Hostname, Port = s.Port, SocketType = s.SocketType, Authentication = s.Authentication, IsUserData = isUserData }); newServers.AddRange(config.EmailProvider .OutgoingServer .ConvertAll(s => new MailboxServer { Id = 0, Username = s.Username, Type = s.Type, ProviderId = provider.Id, Hostname = s.Hostname, Port = s.Port, SocketType = s.SocketType, Authentication = s.Authentication, IsUserData = isUserData })); foreach (var s in newServers) { var existing = existingServers.FirstOrDefault( es => es.Type.Equals(s.Type) && es.Port == s.Port && es.SocketType.Equals(s.SocketType)); if (existing != null) { if (existing.Equals(s)) { continue; } s.Id = existing.Id; } s.Id = daoMbServer.SaveServer(s); if (s.Id < 0) { tx.Rollback(); throw new Exception("id_server not saved into DB"); } } tx.Commit(); } } } catch (Exception ex) { Log.Error("SetMailBoxSettings failed", ex); return(false); } return(true); }