/// <summary>
 /// Metodo para exportar un correo al sistema de archivos.
 /// </summary>
 /// <param name="pCorreo">correo a ser exportado.</param>
 /// <param name="pRuta">ruta en donde se exportará el correo.</param>
 /// <param name="pNombre">nombre con el que se quiere guardar el correo</param>
 public override void Exportar(CorreoDTO pCorreo,string pRuta,string pNombre)
 {
     //Formamos un array de string para luego escribir en el archivo.
     string[] lines = {"De: <" + pCorreo.CuentaOrigen + ">", "Para: <" + pCorreo.CuentaDestino + ">",
                          "Asunto: " + pCorreo.Asunto, "Fecha: " + pCorreo.Fecha.ToString("dddd, dd ") +
                          "de " + pCorreo.Fecha.ToString("MMMM") + " de " + pCorreo.Fecha.ToString("yyyy")
                          + pCorreo.Fecha.ToString(" HH:mm"),
                          " ", pCorreo.Texto};
     try
     {
         //Creamos y escribimos el archivo en la ruta especificada por el usuario.
         System.IO.File.WriteAllLines(pRuta + "\\" + pNombre + ".txt", lines);
     }
     catch (FormatException exception) // Cuando hay un error en el formarto.
     {
         throw new ExportadorException("No se pudo exportar su correo. Hubo un problema con la carpeta elegida. Elija otra carpeta y vuelva a intentarlo.", exception);
     }
     catch (System.IO.PathTooLongException exception)  // Cuando la ruta elegida es demasiado larga.
     {
         throw new ExportadorException("No se pudo exportar su correo. La ruta en la que lo desea guardar o el asunto del correo son demasiado largos. Revise la ruta y vuelva a intentarlo.", exception);
     }
     catch (System.IO.IOException exception) // Cuando hay un error en la E/S
     {
         throw new ExportadorException("No se pudo exportar su correo. Hubo un problema al guardar el archivo. Elija otra carpeta y vuelva a intentarlo.", exception);
     }
     catch (Exception exception) // Demás problemas.
     {
         throw new ExportadorException("No se pudo exportar su correo.", exception);
     }
 }
 /// <summary>
 /// Metodo para exportar un correo al Sistema de Archivos.
 /// </summary>
 /// <param name="pCorreo">correo a ser exportado.</param>
 /// <param name="pRuta">ruta donde se ubicará el correo exportado.</param>
 /// <param name="pNombre">nombre con el que se quiere guardar el correo</param>
 public override void Exportar(CorreoDTO pCorreo, string pRuta, string pNombre)
 {
     try
     {
         MailMessage correo = new MailMessage();
         correo.From = new MailAddress(pCorreo.CuentaOrigen);
         correo.To.Add(pCorreo.CuentaDestino);
         correo.Subject = pCorreo.Asunto;
         correo.Body = pCorreo.Texto;
         SmtpClient client = new SmtpClient("mysmtphost");
         client.DeliveryMethod = SmtpDeliveryMethod.SpecifiedPickupDirectory;
         client.PickupDirectoryLocation = pRuta;
         client.Send(correo);
     }
     catch (FormatException exception) // Cuando hay un error en el formarto.
     {
         throw new ExportadorException("No se pudo exportar su correo. Hubo un problema con el formato del correo a exportar o con la carpeta elegida. Elija otra carpeta o revise el correo y vuelva a intentarlo.", exception);
     }
     catch (System.IO.PathTooLongException exception) // Cuando la ruta elegida es demasiado larga.
     {
         throw new ExportadorException("No se pudo exportar su correo. La ruta en la que lo desea guardar es demasiado larga. Revise la ruta y vuelva a intentarlo.", exception);
     }
     catch (System.IO.IOException exception) // Cuando hay un error en la E/S
     {
         throw new ExportadorException("No se pudo exportar su correo. Hubo un problema al guardar el archivo. Elija otra carpeta y vuelva a intentarlo.", exception);
     }
     catch (SmtpException exeption)    // Cuando no hay un error con el smtpClient en la exportacion.
     {
         throw new ExportadorException("No se pudo exportar su correo. Reinicie PostApp y vuelva a intentarlo.", exeption);
     }
     catch (Exception exception)  // Demás problemas.
     {
         throw new ExportadorException("No se pudo exportar su correo.", exception);
     }
 }
        public void Initialize()
        {
            //se instancian las listas de correos
            iListMails1 = new List<CorreoDTO>();
            iListMails2 = new List<CorreoDTO>();

            //Se crea una cuenta de correo de prueba
            iAccountDTO = new CuentaDTO()
            {
                Id = 1,
                Direccion = "*****@*****.**",
                Contraseña = "sarasa",
                Nombre = "Mati",
                Servicio = "gmail"
            };
            //Se crea un correo de prueba
            iMailDTO = new CorreoDTO()
            {
                Asunto = "Mocking",
                CuentaDestino = "*****@*****.**",
                CuentaOrigen = "*****@*****.**",
                Texto = "Esto es una prueba mocking"
            };
            //Se genera la primer lista de correos
            iListMails1.Add(new CorreoDTO
            {
                Id = 1,
                Asunto = "Correo 1",
                CuentaDestino = "*****@*****.**",
                CuentaOrigen = "*****@*****.**",
                Texto = "Nuevo correo"
            });
            iListMails1.Add(new CorreoDTO
            {
                Id = 2,
                Asunto = "Correo 2",
                CuentaDestino = "*****@*****.**",
                CuentaOrigen = "*****@*****.**",
                Texto = "Nuevo correo"
            });

            //Se genera la segunda lista de correos
            iListMails2.Add(new CorreoDTO
            {
                Id = 4,
                Asunto = "Correo 4",
                CuentaDestino = "*****@*****.**",
                CuentaOrigen = "*****@*****.**",
                Texto = "Nuevo correo"
            });
            iListMails2.Add(new CorreoDTO
            {
                Id = 5,
                Asunto = "Correo 5",
                CuentaDestino = "*****@*****.**",
                CuentaOrigen = "*****@*****.**",
                Texto = "Nuevo correo"
            });
        }
        public void Initialize()
        {
            //se instancian las listas de correos
            iListMails1 = new List<CorreoDTO>();
            iListMails2 = new List<CorreoDTO>();

            //Se crea una cuenta de correo de prueba
            iAccountDTO = new CuentaDTO()
            {
                Id = 1,
                Direccion = "*****@*****.**",
                Contraseña = "1234abc",
                Nombre = "Pedro",
                Servicio = "gmail"
            };
            //Se crea un correo de prueba
            iMailDTO = new CorreoDTO()
            {
                Asunto = "Prueba de Mocking",
                CuentaDestino = "*****@*****.**",
                CuentaOrigen = "*****@*****.**",
                Texto = "Esto es una prueba mocking"
            };
            //Se genera la primer lista de correos
            iListMails1.Add(new CorreoDTO
            {
                Id = 1,
                Asunto = "Primer Correo",
                CuentaDestino = "*****@*****.**",
                CuentaOrigen = "*****@*****.**",
                Texto = "Nuevo correo"
            });
            iListMails1.Add(new CorreoDTO
            {
                Id = 2,
                Asunto = "Segundo Correo",
                CuentaDestino = "*****@*****.**",
                CuentaOrigen = "*****@*****.**",
                Texto = "Nuevo correo"
            });

            //Se genera la segunda lista de correos
            iListMails2.Add(new CorreoDTO
            {
                Id = 4,
                Asunto = "Correo 1 Lista 2",
                CuentaDestino = "*****@*****.**",
                CuentaOrigen = "*****@*****.**",
                Texto = "Nuevo correo"
            });
            iListMails2.Add(new CorreoDTO
            {
                Id = 5,
                Asunto = "Correo 2 Lista 2",
                CuentaDestino = "*****@*****.**",
                CuentaOrigen = "*****@*****.**",
                Texto = "Nuevo correo"
            });
        }
        /// <summary>
        /// Metodo que se dispara al hacer click en el boton ENVIAR para enviar un correo.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btEnviar_Click(object sender, EventArgs e)
        {
            //Muestra el mensaje de información al usuario.
            mensajeEnviando.Visible = true;
            mensajeEnviando.Update();

            CorreoDTO pCorreo = new CorreoDTO();
            pCorreo.Leido = false;
            pCorreo.CuentaOrigen = Convert.ToString(listaCuentas.SelectedItem);
            pCorreo.CuentaDestino = correo_Destino.Text;
            pCorreo.Asunto = correo_Asunto.Text;
            pCorreo.Fecha = DateTime.Today;
            pCorreo.Texto = correo_Texto.Text;
            pCorreo.TipoCorreo = "Enviado";
            pCorreo.Adjuntos = archivos;
            pCorreo.Eliminado = false;

            try
            {
                //Obtenemos la cuenta con la que se envía el correo
                CuentaDTO pCuenta = FachadaABMCuenta.Instancia.ObtenerCuenta(pCorreo.CuentaOrigen);
                if (pCuenta.Contraseña == "" || pCuenta.Contraseña == null)
                {
                    FormContraseña f2 = new FormContraseña(pCuenta);
                    DialogResult res = f2.ShowDialog(); //abrimos el formulario contraseña como cuadro de dialogo modal

                    if (res == DialogResult.OK)
                    {
                        // Recuperando la variable publica del formulario contraseña
                        // asignamos al texbox el dato de la variable
                        pCuenta.Contraseña = f2.varf2;
                    }
                }

                //Enviamos el correo.
                FachadaCorreo.Instancia.EnviarCorreo(pCorreo,pCuenta);

                //Guardamos el correo en la base de datos.

                // Actualiza el valor del campo CuentaOrigen, ya que tiene el nombre de la cuenta pero se debe guardar con la direccion.
                pCorreo.CuentaOrigen = FachadaABMCuenta.Instancia.ObtenerCuenta(pCorreo.CuentaOrigen).Direccion;
                //Setea el valor del campo servicioid
                pCorreo.ServicioId = "Correo enviado por el Cliente de Correo";
                FachadaCorreo.Instancia.CrearCorreo(pCorreo);
                MessageBox.Show("Enviado con exito.", "Envio de mail", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            catch (Exception exeption)
            {
                MessageBox.Show(exeption.Message, "PostApp", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }

            //Oculta el mensaje de información al usuario
            mensajeEnviando.Visible = false;
            this.Close();
        }
 /// <summary>
 /// Metodo para marcar como eliminado un correo en la Base de Datos.
 /// </summary>
 /// <param name="pCorreo">Dato de tipo Correo a ser marcado como eliminado en la Base de Datos.</param>
 public void EliminarCorreo(CorreoDTO pCorreo)
 {
     try
     {
         SqlCommand comando = this.iConexion.CreateCommand();
         comando.CommandText = @"update Correo set eliminado = 1 where correoId = @Id;";
         comando.Parameters.AddWithValue("@ID", pCorreo.Id);
         comando.Transaction = iTransaccion;
         comando.ExecuteNonQuery();
     }
     catch (SqlException pSqlException)
     {
         throw new DAOException("Error en la eliminacion de un correo. Revise la configuración de su servidor de Base de Datos y el nombre de su base de datos. Para más información consulte el manual de PostApp.", pSqlException);
     }
 }
 /// <summary>
 /// Metodo para insertar la informacion de un correo en la Base de Datos.
 /// </summary>
 /// <param name="pCorreo"></param>
 public void AgregarCorreo(CorreoDTO pCorreo)
 {
     try
     {
         SqlCommand comando = this.iConexion.CreateCommand();
         comando.CommandText = @"insert into Correo(fecha,tipocorreo,cuentaOrigen,cuentaDestino,texto,asunto,leido,correoServicioId, eliminado)
                                 values(@Fecha,@TipoCorreo,@CuentaOrigen,@Destino,@Texto,@Asunto,@Leido,@correoServicioId,@eliminado)";
         comando.Parameters.AddWithValue("@Fecha", pCorreo.Fecha);
         comando.Parameters.AddWithValue("@TipoCorreo", pCorreo.TipoCorreo);
         comando.Parameters.AddWithValue("@CuentaOrigen", pCorreo.CuentaOrigen);
         comando.Parameters.AddWithValue("@Destino", pCorreo.CuentaDestino);
         comando.Parameters.AddWithValue("@Texto", pCorreo.Texto);
         comando.Parameters.AddWithValue("@Asunto", pCorreo.Asunto);
         comando.Parameters.AddWithValue("@Leido", pCorreo.Leido);
         comando.Parameters.AddWithValue("@correoServicioId", pCorreo.ServicioId);
         comando.Parameters.AddWithValue("@eliminado", pCorreo.Eliminado);
         comando.Transaction = iTransaccion;
         comando.ExecuteNonQuery();
     }
     catch (SqlException pSqlException)
     {
         throw new DAOException("Error en la inserción de datos de correo. Revise la configuración de su servidor de Base de Datos y el nombre de su base de datos. Para más información consulte el manual de PostApp.", pSqlException);
     }
 }
        /// <summary>
        /// Metodo para dar de alta un correo.
        /// </summary>
        /// <param name="pCorreo">Clase DTO con los datos del correo a dar de alta.</param>
        public void CrearCorreo(CorreoDTO pCorreo)
        {
            try
            {

                factory = DAOFactory.Instancia;
                factory.IniciarConexion();
                factory.ComenzarTransaccion();
                factory.CorreoDAO.AgregarCorreo(pCorreo);
                factory.Commit();
            }
            catch (Exception exception)
            {
                factory.RollBack();

                //Se relanza la excepción porque en este punto no se puede tratar
                throw exception;
            }
            finally
            {
                // Haya o no un error, se cierra la transacción.
                factory.FinalizarConexion();
            }
        }
예제 #9
0
 /// <summary>
 /// Metodo utilizado para enviar un correo.
 /// </summary>
 /// <param name="pCorreo">Correo a ser enviado.</param>
 /// <param name="pCuenta">Cuenta con la que se envia el correo</param>
 public override void EnviarCorreo(CorreoDTO pCorreo, CuentaDTO pCuenta)
 {
     MailMessage correo = new MailMessage();
     try
     {
         correo.From = new MailAddress(pCuenta.Direccion);
         correo.To.Add(pCorreo.CuentaDestino);
         correo.Subject = pCorreo.Asunto;
         correo.Body = pCorreo.Texto;
         if (pCorreo.Adjuntos != null)
         {
             foreach (string archivo in pCorreo.Adjuntos)
             {
                 Attachment attach = new Attachment(@archivo);
                 correo.Attachments.Add(attach);
             }
         }
         SmtpClient cliente = new SmtpClient("smtp.mail.yahoo.com");
         cliente.EnableSsl = true;
         cliente.Port = 587; // o 465
         cliente.Credentials = new System.Net.NetworkCredential(pCuenta.Direccion, pCuenta.Contraseña);
         cliente.Send(correo);
     }
     catch (FormatException exeption) //Cuando no esta bien el formato del destino
     {
         throw new ServicioCorreoException("No se pudo enviar su correo. Revise el formato del destinatario y vuelva a intentarlo.", exeption);
     }
     catch (SmtpException exeption)    // Cuando no hay conexion o estan mal los datos de la cuenta.
     {
         throw new ServicioCorreoException("No se pudo enviar su correo. Revise la conexion a Internet y sus datos de conexión y vuelva a intentarlo.", exeption);
     }
     catch (Exception exeption) // Otras
     {
         throw new ServicioCorreoException("No se pudo enviar su correo.", exeption);
     }
 }
        /// <summary>
        /// Metodo para determinar si un correo ya existe en la base de datos.
        /// </summary>
        /// <param name="pCorreo">Correo a buscar en la base de datos.</param>
        /// <returns>False si el correo no existe en la base, true de lo contrario.</returns>
        public bool Existe(CorreoDTO pCorreo)
        {
            bool encontrado = false;
            try
            {
                SqlCommand comando = this.iConexion.CreateCommand();
                comando.CommandText = @"select * from Correo where (correoId=@ID or correoServicioId=@CorreoServicioId)";
                comando.Parameters.AddWithValue("@ID", pCorreo.Id);
                comando.Parameters.AddWithValue("@CorreoServicioId", pCorreo.ServicioId);
                comando.Transaction = iTransaccion;
                DataTable tabla = new DataTable();

                SqlDataReader mReader = comando.ExecuteReader();

                //using (SqlDataAdapter adaptador = new SqlDataAdapter(comando))
                //{

                   // adaptador.Fill(tabla);
                    //if (tabla.Rows.Count> 0)
                    if (tabla.Rows.Count> 0)
                    {
                        //Si encuentra un correo con el mismo id o idServicio  en la base marca encontrado como verdadero
                        encontrado = true;
                    }
                //}
                    mReader.Close();
                return encontrado;
            }
            catch (SqlException pSqlException)
            {
                throw new DAOException("Error en la busqueda de un correo. Revise la configuración de su servidor de Base de Datos y el nombre de su base de datos. Para más información consulte el manual de PostApp.", pSqlException);
            }
        }
 /// <summary>
 /// Metodo abstracto para enviar un correo desde un Servicio de correo.
 /// </summary>
 /// <param name="pCorreo">correo a ser enviado.</param>
 /// <param name="pCuenta">Cuenta con la que se envia el correo</param>
 public abstract void EnviarCorreo(CorreoDTO pCorreo, CuentaDTO pCuenta);
        /// <summary>
        /// Metodo que se dispara al hacer click en el boton "Reenviar".
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void botonReenviar_Click(object sender, EventArgs e)
        {
            CorreoDTO pCorreo = new CorreoDTO();

            if (listaEnviados.Visible)
            {
                //Busca el indice de la fila seleccionada en la lista de correos enviados.
                int indexSelected = listaEnviados.Rows.IndexOf(listaEnviados.CurrentRow);
                pCorreo.Id = Convert.ToInt32(listaEnviados.Rows[indexSelected].Cells["correoId"].Value);
                pCorreo.Asunto = Convert.ToString(listaEnviados.Rows[indexSelected].Cells["asunto"].Value);
                pCorreo.CuentaDestino = Convert.ToString(listaEnviados.Rows[indexSelected].Cells["cuentaDestino"].Value);
                pCorreo.CuentaOrigen = Convert.ToString(listaEnviados.Rows[indexSelected].Cells["cuentaOrigen"].Value);
                pCorreo.Fecha = Convert.ToDateTime(listaEnviados.Rows[indexSelected].Cells["fecha"].Value);
                pCorreo.Texto = Convert.ToString(listaEnviados.Rows[indexSelected].Cells["texto"].Value);
            }
            else if (listaRecibidos.Visible)
            {
                //Busca el indice de la fila seleccionada en la lista de correos recibidos.
                int indexSelected = listaRecibidos.Rows.IndexOf(listaRecibidos.CurrentRow);
                pCorreo.Id = Convert.ToInt32(listaRecibidos.Rows[indexSelected].Cells["correoIdR"].Value);
                pCorreo.Asunto = Convert.ToString(listaRecibidos.Rows[indexSelected].Cells["asuntoR"].Value);
                pCorreo.CuentaDestino = Convert.ToString(listaRecibidos.Rows[indexSelected].Cells["cuentaDestinoR"].Value);
                pCorreo.CuentaOrigen = Convert.ToString(listaRecibidos.Rows[indexSelected].Cells["cuentaOrigenR"].Value);
                pCorreo.Fecha = Convert.ToDateTime(listaRecibidos.Rows[indexSelected].Cells["fechaR"].Value);
                pCorreo.Texto = Convert.ToString(listaRecibidos.Rows[indexSelected].Cells["textoR"].Value);
            }
            else // esta visible el form de correo
            {
                pCorreo.Id = Convert.ToInt32(correo_id.Text);
                pCorreo.Asunto = correo_asunto.Text;
                pCorreo.CuentaDestino = correo_cuentaDestino.Text;
                pCorreo.CuentaOrigen = correo_cuentaOrigen.Text;
                pCorreo.Fecha = Convert.ToDateTime(correo_fecha.Text);
                pCorreo.Texto = correo_texto.Text;
            }
            Form frm = new formEnvioCorreo(pCorreo);
            frm.ShowDialog();
            // Actualizamos las listas Recibidos y Enviados
            MostrarCorreos();
        }
        /// <summary>
        /// Método que se dispara al hacer doble click sobre un correo de la lista de correos Recibidos
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void listaRecibidos_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
        {
            int indexSelected = e.RowIndex;
            CorreoDTO pCorreo = new CorreoDTO();

            // Marco como leido el correo en la lista
            listaRecibidos.Rows[indexSelected].Cells["leidoR"].Value = 1;
            listaRecibidos.Rows[indexSelected].DefaultCellStyle.BackColor = Color.Lavender;

            //Actualiza el texto del botón Leido/NoLeido
            btLeido.Text = "No Leído";

            pCorreo.Id = Convert.ToInt32(listaRecibidos.Rows[indexSelected].Cells["correoIdR"].Value);
            pCorreo.Asunto = Convert.ToString(listaRecibidos.Rows[indexSelected].Cells["asuntoR"].Value);
            pCorreo.CuentaDestino = Convert.ToString(listaRecibidos.Rows[indexSelected].Cells["cuentaDestinoR"].Value);
            pCorreo.CuentaOrigen = Convert.ToString(listaRecibidos.Rows[indexSelected].Cells["cuentaOrigenR"].Value);
            pCorreo.Fecha = Convert.ToDateTime(listaRecibidos.Rows[indexSelected].Cells["fechaR"].Value);
            pCorreo.Leido = Convert.ToBoolean(listaRecibidos.Rows[indexSelected].Cells["leidoR"].Value);
            pCorreo.Texto = Convert.ToString(listaRecibidos.Rows[indexSelected].Cells["textoR"].Value);
            pCorreo.TipoCorreo = Convert.ToString(listaRecibidos.Rows[indexSelected].Cells["tipoCorreoR"].Value);
            pCorreo.ServicioId = Convert.ToString(listaRecibidos.Rows[indexSelected].Cells["servicioIdR"].Value);
            pCorreo.Eliminado = Convert.ToBoolean(listaRecibidos.Rows[indexSelected].Cells["eliminadoR"].Value);

            correo_texto.Text = pCorreo.Texto;
            correo_asunto.Text = pCorreo.Asunto;
            correo_cuentaDestino.Text = pCorreo.CuentaDestino;
            correo_cuentaOrigen.Text = pCorreo.CuentaOrigen;
            //copia el string de la fecha sin convertirlo a datatime porque es para mostrarlo en el form
            correo_fecha.Text = Convert.ToString(listaRecibidos.Rows[indexSelected].Cells["fechaR"].Value);
            correo_id.Text = Convert.ToString(pCorreo.Id);
            correo_leido.Text = Convert.ToString(pCorreo.Leido);
            correo_servicioid.Text = pCorreo.ServicioId;
            correo_tipocorreo.Text = pCorreo.TipoCorreo;
            correo_eliminado.Text = Convert.ToString(pCorreo.Eliminado);
            try
            {
                // Marco como leido el correo en la base
                FachadaCorreo.Instancia.ModificarCorreo(pCorreo);
            }
            catch (Exception exeption)
            {
                MessageBox.Show(exeption.Message, "PostApp", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }

            panelCorreo.Visible = true;
            listaRecibidos.Visible = false;
        }
        private void buttonLeido_Click(object sender, EventArgs e)
        {
            CorreoDTO pCorreo = new CorreoDTO();

            if (listaEnviados.Visible)
            {
                //Busca el indice de la fila seleccionada en la lista de correos enviados.
                int indexSelected = listaEnviados.Rows.IndexOf(listaEnviados.CurrentRow);
                pCorreo.Id = Convert.ToInt32(listaEnviados.Rows[indexSelected].Cells["correoId"].Value);
                pCorreo.Asunto = Convert.ToString(listaEnviados.Rows[indexSelected].Cells["asunto"].Value);
                pCorreo.CuentaDestino = Convert.ToString(listaEnviados.Rows[indexSelected].Cells["cuentaDestino"].Value);
                pCorreo.CuentaOrigen = Convert.ToString(listaEnviados.Rows[indexSelected].Cells["cuentaOrigen"].Value);
                pCorreo.Fecha = Convert.ToDateTime(listaEnviados.Rows[indexSelected].Cells["fecha"].Value);
                pCorreo.Texto = Convert.ToString(listaEnviados.Rows[indexSelected].Cells["texto"].Value);
                pCorreo.Eliminado = Convert.ToBoolean(listaEnviados.Rows[indexSelected].Cells["eliminado"].Value);
                pCorreo.Leido = Convert.ToBoolean(listaEnviados.Rows[indexSelected].Cells["leido"].Value);
                pCorreo.ServicioId = Convert.ToString(listaEnviados.Rows[indexSelected].Cells["servicioId"].Value);
                pCorreo.TipoCorreo = Convert.ToString(listaEnviados.Rows[indexSelected].Cells["tipoCorreo"].Value);
            }
            else if (listaRecibidos.Visible)
            {
                //Busca el indice de la fila seleccionada en la lista de correos recibidos.
                int indexSelected = listaRecibidos.Rows.IndexOf(listaRecibidos.CurrentRow);
                pCorreo.Id = Convert.ToInt32(listaRecibidos.Rows[indexSelected].Cells["correoIdR"].Value);
                pCorreo.Asunto = Convert.ToString(listaRecibidos.Rows[indexSelected].Cells["asuntoR"].Value);
                pCorreo.CuentaDestino = Convert.ToString(listaRecibidos.Rows[indexSelected].Cells["cuentaDestinoR"].Value);
                pCorreo.CuentaOrigen = Convert.ToString(listaRecibidos.Rows[indexSelected].Cells["cuentaOrigenR"].Value);
                pCorreo.Fecha = Convert.ToDateTime(listaRecibidos.Rows[indexSelected].Cells["fechaR"].Value);
                pCorreo.Texto = Convert.ToString(listaRecibidos.Rows[indexSelected].Cells["textoR"].Value);
                pCorreo.Eliminado = Convert.ToBoolean(listaRecibidos.Rows[indexSelected].Cells["eliminadoR"].Value);
                pCorreo.Leido = Convert.ToBoolean(listaRecibidos.Rows[indexSelected].Cells["leidoR"].Value);
                pCorreo.ServicioId = Convert.ToString(listaRecibidos.Rows[indexSelected].Cells["servicioIdR"].Value);
                pCorreo.TipoCorreo = Convert.ToString(listaRecibidos.Rows[indexSelected].Cells["tipoCorreoR"].Value);
            }
            else // esta visible el form de correo
            {
                pCorreo.Id = Convert.ToInt32(correo_id.Text);
                pCorreo.Asunto = correo_asunto.Text;
                pCorreo.CuentaDestino = correo_cuentaDestino.Text;
                pCorreo.CuentaOrigen = correo_cuentaOrigen.Text;
                pCorreo.Fecha = Convert.ToDateTime(correo_fecha.Text);
                pCorreo.Texto = correo_texto.Text;
                pCorreo.Eliminado = Convert.ToBoolean(correo_eliminado.Text);
                pCorreo.Leido = Convert.ToBoolean(correo_leido.Text);
                pCorreo.ServicioId = correo_servicioid.Text;
                pCorreo.TipoCorreo = correo_tipocorreo.Text;
            }

            //Cambia el valor del atributo leido del correo
            pCorreo.Leido = !pCorreo.Leido;

            try
            {
                // Guardo la modificacion en la base
                FachadaCorreo.Instancia.ModificarCorreo(pCorreo);
            }
            catch (Exception exeption)
            {
                MessageBox.Show(exeption.Message, "PostApp", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            // Actualizamos las listas Recibidos y Enviados
            MostrarCorreos();

            // Si se estaba viendo el correo en el panel de correo, se pasa a la lista que lo contiene.
            // Se busca el tipo de correo y se marca como visible la lista correspondiente
            if (panelCorreo.Visible == true)
            {
                panelCorreo.Visible = false;
                if (pCorreo.TipoCorreo == "Recibido")
                {
                    listaRecibidos.Visible = true;
                }
                else
                {
                    listaEnviados.Visible = true;
                }
            }
        }
        /// <summary>
        /// Metodo que se dispara al hacer click en el boton "Exportar".
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btExportar_Click(object sender, EventArgs e)
        {
            CorreoDTO pCorreo = new CorreoDTO();

            if (listaEnviados.Visible)
            {
                //Busca el indice de la fila seleccionada en la lista de correos enviados.
                // como el método SelectedRows devuelve una lista, pero nosotros tenemos una sola fila seleccionada,
                // entonces tomamos el primer elemento.
                int indexSelected = listaEnviados.Rows.IndexOf(listaEnviados.CurrentRow);
                pCorreo.Asunto = Convert.ToString(listaEnviados.Rows[indexSelected].Cells["asunto"].Value);
                pCorreo.CuentaDestino = Convert.ToString(listaEnviados.Rows[indexSelected].Cells["cuentaDestino"].Value);
                pCorreo.CuentaOrigen = Convert.ToString(listaEnviados.Rows[indexSelected].Cells["cuentaOrigen"].Value);
                pCorreo.Fecha = Convert.ToDateTime(listaEnviados.Rows[indexSelected].Cells["fecha"].Value);
                pCorreo.Texto = Convert.ToString(listaEnviados.Rows[indexSelected].Cells["texto"].Value);
            }
            else if (listaRecibidos.Visible)
            {
                //Busca el indice de la fila seleccionada en la lista de correos recibidos.
                // como el método SelectedRows devuelve una lista, pero nosotros tenemos una sola fila seleccionada,
                // entonces tomamos el primer elemento.
                int indexSelected = listaRecibidos.Rows.IndexOf(listaRecibidos.CurrentRow);
                pCorreo.Asunto = Convert.ToString(listaRecibidos.Rows[indexSelected].Cells["asuntoR"].Value);
                pCorreo.CuentaDestino = Convert.ToString(listaRecibidos.Rows[indexSelected].Cells["cuentaDestinoR"].Value);
                pCorreo.CuentaOrigen = Convert.ToString(listaRecibidos.Rows[indexSelected].Cells["cuentaOrigenR"].Value);
                pCorreo.Fecha = Convert.ToDateTime(listaRecibidos.Rows[indexSelected].Cells["fechaR"].Value);
                pCorreo.Texto = Convert.ToString(listaRecibidos.Rows[indexSelected].Cells["textoR"].Value);
            }
            else // esta visible el form de correo
            {
                pCorreo.Asunto = correo_asunto.Text;
                pCorreo.CuentaDestino = correo_cuentaDestino.Text;
                pCorreo.CuentaOrigen = correo_cuentaOrigen.Text;
                pCorreo.Fecha = Convert.ToDateTime(correo_fecha.Text);
                pCorreo.Texto = correo_texto.Text;

            }
            string path;

            FolderBrowserDialog folderBrowserDialog1 = new FolderBrowserDialog();
            if (folderBrowserDialog1.ShowDialog() == DialogResult.OK)
            {
                path = folderBrowserDialog1.SelectedPath;
                //crea el nombre en base del asunto del correo, eliminando los caracteres invalidos como nombre de archivo.
                string pNombre = pCorreo.Asunto;
                char[] invalidchars = Path.GetInvalidFileNameChars();
                foreach (char cChar in invalidchars)
                {
                    pNombre = pNombre.Replace(cChar, '_');
                }
                pCorreo.CuentaDestino = pCorreo.CuentaDestino.Replace(";", "");
                string pFormato;
                if (rbtTextoPlano.Checked == true)
                {
                    pFormato = rbtTextoPlano.Text;
                }
                else
                {
                    pFormato = rbtEML.Text;
                    // Cambia caracteres no validos en formato de asunto para EML
                    foreach (char cChar in invalidchars)
                    {
                        pCorreo.Asunto = pCorreo.Asunto.Replace(cChar, '_');
                    }
                }
                try
                {
                    FachadaCorreo.Instancia.ExportarCorreo(pCorreo, path, pFormato, pNombre);
                    MessageBox.Show("Exportado con exito.", "PostApp", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
                catch (Exception exeption)
                {
                    MessageBox.Show(exeption.Message, "PostApp", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
            }
        }
 /// <summary>
 /// Metodo que se dispara al hacer click en el boton "Eliminar".
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 private void btEliminar_Click(object sender, EventArgs e)
 {
     if (MessageBox.Show("¿Está seguro que desea eliminar este correo?", "AVISO", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
     {
         CorreoDTO pCorreo = new CorreoDTO();
         try
         {
             if (listaEnviados.Visible)
             {
                 //Busca el indice de la fila seleccionada en la lista de correos enviados.
                 int indexSelected = listaEnviados.Rows.IndexOf(listaEnviados.CurrentRow);
                 pCorreo.Id = Convert.ToInt32(listaEnviados.Rows[indexSelected].Cells["correoId"].Value);
                 FachadaCorreo.Instancia.EliminarCorreo(pCorreo);
             }
             else if (listaRecibidos.Visible)
             {
                 //Busca el indice de la fila seleccionada en la lista de correos recibidos.
                 int indexSelected = listaRecibidos.Rows.IndexOf(listaRecibidos.CurrentRow);
                 pCorreo.Id = Convert.ToInt32(listaRecibidos.Rows[indexSelected].Cells["correoIdR"].Value);
                 FachadaCorreo.Instancia.EliminarCorreo(pCorreo);
             }
             else // esta visible el form de correo
             {
                 pCorreo.Id = Convert.ToInt32(correo_id.Text);
                 FachadaCorreo.Instancia.EliminarCorreo(pCorreo);
             }
             MessageBox.Show("Eliminado con exito.", "PostApp", MessageBoxButtons.OK, MessageBoxIcon.Information);
         }
         catch (Exception exeption)
         {
             MessageBox.Show(exeption.Message, "PostApp", MessageBoxButtons.OK, MessageBoxIcon.Information);
         }
     }
     // Actualiza las listas Recibidos y Enviados
     MostrarCorreos();
 }
 /// <summary>
 /// Constructor de una instancia del form de envio de correos .
 /// </summary>
 public formEnvioCorreo()
 {
     InitializeComponent();
     iCorreo = null;
 }
 /// <summary>
 /// Constructor de una instancia del form de envio de correos .
 /// </summary>
 public formEnvioCorreo(CorreoDTO pCorreo)
 {
     iCorreo = pCorreo;
     InitializeComponent();
 }
 /// <summary>
 /// Metodo para enviar un correo.
 /// </summary>
 /// <param name="pCorreo"></param>
 public void EnviarCorreo(CorreoDTO pCorreo, CuentaDTO pCuenta)
 {
     FabricaServicios.Instancia.GetServicio(pCuenta.Servicio).EnviarCorreo(pCorreo,pCuenta);
 }
 /// <summary>
 /// Metodo para exportar un correo al sistema de archivos.
 /// </summary>
 /// <param name="pCorreo">correo a exportarse.</param>
 /// <param name="pRuta">ruta en donde exportarse el correo.</param>
 /// <param name="pExportador">nombre del exportador a ser utilizado.</param>
 /// <param name="pNombre">nombre con el que se quiere guardar el correo</param>
 public void ExportarCorreo(CorreoDTO pCorreo,string pRuta, string pExportador, string pNombre)
 {
     IExportador exportador = fabricaExportadores.GetExportador(pExportador);
     exportador.Exportar(pCorreo,pRuta,pNombre);
 }
        /// <summary>
        /// Metodo para determinar si un correo ya existe en la base de datos.
        /// </summary>
        /// <param name="pCorreo">Correo a buscar en la base de datos.</param>
        /// <returns>False si el correo no existe en la base, true de lo contrario.</returns>
        public bool Existe(CorreoDTO pCorreo)
        {
            bool encontrado = false;
            try
            {
                factory = DAOFactory.Instancia;
                factory.IniciarConexion();
                factory.ComenzarTransaccion();
                encontrado = factory.CorreoDAO.Existe(pCorreo);
                factory.Commit();
                return encontrado;
            }
            catch (Exception exception)
            {
                factory.RollBack();

                //Se relanza la excepción porque en este punto no se puede tratar
                throw exception;
            }
            finally
            {
                // Haya o no un error, se cierra la transacción.
                factory.FinalizarConexion();
            }
        }
예제 #22
0
 /// <summary>
 /// Metodo abstracto que exporta un correo al sistema de archivos.
 /// </summary>
 /// <param name="pCorreo">correo a exportar.</param>
 /// <param name="pRuta">ruta donde exportar el correo.</param>
 /// <param name="pNombre">nombre con el que se quiere guardar el correo</param>
 public abstract void Exportar(CorreoDTO pCorreo, string pRuta, string pNombre);
예제 #23
0
        /// <summary>
        /// Metodo que descarga los correos del Servicio de correo que pertenecen a la cuenta <paramref name="pCuenta"/>.
        /// </summary>
        /// <param name="pCuenta">Cuenta de la cual se descargan los correos.</param>
        /// <returns>Retorna una lista de correos.</returns>
        public override IList<CorreoDTO> DescargarCorreos(CuentaDTO pCuenta)
        {
            List<CorreoDTO> mCorreos = new List<CorreoDTO>();
            Pop3Client pop = new Pop3Client();
            OpenPop.Mime.Message mensaje;
            try
            {
                pop.Connect("mailtrap.io", 9950,false);
                pop.Authenticate("45056034f6ba807dc", "20ecbc2d229b37");
                int cantidadMensajes = pop.GetMessageCount();
                for (int i = cantidadMensajes; i > 0; i--)
                {
                    mensaje = pop.GetMessage(i);

                    // obtengo el texto del cuerpo del correo.
                    string cuerpo = "";
                    OpenPop.Mime.MessagePart texto = mensaje.FindFirstPlainTextVersion();
                    if (texto != null) // El correo posee texto plano
                    {
                        cuerpo = texto.GetBodyAsText();
                    }
                    else
                    {
                        OpenPop.Mime.MessagePart html = mensaje.FindFirstHtmlVersion();
                        if (html != null)// El correo tiene texto en html
                        {
                            cuerpo = html.GetBodyAsText();
                        }
                    }
                    string pTipoCorreo;
                    // Determina si el correo es enviado o recibido comparando la direccion de la cuenta con la direccion
                    // que aparece como direccion remitente.
                    if (mensaje.Headers.From.Address == pCuenta.Direccion)
                    {
                        pTipoCorreo = "Enviado";
                    }
                    else
                    {
                        pTipoCorreo = "Recibido";
                    }

                    // Armar el string de cuenta destino con las cuentas destinatarias.
                    string pDestino = "";
                    foreach (OpenPop.Mime.Header.RfcMailAddress mailAdres in mensaje.Headers.To)
                    {
                        pDestino = pDestino + mailAdres.Address + "; ";
                    }
                    CorreoDTO mCorreo = new CorreoDTO()
                    {
                        Fecha = mensaje.Headers.DateSent,
                        TipoCorreo = pTipoCorreo,
                        Texto = cuerpo,
                        CuentaOrigen = mensaje.Headers.From.Address,
                        CuentaDestino = pDestino,
                        Asunto = mensaje.Headers.Subject,
                        Leido = false,
                        ServicioId = mensaje.Headers.MessageId
                    };
                    if (mCorreo.ServicioId == null){
                        mCorreo.ServicioId = mensaje.GetHashCode().ToString();
                    }
                    mCorreos.Add(mCorreo);
                }
            }
            catch (OpenPop.Pop3.Exceptions.InvalidLoginException exeption) // Excepcion que se lanza cuando hay un  problema con los datos del usuario y no se puede realizar el login
            {
                throw new ServicioCorreoException("No se pudo actualizar la cuenta " + pCuenta.Direccion + ". Hubo un problema en el acceso a la cuenta. Revise sus datos y vuelva a intentarlo.", exeption);
            }
            catch (OpenPop.Pop3.Exceptions.PopServerNotFoundException exeption) // Excepcion que se lanza al no poder conectarse con el servidor
            {
                throw new ServicioCorreoException("No se pudo actualizar la cuenta " + pCuenta.Direccion + ". Hubo un error de acceso al servidor. Revise su conexion o intentelo más tarde.", exeption);
            }
            catch (Exception exeption)
            {
                throw new ServicioCorreoException("No se pudo actualizar la cuenta " + pCuenta.Direccion + ". ", exeption);
            }
            return mCorreos;
        }