public void RemoveNotificationAddress(string address) { if (!CoreContext.Configuration.Standalone) { throw new SecurityException("Only for standalone"); } if (!IsAdmin) { throw new SecurityException("Need admin privileges."); } if (string.IsNullOrEmpty(address)) { throw new ArgumentNullException("address"); } var deleteAddress = address.ToLowerInvariant().Trim(); var notificationAddressSettings = ServerNotificationAddressSettings.LoadForTenant(Tenant); if (notificationAddressSettings.NotificationAddress != deleteAddress) { throw new ArgumentException("Mailbox not exists"); } var mailAddress = new MailAddress(deleteAddress); using (var daoFactory = new DaoFactory()) { var serverDomainDao = daoFactory.CreateServerDomainDao(Tenant); var serverDomain = serverDomainDao.GetDomains().FirstOrDefault(d => d.Name == mailAddress.Host); if (serverDomain == null) { throw new ArgumentException("Domain not exists"); } var serverDao = daoFactory.CreateServerDao(); var server = serverDao.Get(Tenant); if (server == null) { throw new ArgumentException("Server not configured"); } var engine = new Server.Core.ServerEngine(server.Id, server.ConnectionString); engine.RemoveMailbox(deleteAddress); } var addressSettings = notificationAddressSettings.GetDefault() as ServerNotificationAddressSettings; if (addressSettings != null && !addressSettings.SaveForTenant(Tenant)) { throw new Exception("Could not delete notification address setting."); } }
public ServerNotificationAddressData CreateNotificationAddress(string localPart, string password, int domainId) { if (!CoreContext.Configuration.Standalone) { throw new SecurityException("Only for standalone"); } if (!IsAdmin) { throw new SecurityException("Need admin privileges."); } if (string.IsNullOrEmpty(localPart)) { throw new ArgumentNullException("localPart", @"Invalid address username."); } localPart = localPart.ToLowerInvariant().Trim(); if (localPart.Length > 64) { throw new ArgumentException(@"Local part of address exceed limitation of 64 characters.", "localPart"); } if (!Parser.IsEmailLocalPartValid(localPart)) { throw new ArgumentException(@"Incorrect address username.", "localPart"); } var trimPwd = Parser.GetValidPassword(password); if (domainId < 0) { throw new ArgumentException(@"Invalid domain id.", "domainId"); } var notificationAddressSettings = ServerNotificationAddressSettings.LoadForTenant(Tenant); if (!string.IsNullOrEmpty(notificationAddressSettings.NotificationAddress)) { RemoveNotificationAddress(notificationAddressSettings.NotificationAddress); } var utcNow = DateTime.UtcNow; using (var daoFactory = new DaoFactory()) { var serverDomainDao = daoFactory.CreateServerDomainDao(Tenant); var serverDomain = serverDomainDao.GetDomain(domainId); if (localPart.Length + serverDomain.Name.Length > 318) // 318 because of @ sign { throw new ArgumentException(@"Address of mailbox exceed limitation of 319 characters.", "localPart"); } var login = string.Format("{0}@{1}", localPart, serverDomain.Name); var serverDao = daoFactory.CreateServerDao(); var server = serverDao.Get(Tenant); if (server == null) { throw new ArgumentException("Server not configured"); } var engine = new Server.Core.ServerEngine(server.Id, server.ConnectionString); var maildir = PostfixMaildirUtil.GenerateMaildirPath(serverDomain.Name, localPart, utcNow); var serverMailbox = new Server.Core.Entities.Mailbox { Name = localPart, Password = trimPwd, Login = login, LocalPart = localPart, Domain = serverDomain.Name, Active = true, Quota = 0, Maldir = maildir, Modified = utcNow, Created = utcNow, }; var serverAddress = new Alias { Name = localPart, Address = login, GoTo = login, Domain = serverDomain.Name, IsActive = true, IsGroup = false, Modified = utcNow, Created = utcNow }; engine.SaveMailbox(serverMailbox, serverAddress, false); notificationAddressSettings = new ServerNotificationAddressSettings { NotificationAddress = login }; notificationAddressSettings.SaveForTenant(Tenant); var mailboxServerDao = daoFactory.CreateMailboxServerDao(); var smtpSettings = mailboxServerDao.GetServer(server.SmtpSettingsId); var address = new MailAddress(login); var notifyAddress = new ServerNotificationAddressData { Email = address.ToString(), SmtpPort = smtpSettings.Port, SmtpServer = smtpSettings.Hostname, SmtpAccount = address.ToLogin(smtpSettings.Username), SmptEncryptionType = smtpSettings.SocketType, SmtpAuth = true, SmtpAuthenticationType = smtpSettings.Authentication }; return(notifyAddress); } }