Ejemplo n.º 1
0
        private void EnviarCorreo(string carpetaTemporal, En_Correo correo)
        {
            MailMessage message  = new MailMessage();
            SmtpClient  smtp     = new SmtpClient();
            En_Correo   enCorreo = null;
            Da_Correo   daCorreo = new Da_Correo();

            try
            {
                Da_Archivo daArchivo       = new Da_Archivo();
                En_Archivo archivo         = daArchivo.ObtenerArchivoComprobante(correo.IdComprobante);
                string     rutaXML         = Path.Combine(carpetaTemporal, archivo.NombreXML);
                string     rutaPDF         = Path.Combine(carpetaTemporal, archivo.NombrePDF);
                string     correoEmisor    = ConfigurationManager.AppSettings["correoEmisor"];
                int        puerto          = int.Parse(ConfigurationManager.AppSettings["puerto"]);
                string     host            = ConfigurationManager.AppSettings["host"];
                string     usuario         = ConfigurationManager.AppSettings["usuario"];
                string     clave           = ConfigurationManager.AppSettings["clave"];
                string     tipoComprobante = "";
                switch (archivo.TipoComprobante)
                {
                case "01": tipoComprobante = "Factura"; break;

                case "03": tipoComprobante = "Boleta"; break;

                case "07": tipoComprobante = "Nota de crédito"; break;

                case "08": tipoComprobante = "Nota de débito"; break;
                }
                string rutaPlantilla = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "PlantillaCorreo.txt");
                string cuerpoCorreo  = File.ReadAllText(rutaPlantilla);
                cuerpoCorreo = string.Format(cuerpoCorreo, archivo.RazonSocial.ToUpper(),
                                             tipoComprobante, archivo.SerieNumero, archivo.FechaEmision);

                CrearArchivo(rutaXML, archivo.ArchivoXML);
                CrearArchivo(rutaPDF, archivo.ArchivoPDF);

                message.From = new MailAddress(correoEmisor);
                message.To.Add(new MailAddress(correo.Para));
                message.Subject    = correo.Asunto;
                message.IsBodyHtml = true;
                message.Body       = cuerpoCorreo;
                message.Attachments.Add(new Attachment(rutaXML));
                message.Attachments.Add(new Attachment(rutaPDF));
                smtp.Port                  = puerto;
                smtp.Host                  = host;
                smtp.EnableSsl             = true;
                smtp.UseDefaultCredentials = false;
                smtp.DeliveryMethod        = SmtpDeliveryMethod.Network;
                smtp.Credentials           = new NetworkCredential(usuario, clave);

                try
                {
                    smtp.Send(message);
                    message.Dispose();
                    smtp.Dispose();
                    enCorreo = new En_Correo()
                    {
                        IdComprobante  = correo.IdComprobante,
                        Estado         = 2,
                        MensajeProceso = "Correo enviado satisfactoriamente."
                    };
                    daCorreo.ActualizarEstadoComprobanteCorreo(enCorreo);
                    log.InfoFormat("Se envió el correo para el comprobante {0}-{1}.", archivo.TipoComprobante, archivo.SerieNumero);
                }
                catch (Exception ex)
                {
                    message.Dispose();
                    smtp.Dispose();
                    enCorreo = new En_Correo()
                    {
                        IdComprobante  = correo.IdComprobante,
                        Estado         = 3,
                        MensajeProceso = "Ocurrió un error en el envío. Detalle: " + ex.Message.ToString()
                    };
                    daCorreo.ActualizarEstadoComprobanteCorreo(enCorreo);
                    log.InfoFormat("Ocurrió un error al enviar el comprobante {0}-{1}.", archivo.TipoComprobante, archivo.SerieNumero);
                    throw;
                }

                EliminarArchivo(rutaXML);
                EliminarArchivo(rutaPDF);
            }
            catch (Exception ex)
            {
                string mensajeError = ex.Message.ToString();
                log.Error(mensajeError, ex);
            }
        }