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());
        }
Ejemplo n.º 2
0
        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());
        }
Ejemplo n.º 3
0
        public async Task <LoginResult> Login(string Email, string Password, string IMAPServer = null, int?IMAPPort = null, bool?SSL = null)
        {
            if (IMAPServer == null || IMAPPort == null || SSL == null)
            {
                await Task.Run(() =>
                {
                    MailServer = MailServerFactory.CreateFor(Email);
                });

                if (MailServer == null)
                {
                    return(LoginResult.UnknownProvider);
                }
            }
            else
            {
                await Task.Run(() =>
                {
                    try
                    {
                        MailServer = MailServerFactory.CreateCustom(IMAPServer, (int)IMAPPort, (bool)SSL);
                    }
                    catch
                    {
                        if (MailServer != null)
                        {
                            MailServer.Dispose();
                        }
                        MailServer = null;
                    }
                });

                if (MailServer == null)
                {
                    return(LoginResult.IncorrectProviderData);
                }
            }
            if (await MailServer.Login(Email, Password))
            {
                IsAuthenticated = true;
                return(LoginResult.Ok);
            }
            return(LoginResult.WrongCredintials);
        }
        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());
        }