private void btResponder_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); // Cargo como cuenta destino del nuevo correo a cuenta origen del correo que deseo responder pCorreo.CuentaDestino = Convert.ToString(listaEnviados.Rows[indexSelected].Cells["cuentaOrigen"].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); // Cargo como cuenta destino del nuevo correo a cuenta origen del correo que deseo responder pCorreo.CuentaDestino = Convert.ToString(listaRecibidos.Rows[indexSelected].Cells["cuentaOrigenR"].Value); } else // esta visible el form de correo { pCorreo.Id = Convert.ToInt32(correo_id.Text); pCorreo.Asunto = correo_asunto.Text; pCorreo.CuentaDestino = correo_cuentaOrigen.Text; } Form frm = new formEnvioCorreo(pCorreo); frm.ShowDialog(); // Actualizamos las listas Recibidos y Enviados MostrarCorreos(); }
/// <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); } }
/// <summary> /// Metodo para modificar un correo en la Base de Datos. /// </summary> /// <param name="pCorreo">Dato de tipo Correo a ser modificado en la Base de Datos.</param> public void ModificarCorreo(CorreoDTO pCorreo) { try { SqlCommand comando = this.iConexion.CreateCommand(); comando.CommandText = @"update Correo set fecha=@Fecha,tipocorreo=@TipoCorreo,cuentaOrigen=@CuentaOrigen, cuentaDestino=@Destino,texto=@Texto,asunto=@Asunto,leido=@Leido, correoServicioId = @correoServicioId, eliminado = @eliminado where correoId = @Id or correoServicioId = @correoServicioId"; comando.Parameters.AddWithValue("@Id", pCorreo.Id); 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 actualización de datos 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); } }
private void tbNoLeido_Click(object sender, EventArgs e) { if (correoseleccionado == 0) { return; } CorreoDTO correo = new CorreoDTO(); correo.IdCorreo = correoseleccionado; Controller.Correo.getInstance().marcarComoLeido(correo, false); foreach (DataGridViewRow fila in dgvMensajes.SelectedRows) { dgvMensajes.Rows[fila.Index].Cells["Leido"].Value = "False"; } cantidadNoLeidos = 0; foreach (DataGridViewRow fila in dgvMensajes.Rows) { if (fila.Cells["Leido"].Value.ToString() == "False" && selectednode == "inbox") { dgvMensajes.Rows[fila.Index].DefaultCellStyle.BackColor = Color.FromArgb(204, 227, 245); dgvMensajes.Rows[fila.Index].DefaultCellStyle.Font = new Font(dgvMensajes.DefaultCellStyle.Font, FontStyle.Bold); cantidadNoLeidos++; } } ActualizarTreeView(); }
/// <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 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 = @ServicioId)"; comando.Parameters.AddWithValue("@ID", pCorreo.Id); comando.Parameters.AddWithValue("@ServicioId", pCorreo.ServicioId); comando.Transaction = iTransaccion; DataTable tabla = new DataTable(); using (SqlDataAdapter adaptador = new SqlDataAdapter(comando)) { adaptador.Fill(tabla); if (tabla.Rows.Count > 0) { //Si encuentra un correo con el mismo id o idServicio en la base marca encontrado como verdadero encontrado = true; } } 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 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> /// /// </summary> /// <param name="correo"></param> /// <returns></returns> public int markAsRead(CorreoDTO correo, bool leido) { int res = 0; try { connection.Open(); MySqlCommand myCommand = new MySqlCommand(); myCommand.Connection = connection; myCommand.CommandText = "UPDATE correo SET leido=?leido WHERE idcorreo=?idcorreo"; if (leido) { myCommand.Parameters.Add("?leido", MySqlDbType.Int16).Value = 1; } else { myCommand.Parameters.Add("?leido", MySqlDbType.Int16).Value = 0; } myCommand.Parameters.Add("?idcorreo", MySqlDbType.Int16).Value = correo.IdCorreo; myCommand.ExecuteNonQuery(); connection.Close(); res = 1; return(res); } catch (MySqlException ex) { return(-1); } }
public void PrepararParaReenviar(CorreoDTO oCorreo) { if (tipo == "forward") { txtAsunto.Text = "FWD: " + oCorreo.Asunto; txtMensaje.Text = oCorreo.Detalle; } }
/// <summary> /// Método para obtener un Correo. /// </summary> /// <param name="correo"></param> public CorreoDTO obtenerCorreo(CorreoDTO correo) { factory.startConnection(); CorreoDTO correoObtenido = factory.getCorreo().get(correo); factory.closeConnection(); return(correoObtenido); }
/// <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> /// Método para obtener la cuenta a partir de un correo. /// </summary> /// <param name="correo">Correo del que se quiere obtener la cuenta</param> /// <returns>CuentaDTO del correo</returns> public CuentaDTO ObtenerCuentaDeCorreo(CorreoDTO correo) { CuentaDTO cuentaObtenida = new CuentaDTO(); cuentaObtenida.IdCuenta = correo.IdCuenta; factory.startConnection(); cuentaObtenida = factory.getCuenta().get(cuentaObtenida); factory.closeConnection(); return(cuentaObtenida); }
public void ObtenerCorreo(CorreoDTO oCorreo) { try { correo = new CorreoDTO(); correo = Controller.Correo.getInstance().obtenerCorreo(oCorreo); CargarCorreo(); //Pasar a Leido //Cargo adjuntos } catch (Exception ex) { } }
public void enviarCorreo(CorreoDTO correo) { try { CuentaDTO cuenta = Cuenta.getInstance().ObtenerCuentaDeCorreo(correo); ServerDTO server = new ServerDTO(); server.Id = cuenta.Server; server = Server.getInstance().ObtenerServer(server); //Sesión MailMessage mensaje = new MailMessage(); //Agrego destinatarios, guardados en la lista de OrigenDestino foreach (OrigenDestinoDTO od in correo.OrigenDestino) { //Si es CC if (od.Cc == true) { mensaje.CC.Add(new MailAddress(od.Direccion)); } //Si es CCO else if (od.Cco == true) { mensaje.Bcc.Add(new MailAddress(od.Direccion)); } //Sino, es Para else { mensaje.To.Add(new MailAddress(od.Direccion)); } } mensaje.Subject = correo.Asunto; mensaje.Body = correo.Detalle; //Adjuntos //foreach (AttachmentDTO adjunto in correo.Adjuntos) { //} mensaje.From = new MailAddress(cuenta.User); AdminSmtp smtp = new AdminSmtp(); smtp.ConectarSmtp(server, cuenta); //If enviado < 0 -> error al enviar int enviado = smtp.Enviar(mensaje, false); } catch (Exception ex) { } }
/// <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); } }
private void ArmarLista(List <CorreoDTO> listaCorreos) { //Limpiar datos DataTable myData = new DataTable(); myData.Columns.Add(); int filas = 0; for (int i = 0; i <= listaCorreos.Count - 1; i++) { myData.Rows.Add(new Object[i]); CorreoDTO correo = listaCorreos[i]; } }
/// <summary> /// Método que se dispara al hacer doble click sobre un correo de la lista de correos Enviados /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void listaEnviados_CellDoubleClick(object sender, DataGridViewCellEventArgs e) { int indexSelected = e.RowIndex; CorreoDTO pCorreo = new CorreoDTO(); // Marco como leido el correo en la lista listaEnviados.Rows[indexSelected].Cells["leido"].Value = 1; listaEnviados.Rows[indexSelected].DefaultCellStyle.BackColor = Color.Lavender; //Actualiza el texto del botón Leido/NoLeido btLeido.Text = "No Leído"; //Carga los datos desde la grilla al objeto pCorreo 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.Leido = Convert.ToBoolean(listaEnviados.Rows[indexSelected].Cells["leido"].Value); pCorreo.Texto = Convert.ToString(listaEnviados.Rows[indexSelected].Cells["texto"].Value); pCorreo.TipoCorreo = Convert.ToString(listaEnviados.Rows[indexSelected].Cells["tipoCorreo"].Value); pCorreo.ServicioId = Convert.ToString(listaEnviados.Rows[indexSelected].Cells["servicioId"].Value); pCorreo.Eliminado = Convert.ToBoolean(listaEnviados.Rows[indexSelected].Cells["eliminado"].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(listaEnviados.Rows[indexSelected].Cells["fecha"].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; listaEnviados.Visible = false; }
private void tbReenviar_Click(object sender, EventArgs e) { if (main.correoseleccionado == 0) { return; } CorreoDTO correo = new CorreoDTO(); correo.IdCorreo = main.correoseleccionado; correo = Controller.Correo.getInstance().obtenerCorreo(correo); frmNuevoCorreo nuevocorreo = new frmNuevoCorreo(main, "forward"); nuevocorreo.PrepararParaReenviar(correo); nuevocorreo.Show(); }
private void tbResponder_Click(object sender, EventArgs e) { if (correoseleccionado == 0) { return; } CorreoDTO correo = new CorreoDTO(); correo.IdCorreo = correoseleccionado; correo = Controller.Correo.getInstance().obtenerCorreo(correo); List <OrigenDestinoDTO> origenes = correo.OrigenDestino; frmNuevoCorreo nuevocorreo = new frmNuevoCorreo(this, "reply"); nuevocorreo.PrepararParaResponder(correo); nuevocorreo.Show(); }
private void tbEliminar_Click(object sender, EventArgs e) { if (correoseleccionado == 0) { return; } if (dgvMensajes.SelectedRows.Count > 1) { DialogResult res = MessageBox.Show("Está seguro de que desea eliminar los correos seleccionados?", "Cliente de Correo", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2); if (res == DialogResult.Yes) { foreach (DataGridViewRow fila in dgvMensajes.SelectedRows) { CorreoDTO correo = new CorreoDTO(); correo.IdCorreo = int.Parse(fila.Cells["Id"].Value.ToString()); Controller.Correo.getInstance().eliminarCorreo(correo); } MessageBox.Show("Los correos han sido eliminados.", "Cliente de Correo", MessageBoxButtons.OK, MessageBoxIcon.Information); } else { return; } } else if (dgvMensajes.SelectedRows.Count == 1) { DialogResult res = MessageBox.Show("Está seguro de que desea eliminar este correo?", "Cliente de Correo", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2); if (res == DialogResult.Yes) { CorreoDTO correo = new CorreoDTO(); correo.IdCorreo = correoseleccionado; Controller.Correo.getInstance().eliminarCorreo(correo); MessageBox.Show("El correo ha sido eliminado.", "Cliente de Correo", MessageBoxButtons.OK, MessageBoxIcon.Information); } else { return; } } }
public void PrepararParaResponder(CorreoDTO oCorreo) { if (tipo == "reply") { CorreoDTO mail = new CorreoDTO(); mail.IdCorreo = oCorreo.IdCorreo; mail = Controller.Correo.getInstance().obtenerCorreo(mail); List <OrigenDestinoDTO> origenes = new List <OrigenDestinoDTO>(); origenes = mail.OrigenDestino; String deStr = ""; foreach (OrigenDestinoDTO origen in origenes) { if (origen.Cc == false && origen.Cco == false) { deStr = origen.Direccion; } } String ccStr = ""; String ccoStr = ""; foreach (OrigenDestinoDTO origen in origenes) { if (origen.Cc == true) { ccStr = ccStr + origen.Direccion + "; "; } else if (origen.Cco == true) { ccoStr = ccoStr + origen.Direccion + "; "; } } txtPara.Text = deStr; txtCC.Text = ccStr; txtCCO.Text = ccoStr; txtAsunto.Text = "RE: " + mail.Asunto; } }
private void tbEliminar_Click(object sender, EventArgs e) { if (main.correoseleccionado == 0) { return; } DialogResult res = MessageBox.Show("Está seguro de que desea eliminar este correo?", "Cliente de Correo", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2); if (res == DialogResult.Yes) { CorreoDTO correo = new CorreoDTO(); correo.IdCorreo = main.correoseleccionado; Controller.Correo.getInstance().eliminarCorreo(correo); MessageBox.Show("El mensaje ha sido eliminado.", "Cliente de Correo", MessageBoxButtons.OK, MessageBoxIcon.Information); } else { return; } }
private void dgvMensajes_CellDoubleClick(object sender, DataGridViewCellEventArgs e) { if (dgvMensajes.Rows.Count == 0) { return; } DataGridViewRow filaseleccionada = dgvMensajes.SelectedRows[0]; int idmensaje = int.Parse(filaseleccionada.Cells["Id"].Value.ToString()); //Creo la nueva ventana frmCorreo form = new frmCorreo(this); CorreoDTO correo = new CorreoDTO(); correo.IdCorreo = idmensaje; form.ObtenerCorreo(correo); //Marcar como leído dgvMensajes.SelectedRows[0].DefaultCellStyle.Font = dgvMensajes.Font; dgvMensajes.SelectedRows[0].DefaultCellStyle.BackColor = dgvMensajes.DefaultCellStyle.BackColor; Controller.Correo.getInstance().marcarComoLeido(correo, true); //DataGridViewRow filaseleccionada = dgvMensajes.SelectedRows[0]; filaseleccionada.Cells["Leido"].Value = "True"; cantidadNoLeidos = 0; foreach (DataGridViewRow fila in dgvMensajes.Rows) { if (fila.Cells["Leido"].Value.ToString() == "False" && selectednode == "inbox") { cantidadNoLeidos++; } } ActualizarTreeView(); form.Show(); }
/// <summary> /// Método para modificar un correo. /// </summary> /// <param name="pCorreo">Objeto DTO con los datos del correo a modificar.</param> public void ModificarCorreo(CorreoDTO pCorreo) { try { factory = DAOFactory.Instancia; factory.IniciarConexion(); factory.ComenzarTransaccion(); factory.CorreoDAO.ModificarCorreo(pCorreo); factory.Commit(); } catch (Exception e) { factory.RollBack(); //Se relanza la excepción porque en este punto no se puede tratar throw e; } 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> /// /// </summary> /// <param name="correo"></param> /// <returns></returns> public int delete(CorreoDTO correo) { int res = 0; try { connection.Open(); MySqlCommand myCommand = new MySqlCommand(); myCommand.Connection = connection; myCommand.CommandText = "DELETE FROM adjunto WHERE correo_idcorreo=?idcorreoo"; myCommand.Parameters.Add("?idcorreoo", MySqlDbType.Int16).Value = correo.IdCorreo; myCommand.ExecuteNonQuery(); myCommand.CommandText = "DELETE FROM origendestino WHERE correo_idcorreo=?idcorreooo"; myCommand.Parameters.Add("?idcorreooo", MySqlDbType.Int16).Value = correo.IdCorreo; myCommand.ExecuteNonQuery(); myCommand.CommandText = "DELETE FROM correo WHERE idcorreo=?idcorreo"; myCommand.Parameters.Add("?idcorreo", MySqlDbType.Int16).Value = correo.IdCorreo; myCommand.ExecuteNonQuery(); connection.Close(); res = 1; return(res); } catch (MySqlException ex) { res = -1; return(res); } }
/// <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> /// 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> /// Crea un nuevo Correo en la BBDD. /// </summary> /// <param name="correo"></param> /// <returns></returns> public int create(CorreoDTO correo) { int generatedKey = 0; try { connection.Open(); MySqlCommand myCommand = new MySqlCommand(); myCommand.Connection = connection; myCommand.CommandText = "INSERT INTO correo (cuenta_idcuenta,asunto,detalle,leido,tipocorreo,fecha,server_idserver) VALUES " + "(?cuenta,?asunto,?detalle,?leido,?tipo,?fecha,?numserver)"; myCommand.Parameters.Add("?cuenta", MySqlDbType.VarChar).Value = correo.IdCuenta; myCommand.Parameters.Add("?asunto", MySqlDbType.VarChar).Value = correo.Asunto; myCommand.Parameters.Add("?detalle", MySqlDbType.VarChar).Value = correo.Detalle; myCommand.Parameters.Add("?leido", MySqlDbType.VarChar).Value = correo.Read; myCommand.Parameters.Add("?tipo", MySqlDbType.VarChar).Value = correo.TipoCorreo; myCommand.Parameters.Add("?fecha", MySqlDbType.VarChar).Value = correo.Fecha; myCommand.Parameters.Add("?numserver", MySqlDbType.VarChar).Value = correo.NumeroServidorCorreo; generatedKey = myCommand.ExecuteNonQuery(); List <AttachmentDTO> adjuntos = correo.Adjuntos; if (adjuntos != null) { foreach (AttachmentDTO adjunto in adjuntos) { try { myCommand.CommandText = "SELECT LAST_INSERT_ID()"; string strId = myCommand.ExecuteScalar().ToString(); adjunto.IdCorreo = int.Parse(strId); } catch (MySqlException e) { adjunto.IdCorreo = 0; } //Necesito obtener el idcorreo generado en la query anterior. try { myCommand.CommandText = "INSERT INTO adjunto (detalle,path,correo_idcorreo) VALUES " + "(?detalleadj,?path,?correoid)"; myCommand.Parameters.Add("?detalleadj", MySqlDbType.VarChar).Value = adjunto.Name; myCommand.Parameters.Add("?path", MySqlDbType.VarChar).Value = adjunto.Path; myCommand.Parameters.Add("?correoid", MySqlDbType.Int16).Value = adjunto.IdCorreo; myCommand.ExecuteNonQuery(); } catch (MySqlException e) { connection.Close(); } } } List <OrigenDestinoDTO> destinos = correo.OrigenDestino; if (destinos != null) { foreach (OrigenDestinoDTO destino in destinos) { destino.IdCorreo = generatedKey; try { int idmaillocal = 0; myCommand.CommandText = "SELECT MAX(idcorreo) FROM correo"; String strtemp = myCommand.ExecuteScalar().ToString(); idmaillocal = int.Parse(strtemp); myCommand.CommandText = "INSERT INTO origendestino (direccion,cc,cco,correo_idcorreo) VALUES " + "(?direccion,?cc,?cco,?correoidd)"; myCommand.Parameters.Add("?direccion", MySqlDbType.VarChar).Value = destino.Direccion; myCommand.Parameters.Add("?cc", MySqlDbType.VarChar).Value = destino.Cc; myCommand.Parameters.Add("?cco", MySqlDbType.VarChar).Value = destino.Cco; myCommand.Parameters.Add("?correoidd", MySqlDbType.Int16).Value = idmaillocal; //destino.IdCorreo; myCommand.ExecuteNonQuery(); } catch (MySqlException e) { connection.Close(); } } } } catch (MySqlException ex) { connection.Close(); } connection.Close(); return(generatedKey); }
/// <summary> /// /// </summary> /// <param name="read"></param> /// <param name="sent"></param> /// <param name="cant"></param> /// <returns></returns> public List <CorreoDTO> list(bool read, bool sent, int cant, CuentaDTO cuenta = null) { CorreoDTO correo; List <CorreoDTO> correos = new List <CorreoDTO>(); try { connection.Open(); MySqlCommand myCommand = new MySqlCommand(); myCommand.Connection = connection; MySqlDataAdapter myAdapter = new MySqlDataAdapter(); DataTable myData = new DataTable(); string query = "SELECT idcorreo,asunto,detalle,tipocorreo,fecha,leido,cuenta_idcuenta FROM correo WHERE 1=1"; //Agrego texto a la query si así lo indica cada filtro if (cuenta != null) { query += " AND cuenta_idcuenta=?idcuenta"; } if (read) { query += " AND leido=?leido"; } if (sent) { query += " AND tipocorreo='ENVIADO'"; } else { query += " AND tipocorreo='RECIBIDO'"; } query += " ORDER BY idcorreo DESC"; if (cant != 0) { query += " LIMIT ?cant"; } myCommand.CommandText = query; if (cuenta != null) { myCommand.Parameters.Add("?idcuenta", MySqlDbType.Int16).Value = cuenta.IdCuenta; } myCommand.Parameters.Add("?leido", MySqlDbType.Int16).Value = read; myCommand.Parameters.Add("?cant", MySqlDbType.Int16).Value = cant; myAdapter.SelectCommand = myCommand; myAdapter.Fill(myData); connection.Close(); if (myData.Rows.Count != 0) { for (int i = 0; i <= myData.Rows.Count - 1; i++) { correo = new CorreoDTO(); correo.IdCorreo = int.Parse(myData.Rows[i].ItemArray.GetValue(0).ToString()); correo.Asunto = myData.Rows[i].ItemArray.GetValue(1).ToString(); correo.Detalle = myData.Rows[i].ItemArray.GetValue(2).ToString(); correo.TipoCorreo = Tipo.ENVIADO; //!!!!!!!! String fechaStr = myData.Rows[i].ItemArray.GetValue(4).ToString(); fechaStr = fechaStr.Substring(0, 10); correo.Fecha = DateTime.Parse(fechaStr); correo.Read = bool.Parse(myData.Rows[i].ItemArray.GetValue(5).ToString()); correo.IdCuenta = int.Parse(myData.Rows[i].ItemArray.GetValue(6).ToString()); List <OrigenDestinoDTO> direcciones = new List <OrigenDestinoDTO>(); try { DataTable myDataDir = new DataTable(); myCommand.CommandText = "SELECT idorigendestino,direccion,cc,cco,correo_idcorreo FROM origendestino " + "WHERE correo_idcorreo=?idcorreo"; myCommand.Parameters.Clear(); myCommand.Parameters.Add("?idcorreo", MySqlDbType.Int16).Value = correo.IdCorreo; myAdapter.SelectCommand = myCommand; myAdapter.Fill(myDataDir); if (myDataDir.Rows.Count != 0) { for (int j = 0; j <= myDataDir.Rows.Count - 1; j++) { OrigenDestinoDTO direccion = new OrigenDestinoDTO(); direccion.IdOrigenDestino = int.Parse(myDataDir.Rows[j].ItemArray.GetValue(0).ToString()); direccion.Direccion = myDataDir.Rows[j].ItemArray.GetValue(1).ToString(); direccion.Cc = bool.Parse(myDataDir.Rows[j].ItemArray.GetValue(2).ToString()); direccion.Cco = bool.Parse(myDataDir.Rows[j].ItemArray.GetValue(3).ToString()); direccion.IdCorreo = int.Parse(myDataDir.Rows[j].ItemArray.GetValue(4).ToString()); direcciones.Add(direccion); } } } catch (MySqlException e) { } correo.OrigenDestino = direcciones; List <AttachmentDTO> adjuntos = new List <AttachmentDTO>(); try { myCommand.CommandText = "SELECT idadjunto,detalle,path,correo_idcorreo FROM adjunto WHERE correo_idcorreo=?idcorreoo"; myCommand.Parameters.Add("?idcorreoo", MySqlDbType.Int16).Value = correo.IdCorreo; DataTable myDataAdj = new DataTable(); myAdapter.SelectCommand = myCommand; myAdapter.Fill(myDataAdj); if (myDataAdj.Rows.Count != 0) { for (int j = 0; j <= myDataAdj.Rows.Count - 1; j++) { AttachmentDTO adjunto = new AttachmentDTO(); adjunto.IdAttachment = int.Parse(myDataAdj.Rows[j].ItemArray.GetValue(0).ToString()); adjunto.Name = myDataAdj.Rows[j].ItemArray.GetValue(1).ToString(); adjunto.Path = myDataAdj.Rows[j].ItemArray.GetValue(2).ToString(); adjunto.IdCorreo = int.Parse(myDataAdj.Rows[j].ItemArray.GetValue(3).ToString()); adjuntos.Add(adjunto); } } } catch (MySqlException e) { } correo.Adjuntos = adjuntos; correos.Add(correo); } } } catch (MySqlException ex) { } return(correos); }