diff --git a/App_Code/ClsSisMail.vb b/App_Code/ClsSisMail.vb index 560db8771..82d150fea 100644 --- a/App_Code/ClsSisMail.vb +++ b/App_Code/ClsSisMail.vb @@ -1,5 +1,9 @@ Imports System.IO +Imports System.Net Imports Extensiones +Imports MailKit.Net.Smtp +Imports MailKit.Security +Imports MimeKit Public Class ClsSisMail @@ -50,7 +54,7 @@ Public Class ClsSisMail For Each ItemMail As ArchivoMail In Archivos If ItemMail IsNot Nothing Then - If ItemMail.Ruta <> "" AndAlso IO.File.Exists(ItemMail.Ruta) Then + If ItemMail.Ruta <> "" AndAlso System.IO.File.Exists(ItemMail.Ruta) Then ItemMail.ArchivoBinario = StreamFile(ItemMail.Ruta) If ItemMail.NombreArchivo = "" Then ItemMail.NombreArchivo = Path.GetFileName(ItemMail.Ruta) ObjMail.Archivos.Add(ItemMail) @@ -75,6 +79,104 @@ Public Class ClsSisMail Return False End If + If ObjMail.ObjEmpresa.Soporte_Mail <> "" Then Return FinalSendOld(ObjMail) + + Dim Retorno As Boolean = False + Dim MensajeLOG As New StringBuilder + + MensajeLOG.AppendFormat("From:'{0}' - Para:'{1}' - Asunto:'{2}' - CCP: '{3}' - Adjuntos: {4}", ObjMail.ObjEmpresa.SendMail, ObjMail.Para, ObjMail.Asunto, ObjMail.CCP, If(ObjMail.Archivos IsNot Nothing, ObjMail.Archivos.Count, 0)) + + Try + + Dim Correo As New MimeMessage() + Dim Mensaje As String = String.Empty + Dim ArrayPara() As String = ObjMail.Para.Replace(",", ";").Split(";"c) + Dim ArrayCCP() As String = ObjMail.CCP.Replace(",", ";").Split(";"c) + Dim ArrayBCC() As String = ObjMail.CCO.Replace(",", ";").Split(";"c) + + If ObjMail.De = String.Empty Then + Correo.From.Add(New MailboxAddress(ObjMail.ObjEmpresa.SendMail, ObjMail.ObjEmpresa.SendMail)) + Else + Correo.From.Add(New MailboxAddress(ObjMail.De, ObjMail.ObjEmpresa.SendMail)) + End If + + If ArrayPara IsNot Nothing AndAlso ArrayPara.Length > 0 Then + For Each CorreoPara As String In ArrayPara.Distinct + If IsMail(CorreoPara.Trim) Then Correo.To.Add(New MailboxAddress(CorreoPara.Trim, CorreoPara.Trim)) + Next + End If + + If ArrayCCP IsNot Nothing AndAlso ArrayCCP.Length > 0 Then + For Each CorreoCCPPara As String In ArrayCCP.Distinct + If IsMail(CorreoCCPPara.Trim) Then Correo.To.Add(New MailboxAddress(CorreoCCPPara.Trim, CorreoCCPPara.Trim)) + Next + End If + + If ArrayBCC IsNot Nothing AndAlso ArrayBCC.Length > 0 Then + For Each CorreoCCOPara As String In ArrayBCC.Distinct + If IsMail(CorreoCCOPara.Trim) Then Correo.Bcc.Add(New MailboxAddress(CorreoCCOPara.Trim, CorreoCCOPara.Trim)) + Next + End If + + Correo.Subject = ObjMail.Asunto + + Dim builder As New BodyBuilder() + ' Set the html version of the message text + builder.HtmlBody = Mensaje & ObjMail.Body + + Correo.Body = New TextPart("html") With {.Text = Mensaje & ObjMail.Body} + 'Correo.IsBodyHtml = True + 'Correo.Priority = Net.Mail.MailPriority.Normal + If ObjMail.Archivos IsNot Nothing Then + For Each Item As ArchivoMail In ObjMail.Archivos + If Item.ArchivoBinario IsNot Nothing Then + builder.Attachments.Add(Item.NombreArchivo, New MemoryStream(Item.ArchivoBinario)) + 'Correo.Body.Attachments.Add(New MailKit.Attachment(Item.NombreArchivo, New MemoryStream(Item.ArchivoBinario))) + End If + Next + End If + ' Now we just need to set the message body and we're done + Correo.Body = builder.ToMessageBody() + + + Try + Using SMTP As New SmtpClient() + SMTP.Connect(ObjMail.ObjEmpresa.SendMailServer, ObjMail.ObjEmpresa.SendMailPuerto, SecureSocketOptions.Auto) + SMTP.Authenticate(ObjMail.ObjEmpresa.SendMail, ObjMail.ObjEmpresa.SendMailPassword) + + SMTP.Send(Correo) + SMTP.Disconnect(True) + End Using + Retorno = True + Catch ex As Exception + Retorno = False + MensajeLOG.AppendLine(" ") + MensajeLOG.AppendFormat(" - Ocurrió un error al mandar correo.{0}", ex) + End Try + + ObjMail = Nothing 'destruyo el contenido + + Correo.Dispose() + Catch ex As Exception + Retorno = False + MensajeLOG.AppendLine(" ") + MensajeLOG.AppendFormat(" - Ocurrió Cargar datos Correo.{0}", ex) + End Try + + MensajeLOG.ToString().GuardaLogMail() + MensajeLOG.Clear() + + Return Retorno + End Function + + Private Function FinalSendOld(ObjMail As Mail) As Boolean + + If ObjMail.Para = "" Then + Dim Msg As String = $"No se especifico a remitente - {ObjMail.Asunto}" + Msg.GuardaLogMail() + Return False + End If + Dim Retorno As Boolean = False Dim MensajeLOG As New StringBuilder