Example #1
0
        /// <summary>
        /// Método que se dispara al hacer click en el botón Borrar del Menú
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void borrarToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (MessageBox.Show("¿Está seguro que desea eliminar esta cuenta?", "PostApp", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
            {
                if (cuenta_id.Text == "")
                {
                    listaCuentas.Rows.Remove(listaCuentas.SelectedRows[0]);
                    // Marca como seleccionada la ultima fila
                    listaCuentas.Rows[listaCuentas.Rows.Count - 1].Selected = true;
                }
                else
                {
                    CuentaDTO pCuenta = new CuentaDTO();
                    pCuenta.Id = Convert.ToInt32(cuenta_id.Text);
                    pCuenta.Direccion = Convert.ToString(cuenta_usuario);
                    try
                    {
                        FachadaABMCuenta.Instancia.EliminarCuenta(pCuenta);
                    }
                    catch (Exception exeption)
                    {
                        MessageBox.Show(exeption.Message, "PostApp", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    }

                    // Actualiza la lista de cuentas
                    MostrarCuentas();
                }
            }
        }
        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 para eliminar los datos de una Cuenta de Correo en la Base de Datos.
 /// </summary>
 /// <param name="pCuentaCorreo"></param>
 public void EliminarCuenta(CuentaDTO pCuentaCorreo)
 {
     try
     {
         SqlCommand comando = this.iConexion.CreateCommand();
         comando.CommandText = @"delete from Cuenta where cuentaId = @ID;
                                 delete from Correo where (cuentaOrigen = @Cuenta and tipocorreo = 'Enviado')
                                                     or (cuentaDestino = @Cuenta2 and tipocorreo = 'Recibido');";
         comando.Parameters.AddWithValue("@ID", pCuentaCorreo.Id);
         comando.Parameters.AddWithValue("@Cuenta", pCuentaCorreo.Direccion);
         // agrega ; a la direccion porque las direcciones de cuentasDestino se guardan con ;
         comando.Parameters.AddWithValue("@Cuenta2", pCuentaCorreo.Direccion + "; ");
         comando.Transaction = iTransaccion;
         comando.ExecuteNonQuery();
     }
     catch (SqlException pSqlException)
     {
         throw new DAOException("Error en la eliminacion de una cuenta 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 descargar los correos de una cuenta.
        /// </summary>
        /// <param name="pCuenta"></param>
        private void ActualizarCuenta(CuentaDTO pCuenta)
        {
            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
                    pCuenta.Contraseña = f2.varf2; //asignamos al texbox el dato de la variable
                }
            }
            try
            {
                FachadaCorreo.Instancia.DescargarCorreos(pCuenta);
            }
            catch (Exception exeption)
            {
                MessageBox.Show(exeption.Message, "PostApp", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
        }
 /// <summary>
 /// Metodo para insertar la informacion de una cuenta de correo en la Base de Datos.
 /// </summary>
 /// <param name="pCuentaCorreo"></param>
 public void AgregarCuenta(CuentaDTO pCuentaCorreo)
 {
     try
     {
         SqlCommand comando = this.iConexion.CreateCommand();
         comando.CommandText = @"insert into Cuenta(Nombre,Direccion,Contraseña,Servicio)
                                            values(@Nombre,@Direccion,@Contraseña,@Servicio)";
         comando.Parameters.AddWithValue("@Nombre", pCuentaCorreo.Nombre);
         comando.Parameters.AddWithValue("@Direccion", pCuentaCorreo.Direccion);
         comando.Parameters.AddWithValue("@Contraseña", pCuentaCorreo.Contraseña);
         comando.Parameters.AddWithValue("@Servicio", pCuentaCorreo.Servicio);
         comando.Transaction = iTransaccion;
         comando.ExecuteNonQuery();
     }
     catch (SqlException pSqlException)
     {
         if (pSqlException.Errors[0].Number == 2627)
         {
             throw new DAOException("Error de datos duplicados. No puede crear 2 cuentas con el mismo nombre. Modifique el nombre y vuelva a intentarlo.", pSqlException);
         }
         throw new DAOException("Error en la inserción de datos de Cuenta 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>
        /// Método para eliminar una Cuenta de correo.
        /// </summary>
        /// <param name="pCuenta">Clase DTO con los datos de la cuenta de correo a eliminar.</param>
        public void EliminarCuenta(CuentaDTO pCuenta)
        {
            try
            {
                factory = DAOFactory.Instancia;
                factory.IniciarConexion();
                factory.ComenzarTransaccion();
                factory.CuentaDAO.EliminarCuenta(pCuenta);
                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();
            }
        }
Example #8
0
        /// <summary>
        /// Metodo que descarga los correos del Servicio de correo que pertenecen a la cuenta <paramref name="pCuenta"/>.
        /// </summary>
        /// <param name="pCuenta">Cuenta de la cual se descargan los correos.</param>
        /// <returns>Retorna una lista de correos.</returns>
        public override IList<CorreoDTO> DescargarCorreos(CuentaDTO pCuenta)
        {
            Pop3Client pop = new Pop3Client();
            OpenPop.Mime.Message mensaje;
            List<CorreoDTO> mCorreos = new List<CorreoDTO>();
            try
            {
                pop.Connect("pop.mail.yahoo.com", 995, true);
                pop.Authenticate(pCuenta.Direccion, pCuenta.Contraseña);
                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)
                    {
                        // We found some plaintext!
                        cuerpo = texto.GetBodyAsText();
                    }
                    else
                    {
                        // Might include a part holding html instead
                        OpenPop.Mime.MessagePart html = mensaje.FindFirstHtmlVersion();
                        if (html != null)
                        {
                            // We found some 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 + "; ";
                    }

                    mCorreos.Add(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

                    });
                }
            }
            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;
        }
Example #9
0
 /// <summary>
 /// Metodo utilizado para enviar un correo.
 /// </summary>
 /// <param name="pCorreo">Correo a ser enviado.</param>
 /// <param name="pCuenta">Cuenta con la que se envia el correo</param>
 public override void EnviarCorreo(CorreoDTO pCorreo, CuentaDTO pCuenta)
 {
     MailMessage correo = new MailMessage();
     try
     {
         correo.From = new MailAddress(pCuenta.Direccion);
         correo.To.Add(pCorreo.CuentaDestino);
         correo.Subject = pCorreo.Asunto;
         correo.Body = pCorreo.Texto;
         if (pCorreo.Adjuntos != null)
         {
             foreach (string archivo in pCorreo.Adjuntos)
             {
                 Attachment attach = new Attachment(@archivo);
                 correo.Attachments.Add(attach);
             }
         }
         SmtpClient cliente = new SmtpClient("smtp.mail.yahoo.com");
         cliente.EnableSsl = true;
         cliente.Port = 587; // o 465
         cliente.Credentials = new System.Net.NetworkCredential(pCuenta.Direccion, pCuenta.Contraseña);
         cliente.Send(correo);
     }
     catch (FormatException exeption) //Cuando no esta bien el formato del destino
     {
         throw new ServicioCorreoException("No se pudo enviar su correo. Revise el formato del destinatario y vuelva a intentarlo.", exeption);
     }
     catch (SmtpException exeption)    // Cuando no hay conexion o estan mal los datos de la cuenta.
     {
         throw new ServicioCorreoException("No se pudo enviar su correo. Revise la conexion a Internet y sus datos de conexión y vuelva a intentarlo.", exeption);
     }
     catch (Exception exeption) // Otras
     {
         throw new ServicioCorreoException("No se pudo enviar su correo.", exeption);
     }
 }
        /// <summary>
        /// Metodo para descargar los correos de una cuenta y cargarlos en la base de datos.
        /// </summary>
        /// <param name="pCorreo"></param>
        public void DescargarCorreos(CuentaDTO pCuenta)
        {
            // Obtiene una instancia del servicio al que pertenece la cuenta e invoca al metodo
            // DescargarCorreos pasandole como parametro la cuenta de la cual se desea descargar los correos
            IList<CorreoDTO> pCorreos = FabricaServicios.Instancia.GetServicio(pCuenta.Servicio).DescargarCorreos(pCuenta);

            foreach (CorreoDTO pCorreo in pCorreos)
            {
                if (!(Existe(pCorreo)))
                {
                    CrearCorreo(pCorreo);
                }
            }
        }
 /// <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 completar la información de una cuenta de la Base de Datos.
        /// </summary>
        /// <param name="pId">Id de la cuenta a ser completada.</param>
        /// <returns></returns>
        public CuentaDTO ObtenerCuenta(int pId)
        {
            try
            {
                factory = DAOFactory.Instancia;
                factory.IniciarConexion();

                CuentaDTO cuenta = new CuentaDTO();
                cuenta.Id = pId;
                return factory.CuentaDAO.ObtenerCuenta(cuenta);
            }
            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 para obtener una cuenta de correo de la Base de Datos.
 /// </summary>
 /// <param name="pCuentaCorreo"></param>
 /// <returns></returns>
 public CuentaDTO ObtenerCuenta(CuentaDTO pCuentaCorreo)
 {
     try
     {
         SqlCommand comando = this.iConexion.CreateCommand();
         comando.CommandText = @"select * from Cuenta where cuentaId = @ID or nombre = @Nombre";
         comando.Parameters.AddWithValue("@ID", pCuentaCorreo.Id);
         comando.Parameters.AddWithValue("@Nombre", pCuentaCorreo.Nombre);
         DataTable tabla = new DataTable();
         using (SqlDataAdapter adaptador = new SqlDataAdapter(comando))
         {
             adaptador.Fill(tabla);
             foreach (DataRow fila in tabla.Rows)
             {
                pCuentaCorreo.Nombre = Convert.ToString(fila["nombre"]);
                pCuentaCorreo.Direccion = Convert.ToString(fila["direccion"]);
                pCuentaCorreo.Contraseña = Convert.ToString(fila["contraseña"]);
                pCuentaCorreo.Id = Convert.ToInt32(fila["cuentaId"]);
                pCuentaCorreo.Servicio = Convert.ToString(fila["servicio"]);
             }
         }
         return pCuentaCorreo;
     }
     catch (SqlException pSqlException)
     {
         throw new DAOException("Error en la obtención de una cuenta de correo", pSqlException);
     }
 }
 /// <summary>
 /// Metodo para actualizar la informacion de una cuenta de correo de la Base de Datos.
 /// </summary>
 /// <param name="pCuentaCorreo"></param>
 public void ModificarCuenta(CuentaDTO pCuentaCorreo)
 {
     try
     {
         SqlCommand comando = this.iConexion.CreateCommand();
         comando.CommandText = @"update Cuenta set direccion= @Direccion, contraseña= @Contraseña,
                                                          nombre = @Nombre, servicio = @Servicio
                                                         where cuentaId = @ID";
         comando.Parameters.AddWithValue("@Nombre", pCuentaCorreo.Nombre);
         comando.Parameters.AddWithValue("@Direccion", pCuentaCorreo.Direccion);
         comando.Parameters.AddWithValue("@Contraseña", pCuentaCorreo.Contraseña);
         comando.Parameters.AddWithValue("@ID", pCuentaCorreo.Id);
         comando.Parameters.AddWithValue("@Servicio", pCuentaCorreo.Servicio);
         comando.Transaction = iTransaccion;
         comando.ExecuteNonQuery();
     }
     catch (SqlException pSqlException)
     {
         if (pSqlException.Errors[0].Number == 2627)
         {
             throw new DAOException("Error de datos duplicados. Modifique el nombre y vuelva a intentarlo.", pSqlException);
         }
         throw new DAOException("Error en la actualizacion de datos de cuenta 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);
     }
 }
Example #15
0
 /// <summary>
 /// Método que se dispara al hacer click en el botón Guardar del Menú
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 private void guardarToolStripMenuItem_Click(object sender, EventArgs e)
 {
     if (cuenta_contraseña.Text == cuenta_contraseña2.Text)
     {
         if (Convert.ToString(listaServicios.SelectedItem) != "Seleccione un servicio")
         {
             CuentaDTO pCuenta = new CuentaDTO();
             pCuenta.Direccion = cuenta_usuario.Text;
             pCuenta.Contraseña = cuenta_contraseña.Text;
             pCuenta.Nombre = cuenta_nombre.Text;
             pCuenta.Servicio = Convert.ToString(listaServicios.SelectedItem);
             try
             {
                 if (cuenta_id.Text == "")
                 {
                     FachadaABMCuenta.Instancia.CrearCuenta(pCuenta);
                     MessageBox.Show("Cuenta guardada con éxito", "PostApp", MessageBoxButtons.OK, MessageBoxIcon.Information);
                 }
                 else
                 {
                     pCuenta.Id = Convert.ToInt32(cuenta_id.Text);
                     FachadaABMCuenta.Instancia.ModificarCuenta(pCuenta);
                     MessageBox.Show("Cuenta guardada con éxito", "PostApp", MessageBoxButtons.OK, MessageBoxIcon.Information);
                 }
             }
             catch (Exception exeption)
             {
                 MessageBox.Show(exeption.Message, "PostApp", MessageBoxButtons.OK, MessageBoxIcon.Information);
             }
         }
         else
         {
             MessageBox.Show("Debe seleccionar un Servicio", "PostApp", MessageBoxButtons.OK, MessageBoxIcon.Information);
         }
     }
     else
     {
         MessageBox.Show("Verifique las contraseñas", "PostApp", MessageBoxButtons.OK, MessageBoxIcon.Information);
     }
     // Actualiza la lista de cuentas
     MostrarCuentas();
 }
 /// <summary>
 /// Metodo abstracto que descarga los correos de un Servicio de correo referentes a una cuenta.
 /// </summary>
 /// <param name="pCuenta">Cuenta de la cual se descargan los correos.</param>
 /// <returns>Retorna una lista de correos.</returns>
 public abstract IList<CorreoDTO> DescargarCorreos(CuentaDTO pCuenta);
 /// <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);
 public FormContraseña(CuentaDTO pCuenta)
 {
     InitializeComponent();
     iCuenta = pCuenta;
 }