public ActionResult criarNovoEmail(int?idEmailEncaminhamento, int?idEmailResposta)
        {
            var Config = ConfiguracaoEmailBL.getInstance.carregar();

            EmailNovoVM ViewModel = new EmailNovoVM();

            ViewModel.emailRemetente = Config.contaEmailSistema;

            //Se for uma resposta ou encaminhamento preencher campos padrão adicionando espaço para nova mensagem.
            int?idEmail = (idEmailEncaminhamento ?? idEmailResposta);
            var Email   = this.OEmailBL.carregar(UtilNumber.toInt32(idEmail));

            if (Email != null)
            {
                ViewModel.assunto       = Email.assunto;
                ViewModel.corpoMensagem = String.Concat("<br /><br /><br />", "___________________________________________________________________________________", Email.corpoMensagem);

                //Se for uma resposta é necessário já selecionar o endereço de destino
                if (UtilNumber.toInt32(idEmailResposta) > 0)
                {
                    ViewModel.listaDestinos.Add(Email.emailRemetente);
                }
            }

            return(View(ViewModel));
        }
        public ActionResult enviarEmail(EmailNovoVM ViewModel)
        {
            string nomeView = "criar-novo-email";

            if (!ModelState.IsValid)
            {
                return(View(nomeView, ViewModel));
            }

            var ConfiguracaoSistema = ConfiguracaoSistemaBL.getInstance.carregar(HttpContextFactory.Current.User.idOrganizacao());

            LogEmail NovoEmail = new LogEmail();

            NovoEmail.flagFluxo = EmailBL.FLAG_EMAIL_ENVIADO;

            NovoEmail.emailRemetente = ViewModel.emailRemetente;

            NovoEmail.nomeRemetente = ConfiguracaoSistema.tituloSistema;

            NovoEmail.assunto = ViewModel.assunto;

            NovoEmail.corpoMensagem = ViewModel.corpoMensagem;

            NovoEmail.dtEnvio = DateTime.Now;

            //Buscar dados completos dos contatos (se houver)
            List <string> listaEmails = new List <string>();

            listaEmails.AddRange(ViewModel.listaDestinos);
            listaEmails.AddRange(ViewModel.listaCopias);
            listaEmails.AddRange(ViewModel.listaCopiasOcultas);
            var listaContatos = this.OEmailBL.listarContatos("").Where(x => listaEmails.Contains(x.email)).ToList();

            ViewModel.listaDestinos.ForEach(x => {
                var Contato = listaContatos.Where(c => c.email == x).FirstOrDefault();
                NovoEmail.listaEmailDestino.Add(new LogEmailDestino {
                    nomeDestino = (Contato == null? "": Contato.nome), emailDestino = (Contato == null? x: Contato.email), flagCopia = "N", flagCopiaOculta = "N"
                });
            });

            ViewModel.listaCopias.ForEach(x => {
                var Contato = listaContatos.FirstOrDefault(c => c.email == x);
                NovoEmail.listaEmailDestino.Add(new LogEmailDestino {
                    nomeDestino = (Contato == null? "": Contato.nome), emailDestino = (Contato == null? x: Contato.email), flagCopia = "S", flagCopiaOculta = "N"
                });
            });

            ViewModel.listaCopiasOcultas.ForEach(x => {
                var Contato = listaContatos.FirstOrDefault(c => c.email == x);
                NovoEmail.listaEmailDestino.Add(new LogEmailDestino {
                    nomeDestino = (Contato == null? "": Contato.nome), emailDestino = (Contato == null? x: Contato.email), flagCopia = "N", flagCopiaOculta = "S"
                });
            });

            EnvioEmailAdapter EmailAdapter = EnvioCorreioInterno.factory(User.idOrganizacao(), ViewModel.listaDestinos, ViewModel.listaCopias, ViewModel.listaCopiasOcultas);

            var ORetorno = EmailAdapter.enviar(new Dictionary <string, object> {
                { "mensagem", NovoEmail.corpoMensagem }
            }, NovoEmail.assunto);

            if (ORetorno.flagError)
            {
                this.Flash(UtilMessage.TYPE_MESSAGE_ERROR, "Não foi possível enviar o e-mail!");

                return(View(nomeView, ViewModel));
            }

            if (!this.OEmailBL.salvarEmail(NovoEmail))
            {
                this.Flash(UtilMessage.TYPE_MESSAGE_ERROR, "Houve um problema ao salvar o e-mail enviado!");

                return(View(nomeView, ViewModel));
            }

            return(Content("OK"));
        }