/// <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(); } }
/// <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(); } }
/// <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);
/// <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; }