Ejemplo n.º 1
0
        public void ProcesarEnvioCorreo()
        {
            try
            {
                Da_Correo        daCorreo        = new Da_Correo();
                List <En_Correo> correos         = daCorreo.CorreosPendientesDeEnvio();
                Da_Comprobante   daComprobante   = new Da_Comprobante();
                string           carpetaTemporal = daComprobante.ObtenerRutaTemporal("TempCorreo");
                CrearCarpeta(carpetaTemporal);

                if (correos.Count > 0)
                {
                    Task[] taskArray = new Task[correos.Count];

                    int i = 0;
                    foreach (En_Correo correo in correos)
                    {
                        En_Correo correoParam = correo;
                        taskArray[i] = Task.Factory.StartNew(() => EnviarCorreo(carpetaTemporal, correoParam));
                        i           += 1;
                    }
                    Task.WaitAll(taskArray.ToArray());
                }
            }
            catch (Exception ex)
            {
                log.Error(ex.Message.ToString(), ex);
            }
        }
Ejemplo n.º 2
0
        private void RegistrarCorreo(En_Comprobante comprobante)
        {
            try
            {
                string correoEmisor    = ConfigurationManager.AppSettings["correoEmisor"];
                string tipoComprobante = "";
                switch (comprobante.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    asunto   = string.Format(ConfigurationManager.AppSettings["asunto"], tipoComprobante, comprobante.SerieNumero);
                Da_Correo daCorreo = new Da_Correo();
                En_Correo enCorreo = new En_Correo
                {
                    De            = correoEmisor,
                    Para          = comprobante.CorreoElectronico,
                    IdComprobante = comprobante.IdComprobante,
                    Asunto        = asunto
                };

                daCorreo.InsertarComprobanteCorreo(enCorreo);
                log.InfoFormat("Se registró el correo para el comprobante {0}-{1} de la empresa emisora con ruc: {2}.",
                               comprobante.TipoComprobante, comprobante.SerieNumero, comprobante.RucEmisor);
            }
            catch (Exception ex)
            {
                string mensajeError = string.Format("Ocurrió un error en el registro del correo para el comprobante {0}-{1} de la empresa emisora con ruc: {2}.",
                                                    comprobante.TipoComprobante, comprobante.SerieNumero, comprobante.RucEmisor);
                log.Error(mensajeError, ex);
            }
        }
Ejemplo n.º 3
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);
            }
        }