Limilabs EmailsSrvice
This commit is contained in:
@@ -1,10 +1,13 @@
|
||||
Imports DigitalData.Modules.Logging
|
||||
Imports Limilabs.Mail
|
||||
Imports Limilabs.Client.IMAP
|
||||
Imports Limilabs.Client.SMTP
|
||||
Imports Limilabs.Client
|
||||
Imports System.Net.Security
|
||||
Imports System
|
||||
Imports System.Security.Authentication
|
||||
Imports Limilabs.Mail.Headers
|
||||
Imports Limilabs.Mail.MIME
|
||||
|
||||
Public Class Limilab
|
||||
Private Initialized As Boolean = False
|
||||
@@ -16,11 +19,21 @@ Public Class Limilab
|
||||
Private Password As String
|
||||
Private AuthType As String
|
||||
Private ImapObject As Imap
|
||||
Public ErrorMessage As String
|
||||
Public Sub New(LogConfig As LogConfig)
|
||||
LogConfig = LogConfig
|
||||
Logger = LogConfig.GetLogger()
|
||||
Logger.Info("Limilab initialized")
|
||||
End Sub
|
||||
''' <summary>
|
||||
''' Initializes the module.
|
||||
''' </summary>
|
||||
''' <param name="oImapServer">IP-Address or Domainname of Server</param>
|
||||
''' <param name="oPort">IMAP-Port</param>
|
||||
''' <param name="oUser">IMAP-Username</param>
|
||||
''' <param name="oPassword">IMAP-Password</param>
|
||||
''' <param name="oAuthType">Auth-Type</param>
|
||||
''' <param name="Folder">The folder to fetch messages from. Defaults to `Inbox`</param>
|
||||
Public Sub InitIMAP(oImapServer As String, oPort As Integer, oUser As String, oPassword As String, oAuthType As String, Optional Folder As String = "Inbox")
|
||||
IMAPServer = oImapServer
|
||||
IMAPPort = oPort
|
||||
@@ -32,11 +45,6 @@ Public Class Limilab
|
||||
''' <summary>
|
||||
''' Tests connection to a given IMAP Server by connecting and doing a simple message query.
|
||||
''' </summary>
|
||||
''' <param name="Server">IP-Address or Domainname of Server</param>
|
||||
''' <param name="Port">IMAP-Port</param>
|
||||
''' <param name="Username">IMAP-Username</param>
|
||||
''' <param name="Password">IMAP-Password</param>
|
||||
''' <param name="Folder">The folder to fetch messages from. Defaults to `Inbox`</param>
|
||||
''' <returns>True if connection and query were successful. False otherwise.</returns>
|
||||
Public Function IMAPTestLogin() As Boolean
|
||||
Logger.Debug("Testing Login to Server {0}:{1} with user {2}", IMAPServer, IMAPPort, User)
|
||||
@@ -52,6 +60,7 @@ Public Class Limilab
|
||||
Return oReturn
|
||||
Catch ex As Exception
|
||||
Logger.Error(ex)
|
||||
ErrorMessage = ex.Message
|
||||
Return False
|
||||
End Try
|
||||
End Function
|
||||
@@ -61,29 +70,39 @@ Public Class Limilab
|
||||
Return True
|
||||
End If
|
||||
Dim oReturnImap As New Imap()
|
||||
AddHandler oReturnImap.ServerCertificateValidate, AddressOf Validate
|
||||
Logger.Debug($"AUTH_TYPE [{AuthType}]")
|
||||
If AuthType = "SSL/TLS" Then
|
||||
If IMAPPort <> "993" Then
|
||||
Logger.Debug($"Connecting with explizit port [{IMAPPort}]")
|
||||
oReturnImap.Connect(IMAPServer, IMAPPort)
|
||||
Else
|
||||
Logger.Debug("Connecting to IMAP-Server without port...")
|
||||
oReturnImap.ConnectSSL(IMAPServer)
|
||||
End If
|
||||
Logger.Debug($"Connect to [{IMAPServer}] successful!")
|
||||
|
||||
If AuthType.EndsWith("TLS") Then
|
||||
oReturnImap.SSLConfiguration.EnabledSslProtocols = SslProtocols.Tls12
|
||||
' we will use custom validation
|
||||
AddHandler oReturnImap.ServerCertificateValidate, AddressOf Validate
|
||||
Logger.Debug("Connecting to IMAP-Server without port...")
|
||||
oReturnImap.Connect(IMAPServer)
|
||||
|
||||
Dim oSupportsStartTLS As Boolean = oReturnImap.SupportedExtensions().Contains(ImapExtension.StartTLS)
|
||||
If oSupportsStartTLS And AuthType.EndsWith("TLS") Then
|
||||
Logger.Debug("Server supports StartTLS, so starting...")
|
||||
oReturnImap.StartTLS()
|
||||
Else
|
||||
Logger.Info("Server supports no StartTLS")
|
||||
oReturnImap.SSLConfiguration.EnabledSslProtocols = SslProtocols.Tls12
|
||||
End If
|
||||
ElseIf AuthType = "SSL" Then
|
||||
' we will use custom validation
|
||||
AddHandler oReturnImap.ServerCertificateValidate, AddressOf Validate
|
||||
Logger.Debug($"Connecting to IMAP-Server with port {IMAPPort}...")
|
||||
oReturnImap.ConnectSSL(IMAPServer, IMAPPort)
|
||||
If IMAPPort <> "993" Then
|
||||
Logger.Debug($"Connecting with explizit port [{IMAPPort}]")
|
||||
oReturnImap.Connect(IMAPServer, IMAPPort)
|
||||
Else
|
||||
Logger.Debug("Connecting to IMAP-Server without port...")
|
||||
oReturnImap.ConnectSSL(IMAPServer)
|
||||
End If
|
||||
ElseIf AuthType = "Simple" Then
|
||||
|
||||
End If
|
||||
Logger.Debug(">> Connected to IMAP-Server!")
|
||||
Dim oSupportsStartTLS As Boolean = oReturnImap.SupportedExtensions() _
|
||||
.Contains(ImapExtension.StartTLS)
|
||||
If oSupportsStartTLS And AuthType.EndsWith("TLS") Then
|
||||
Logger.Debug("Server supports StartTLS, so starting...")
|
||||
oReturnImap.StartTLS()
|
||||
End If
|
||||
|
||||
Logger.Debug("Login with User and password...")
|
||||
oReturnImap.UseBestLogin(User, Password)
|
||||
Logger.Debug(">> Logged on!")
|
||||
@@ -91,6 +110,7 @@ Public Class Limilab
|
||||
Return True
|
||||
Catch ex As Exception
|
||||
Logger.Error(ex)
|
||||
ErrorMessage = ex.Message
|
||||
If Not IsNothing(ex.InnerException) Then
|
||||
Logger.Warn("Inner Exception ImapConnect: " + ex.InnerException.Message)
|
||||
End If
|
||||
@@ -125,25 +145,121 @@ Public Class Limilab
|
||||
Return oListuids
|
||||
Catch ex As Exception
|
||||
Logger.Error(ex)
|
||||
ErrorMessage = ex.Message
|
||||
Return oListuids
|
||||
End Try
|
||||
|
||||
End Function
|
||||
|
||||
Public Function GetMessageUids(oImapServer As String, oPort As Integer, oUser As String, oPassword As String, oSSL As Boolean)
|
||||
Try
|
||||
|
||||
Catch ex As Exception
|
||||
|
||||
End Try
|
||||
End Function
|
||||
Public Function DeleteMessageByUID(oUID As String) As Boolean
|
||||
Try
|
||||
ImapObject.DeleteMessageByUID(oUID)
|
||||
Return True
|
||||
Catch ex As Exception
|
||||
Logger.Error(ex)
|
||||
ErrorMessage = ex.Message
|
||||
Return False
|
||||
End Try
|
||||
End Function
|
||||
''' <summary>
|
||||
''' Creates a MailObject and sends Mail via smtp.
|
||||
''' </summary>
|
||||
''' <returns>True if Message was send. False otherwise.</returns>
|
||||
Public Function NewSMTPEmail(mailto As String, mailSubject As String, mailBody As String,
|
||||
mailfrom As String, mailsmtp As String, mailport As Integer, mailUser As String, mailPW As String,
|
||||
AUTH_TYPE As String, SENDER_INSTANCE As String, ADDED_DATETIME As String, Optional attachmentString As String = "", Optional Test As Boolean = False)
|
||||
Try
|
||||
Dim oError As Boolean = False
|
||||
Dim oReceipiants As String()
|
||||
If mailto.Contains(";") Then
|
||||
oReceipiants = mailto.Split(";")
|
||||
Else
|
||||
ReDim Preserve oReceipiants(0)
|
||||
oReceipiants(0) = mailto
|
||||
End If
|
||||
For Each oMailReceipiant As String In oReceipiants
|
||||
Logger.Debug($"oMailReceipiant [{oMailReceipiant}]")
|
||||
Logger.Debug($"mailsmtp [{mailsmtp}]")
|
||||
Logger.Debug($"mailport [{mailport}]")
|
||||
Logger.Debug($"mailSubject [{mailSubject}]")
|
||||
Dim oMailBuilder As New MailBuilder()
|
||||
oMailBuilder.From.Add(New MailBox(mailfrom))
|
||||
oMailBuilder.[To].Add(New MailBox(oMailReceipiant))
|
||||
oMailBuilder.Subject = mailSubject
|
||||
If ADDED_DATETIME <> "" Then
|
||||
mailBody &= "<p>Creation-time: " & ADDED_DATETIME
|
||||
End If
|
||||
If Test = True Then
|
||||
oMailBuilder.Html = $"This is a Testmail! <p> The body-text will be replaced within profile! <p> mailsmtp: {mailsmtp} <br> mailport: {mailport}
|
||||
<br> mailUser: {mailUser} <br> mailPW: XXXX <br> AUTH_TYPE: {AUTH_TYPE}"
|
||||
|
||||
Else
|
||||
oMailBuilder.Html = mailBody
|
||||
End If
|
||||
|
||||
Logger.Debug($"mailBody [{oMailBuilder.Html.ToString}]")
|
||||
|
||||
If attachmentString <> "" Then
|
||||
' Read attachment from disk, add it to Attachments collection
|
||||
If System.IO.File.Exists(attachmentString) Then
|
||||
Dim oAttachment As MimeData = oMailBuilder.AddAttachment(attachmentString)
|
||||
End If
|
||||
End If
|
||||
|
||||
Dim email As IMail = oMailBuilder.Create()
|
||||
' Send the message
|
||||
Using oSmtp As New Smtp()
|
||||
AddHandler oSmtp.ServerCertificateValidate, AddressOf Validate
|
||||
Logger.Debug($"AUTH_TYPE [{AUTH_TYPE}]")
|
||||
If AUTH_TYPE = "SSL" Then
|
||||
|
||||
Try
|
||||
If mailport <> "465" Then
|
||||
Logger.Debug($"Connecting with explizit port [{mailport}]")
|
||||
oSmtp.Connect(mailsmtp, mailport)
|
||||
Logger.Debug($"Connect to [{mailsmtp}] successful!")
|
||||
Else
|
||||
oSmtp.ConnectSSL(mailsmtp)
|
||||
End If
|
||||
Catch ex As Exception
|
||||
Logger.Error(ex)
|
||||
End Try
|
||||
ElseIf AUTH_TYPE = "SSL/TLS" Then
|
||||
'##########################################################################################
|
||||
'Tested with ExchangeServer SWB 22.10.2021
|
||||
'##########################################################################################
|
||||
If mailport <> "587" Then
|
||||
Logger.Debug($"Connecting with explizit port [{mailport}]")
|
||||
oSmtp.Connect(mailsmtp, mailport)
|
||||
Else
|
||||
oSmtp.Connect(mailsmtp)
|
||||
End If
|
||||
Logger.Debug($"Connect to [{mailsmtp}] successful!")
|
||||
Dim supportsStartTLS As Boolean = oSmtp.SupportedExtensions().Contains(SmtpExtension.StartTLS)
|
||||
If supportsStartTLS = True Then
|
||||
oSmtp.StartTLS()
|
||||
Logger.Debug($"TLS started!")
|
||||
Else
|
||||
Logger.Info("Server supports no StartTLS")
|
||||
oSmtp.SSLConfiguration.EnabledSslProtocols = SslProtocols.Tls12
|
||||
End If
|
||||
Else
|
||||
oSmtp.Connect(mailsmtp)
|
||||
End If
|
||||
Logger.Debug($"mailUser [{mailUser}]")
|
||||
oSmtp.UseBestLogin(mailUser, mailPW) ' remove if not needed
|
||||
|
||||
oSmtp.SendMessage(email)
|
||||
Logger.Info("Message to " & oMailReceipiant & " has been send.")
|
||||
oSmtp.Close()
|
||||
End Using
|
||||
Next
|
||||
Return True
|
||||
|
||||
Catch ex As Exception
|
||||
Logger.Error(ex)
|
||||
ErrorMessage = ex.Message
|
||||
Return False
|
||||
End Try
|
||||
|
||||
End Function
|
||||
End Class
|
||||
|
||||
Reference in New Issue
Block a user