public async Task AddEmailConnector(EmailConnector emailConnector)
        {
            var sql = @"INSERT INTO EmailConnector(EmailConnectorId, 
                    Name, 
                    EmailAddress, 
                    UserName, 
                    Password, 
                    Status, 
                    IP, 
                    Port, 
                    EnableSSL, 
                    Description, Type) 
                    VALUES(@EmailConnectorId, @Name, @EmailAddress, @UserName, @Password, @Status, @IP, @Port, @EnableSSL, @Description, @Type)";

            await _context.Execute(sql, new
            {
                emailConnector.EmailConnectorId,
                emailConnector.Name,
                emailConnector.EmailAddress,
                emailConnector.Password,
                emailConnector.Status,
                IP = emailConnector.Server.Server,
                emailConnector.Server.Port,
                emailConnector.Server.EnableSSL,
                emailConnector.Description,
                emailConnector.UserName,
                emailConnector.Type
            });
        }
        public async Task <OperationResult> Add(AddEmailConnectorModel model)
        {
            try
            {
                var emailConnector = new EmailConnector(model.Name, model.EmailAddress, model.UserName, model.Password, new EmailServerConfig(model.Server, model.Port, model.EnableSSL), model.Type, model.Description);

                var duplicateChecking = await _unitOfWork.EmailConnectorRepository.CheckDuplicated(emailConnector.EmailAddress, emailConnector.Name, emailConnector.EmailConnectorId);

                if (!duplicateChecking)
                {
                    //TODO: we need to validate whether the email setting are correct

                    await _unitOfWork.EmailConnectorRepository.AddEmailConnector(emailConnector);

                    var result = await _unitOfWork.SaveAsync();

                    if (result.Success)
                    {
                        return(OperationResult.SuccessResult);
                    }
                    else
                    {
                        return(new UnexpectedErrorResult(result.Error.Message));
                    }
                }
                else
                {
                    return(new DuplicateEmailConnectorResult());
                }
            }
            catch (Exception ex)
            {
                return(new UnexpectedErrorResult(ex.Message));
            }
        }
        public void Send_WithNullEmail_ThrowArgumentNullException()
        {
            EmailConnector emailConnector = new EmailConnector();

            emailConnector.Send(null);
        }