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);
     }
 }
Пример #3
0
 /// <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);
     }
 }
Пример #4
0
        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();
        }
Пример #5
0
 /// <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);
     }
 }
Пример #6
0
        /// <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);
            }
        }
Пример #7
0
        /// <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();
            }
        }
Пример #8
0
        /// <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);
            }
        }
Пример #9
0
 public void PrepararParaReenviar(CorreoDTO oCorreo)
 {
     if (tipo == "forward")
     {
         txtAsunto.Text  = "FWD: " + oCorreo.Asunto;
         txtMensaje.Text = oCorreo.Detalle;
     }
 }
Пример #10
0
        /// <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);
        }
Пример #11
0
        /// <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();
        }
Пример #12
0
        /// <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);
        }
Пример #13
0
 public void ObtenerCorreo(CorreoDTO oCorreo)
 {
     try {
         correo = new CorreoDTO();
         correo = Controller.Correo.getInstance().obtenerCorreo(oCorreo);
         CargarCorreo();
         //Pasar a Leido
         //Cargo adjuntos
     }
     catch (Exception ex) { }
 }
Пример #14
0
        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) { }
        }
Пример #15
0
 /// <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);
     }
 }
Пример #16
0
        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;
        }
Пример #18
0
        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();
        }
Пример #19
0
        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();
        }
Пример #20
0
        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;
                }
            }
        }
Пример #21
0
        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;
            }
        }
Пример #22
0
        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;
            }
        }
Пример #23
0
        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();
        }
Пример #24
0
        /// <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();
            }
        }
Пример #25
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);
            }
        }
Пример #26
0
        /// <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);
Пример #29
0
        /// <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);
        }
Пример #30
0
        /// <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);
        }