public ActionResult ConviteUsuarioPrincipal()
        {
            Usuario usuario = new Usuario()
            {
                RazaoSocial = "Teste razao social"
            };
            Evento evento = new Evento()
            {
                Descricao = "Evento Teste"
            };
            EnvioConviteEventoViewModel envioconviteViewModel = new EnvioConviteEventoViewModel()
            {
                Email = "*****@*****.**", Usuario_Organizador = usuario, Evento = evento
            };

            var viewString = Util.Utilidades.RenderViewToString(new ControllerContext(HttpContext.Request.RequestContext, this), "ConviteUsuarioPrincipal", envioconviteViewModel);


            return(View(envioconviteViewModel));
        }
        public async Task <IHttpActionResult> ConviteEventoEnvio(EnvioConviteEventoViewModel envioConviteViewModel)
        {
            // Cria Context Request do Controller da View enviada por Email
            var controller = Util.Utilidades.CreateController <ConviteController>();
            var context    = controller.ControllerContext.RequestContext;

            var eventoConvite    = Db.Eventos.ToList().SingleOrDefault(e => e.Id == envioConviteViewModel.Id_Evento);
            var usuarioExist     = Db.Users.ToList().Exists(u => u.UserName == envioConviteViewModel.Email);
            var claimPrincipal   = (ClaimsPrincipal)Thread.CurrentPrincipal;
            var exist            = claimPrincipal.Claims.ToList().Exists(c => c.Type == "id_usuario");
            var id_usuarioLogado = claimPrincipal.Claims.SingleOrDefault(c => c.Type == "id_usuario").Value;
            var organizador      = bool.Parse(claimPrincipal.Claims.SingleOrDefault(c => c.Type == "organizador").Value);
            var usuarioLogado    = Db.Users.ToList().SingleOrDefault(u => u.Id == id_usuarioLogado);

            if (!ModelState.IsValid)
            {
                return(BadRequest());
            }

            if (eventoConvite == null)
            {
                return(BadRequest("Este Evento não existe."));
            }

            if (!organizador)
            {
                return(BadRequest("É Necessário ser um Organizador para Enviar um Convite"));
            }

            if (usuarioExist)
            {
                //Verifica se usuario ja esta vinculado com evento
                var eventoUsuarioExist = (from eventoUsuario in Db.Evento_Usuarios
                                          join evento in Db.Eventos on eventoUsuario.Id_Evento equals evento.Id
                                          where eventoUsuario.Id_Usuario == id_usuarioLogado &&
                                          eventoUsuario.Id_Evento == envioConviteViewModel.Id_Evento &&
                                          eventoUsuario.Deletado == false &&
                                          evento.Deletado == false
                                          select eventoUsuario).SingleOrDefault();

                if (eventoUsuarioExist != null)
                {
                    return(BadRequest("Este Usuario já esta vinculado com este Evento"));
                }
            }


            var dataExpira = DateTime.Now + TimeSpan.FromDays(7); // Expira em 7 Dias

            TokenEnvio token = new TokenEnvio()
            {
                Token    = Guid.NewGuid().ToString(),
                ExpiraEm = dataExpira,
                Ativo    = true
            };

            var tokenCriado = _tokenEnvioRepository.Criar(token);

            envioConviteViewModel.Id_Evento = eventoConvite.Id;
            envioConviteViewModel.Id_usuario_organizador = usuarioLogado.Id;
            envioConviteViewModel.Usuario_Organizador    = usuarioLogado;
            envioConviteViewModel.Evento = eventoConvite;
            envioConviteViewModel.Token  = tokenCriado.Token;

            var viewString = Util.Utilidades.RenderViewToString(new ControllerContext(context, controller), "ConviteUsuarioPrincipal", envioConviteViewModel);

            var message = new MailMessage();

            message.To.Add(new MailAddress(envioConviteViewModel.Email));
            message.From       = (new MailAddress("*****@*****.**"));
            message.Body       = string.Format(viewString, envioConviteViewModel.Email);
            message.IsBodyHtml = true;
            message.Subject    = "Convite para Particiar de Evento";

            using (var smtp = new SmtpClient())
            {
                var credenciais = new NetworkCredential()
                {
                    UserName = "******",
                    Password = "******"
                };

                smtp.Credentials = credenciais;
                smtp.Host        = "smtp.gmail.com";
                smtp.Port        = 587;
                smtp.EnableSsl   = true;
                await smtp.SendMailAsync(message);

                return(Ok("Convite Enviado"));
            }
        }