-- sendmail, mailkit como principal

This commit is contained in:
2024-08-09 14:33:18 -07:00
parent ffab9fa725
commit 293684e0ca

View File

@@ -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