public MailboxData CreateMyMailbox(string name) { if (!SetupInfo.IsVisibleSettings("AdministrationPage") || !SetupInfo.IsVisibleSettings("MailCommonDomain") || CoreContext.Configuration.Standalone) { throw new Exception("Common domain is not available"); } var domain = MailServer.GetWebDomains(MailServerFactory).FirstOrDefault(x => x.Tenant == Defines.SHARED_TENANT_ID); if (domain == null) { throw new SecurityException("Domain not found."); } if (string.IsNullOrEmpty(name)) { throw new ArgumentException(@"Invalid mailbox name.", "name"); } var teamlabAccount = CoreContext.Authentication.GetAccountByID(SecurityContext.CurrentAccount.ID); if (teamlabAccount == null) { throw new InvalidDataException("Unknown user."); } var userInfo = CoreContext.UserManager.GetUsers(SecurityContext.CurrentAccount.ID); if (userInfo.IsVisitor()) { throw new InvalidDataException("User is visitor."); } if (name.Length > 64) { throw new ArgumentException(@"Local part of mailbox localpart exceed limitation of 64 characters.", "name"); } if (!Parser.IsEmailLocalPartValid(name)) { throw new ArgumentException("Incorrect mailbox name."); } var mailboxName = name.ToLowerInvariant(); var login = string.Format("{0}@{1}", mailboxName, domain.Name); var password = PasswordGenerator.GenerateNewPassword(12); var account = MailServerFactory.CreateMailAccount(teamlabAccount, login); var mailbox = MailServer.CreateMailbox(mailboxName, password, domain, account, MailServerFactory); if (IsSignalRAvailable) { MailBoxManager.UpdateUserActivity(TenantId, UserId); } return(mailbox.ToMailboxData()); }
public MailboxData CreateMailbox(string name, int domain_id, string user_id) { if (string.IsNullOrEmpty(name)) { throw new ArgumentException("Invalid mailbox name.", "name"); } if (domain_id < 0) { throw new ArgumentException("Invalid domain id.", "domain_id"); } Guid user; if (!Guid.TryParse(user_id, out user)) { throw new ArgumentException("Invalid user id.", "user_id"); } var teamlab_account = CoreContext.Authentication.GetAccountByID(user); if (teamlab_account == null) { throw new InvalidDataException("Unknown user."); } if (name.Length > 64) { throw new ArgumentException("Local part of mailbox localpart exceed limitation of 64 characters.", "name"); } if (!Parser.IsEmailLocalPartValid(name)) { throw new ArgumentException("Incorrect mailbox name."); } var mailbox_name = name.ToLowerInvariant(); var domain = MailServer.GetWebDomain(domain_id, MailServerFactory); var login = string.Format("{0}@{1}", mailbox_name, domain.Name); var rand = new Random(); var password = Membership.GeneratePassword(12, 0); password = Regex.Replace(password, @"[^a-zA-Z0-9]", m => rand.Next(10).ToString()); var account = MailServerFactory.CreateMailAccount(teamlab_account, login); var mailbox = MailServer.CreateMailbox(mailbox_name, password, domain, account, MailServerFactory); return(mailbox.ToMailboxData()); }
public MailboxData CreateMailbox(string name, string local_part, int domain_id, string user_id) { var domain = MailServer.GetWebDomain(domain_id, MailServerFactory); var isSharedDomain = domain.Tenant == Defines.SHARED_TENANT_ID; if (!IsAdmin && !isSharedDomain) { throw new SecurityException("Need admin privileges."); } if (string.IsNullOrEmpty(local_part)) { throw new ArgumentException(@"Invalid local part.", "local_part"); } if (domain_id < 0) { throw new ArgumentException(@"Invalid domain id.", "domain_id"); } if (name.Length > 255) { throw new ArgumentException(@"Sender name exceed limitation of 64 characters.", "name"); } Guid user; if (!Guid.TryParse(user_id, out user)) { throw new ArgumentException(@"Invalid user id.", "user_id"); } if (isSharedDomain && !IsAdmin && user != SecurityContext.CurrentAccount.ID) { throw new SecurityException("Creation of a shared mailbox is allowed only for the current account if user is not admin."); } var teamlabAccount = CoreContext.Authentication.GetAccountByID(user); if (teamlabAccount == null) { throw new InvalidDataException("Unknown user."); } var userInfo = CoreContext.UserManager.GetUsers(user); if (userInfo.IsVisitor()) { throw new InvalidDataException("User is visitor."); } if (local_part.Length > 64) { throw new ArgumentException(@"Local part of mailbox exceed limitation of 64 characters.", "local_part"); } if (!Parser.IsEmailLocalPartValid(local_part)) { throw new ArgumentException("Incorrect local part of mailbox."); } var mailboxLocalPart = local_part.ToLowerInvariant(); var login = string.Format("{0}@{1}", mailboxLocalPart, domain.Name); var password = PasswordGenerator.GenerateNewPassword(12); var account = MailServerFactory.CreateMailAccount(teamlabAccount, login); var mailbox = MailServer.CreateMailbox(name, mailboxLocalPart, password, domain, account, MailServerFactory); MailBoxManager.CachedAccounts.Clear(mailbox.Account.TeamlabAccount.ID.ToString()); return(mailbox.ToMailboxData()); }