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