Add Initial Support for OAuth2 / O365

This commit is contained in:
Jonathan Jenne
2023-09-06 12:55:02 +02:00
parent 5f04d6a7a6
commit c43903154c
7 changed files with 350 additions and 332 deletions

View File

@@ -41,21 +41,25 @@ Public Class clsWorker
CURRENT_DEBUG_LOCAL_EMAIL = pLocalEML
End Sub
Private Sub DeleteTempFiles()
For Each _file In TEMP_FILES
Logger.Debug("Trying to delete temp file: [{0}]", _file)
If IO.File.Exists(_file) Then
Try
IO.File.Delete(_file)
Catch ex As Exception
Logger.Error(ex)
Logger.Warn("Could not delete the tempfile from TEMP_FILES: [{0}]", _file)
End Try
End If
Next
TEMP_FILES.Clear()
End Sub
Public Sub Start_WorkingProfiles(Optional LocalEmail As Boolean = False)
Try
For Each _file In TEMP_FILES
Logger.Debug("Trying to delete temp file: [{0}]", _file)
If IO.File.Exists(_file) Then
Try
IO.File.Delete(_file)
Catch ex As Exception
Logger.Error(ex)
Logger.Warn($"TempFileDelete - Could not delete the tempfile from TEMP_FILES: {ex.Message}")
End Try
End If
Next
TEMP_FILES.Clear()
DeleteTempFiles()
If Database.DBInitialized = True Then
Logger.Debug("now windream_init... ")
@@ -98,10 +102,6 @@ Public Class clsWorker
End If
CURRENT_EMAIL_GUID = 0
MAIL_FROM = ""
MAIL_SERVER = ""
MAIL_USER = ""
MAIL_USER_PW = ""
CURRENT_POLL_TYPE = oDR_Profile.Item("POLL_TYPE")
Logger.Debug(String.Format("Working on profile: ({0}-{1}-{2}) ", oDR_Profile.Item("GUID"), oDR_Profile.Item("PROFILE_NAME"), CURRENT_POLL_TYPE))
@@ -114,31 +114,30 @@ Public Class clsWorker
Logger.Debug("Expression Filter email: " & expression)
Logger.Debug("DT_TBDD_EMAIL.rowCount: " & DT_TBDD_EMAIL.Rows.Count)
'Filter the rows using Select() method of DataTable
Dim FilteredRows As DataRow() = EMAIL_PROF_TABLE.Select(expression)
If FilteredRows.Length = 1 Then
For Each row As DataRow In FilteredRows
MAIL_FROM = row("EMAIL_FROM")
MAIL_SERVER = row("EMAIL_SMTP")
MAIL_USER = row("EMAIL_USER")
MAIL_USER_PW = row("EMAIL_PW")
MAIL_PORT = row("PORT_IN")
MAIL_INBOX_NAME = "Inbox"
MAIL_ARCHIVE_FOLDER = row("ARCHIVE_FOLDER")
MAIL_AUTHTYPE = row("AUTH_TYPE")
Logger.Debug(String.Format("{0}-{1}", MAIL_FROM, MAIL_SERVER))
Dim FilteredRows As List(Of DataRow) = EMAIL_PROF_TABLE.Select(expression).ToList()
If FilteredRows.Count = 1 Then
Dim oRow = FilteredRows(0)
Dim MAIL_FROM = oRow("EMAIL_FROM")
Dim MAIL_SERVER = oRow("EMAIL_SMTP")
Dim MAIL_USER = oRow("EMAIL_USER")
Dim MAIL_USER_PW = oRow("EMAIL_PW")
Dim MAIL_PORT = oRow("PORT_IN")
Dim MAIL_INBOX_NAME = "Inbox"
Dim MAIL_ARCHIVE_FOLDER = oRow("ARCHIVE_FOLDER")
Dim MAIL_AUTHTYPE = oRow("AUTH_TYPE")
Logger.Debug(String.Format("{0}-{1}", MAIL_FROM, MAIL_SERVER))
Dim PWPlain = Encryption.DecryptData(MAIL_USER_PW)
If Not IsNothing(PWPlain) Then
If PWPlain <> "" Then
MAIL_USER_PW = PWPlain
Else
Logger.Warn("PWPlain is string.empty - Could not decrypt passwort")
End If
Dim PWPlain = Encryption.DecryptData(MAIL_USER_PW)
If Not IsNothing(PWPlain) Then
If PWPlain <> "" Then
MAIL_USER_PW = PWPlain
Else
Logger.Warn("PWPlain is nothing - Could not decrypt passwort")
Logger.Warn("PWPlain is string.empty - Could not decrypt passwort")
End If
Else
Logger.Warn("PWPlain is nothing - Could not decrypt passwort")
End If
Next
CURRENT_WORKMAIL_UID_LIST.Clear()
If MAIL_SERVER <> "" Then
@@ -148,7 +147,8 @@ Public Class clsWorker
Else
Select Case CURRENT_POLL_TYPE
Case "IMAP"
oPollResult = FetchMessages(MAIL_SERVER, MAIL_PORT, MAIL_USER, MAIL_USER_PW, MAIL_AUTHTYPE)
' We are using 'Archive Folder' as an additional field to save the Tenant-ID for O365-OAuth2
oPollResult = FetchMessages(MAIL_SERVER, MAIL_PORT, MAIL_USER, MAIL_USER_PW, MAIL_AUTHTYPE, MAIL_ARCHIVE_FOLDER)
Case Else
Logger.Error("Poll Type [{0}] is not supported!", CURRENT_POLL_TYPE)
@@ -161,7 +161,7 @@ Public Class clsWorker
Logger.Info("Working with local Mail")
Dim oEmail As IMail = New MailBuilder().CreateFromEmlFile(CURRENT_DEBUG_LOCAL_EMAIL)
ClassWorkMail.WorkEmailMessage(oEmail, 123456789)
CURRENT_MAIL_MESSAGE = Nothing
'CURRENT_MAIL_MESSAGE = Nothing
Else
Try
Logger.Info(String.Format("Pulled: [{0}] E-Mails", CURRENT_WORKMAIL_UID_LIST.Count()))
@@ -199,7 +199,7 @@ Public Class clsWorker
Logger.Info("### oEmail was nothing ###")
End If
CURRENT_MAIL_MESSAGE = Nothing
'CURRENT_MAIL_MESSAGE = Nothing
Next
If CURRENT_POLL_TYPE = "IMAP" And CURRENT_WORKMAIL_UID_LIST.Count > 0 Then
If Not IsNothing(Fetcher.Client) Then
@@ -226,24 +226,7 @@ Public Class clsWorker
Logger.Warn("For the Email-Profile ID " & CURRENT_EMAIL_GUID & " no record could be found! Check wether Email-Profile is active!")
End If
Next
Try
'Delete all Tempfiles
For Each _file In TEMP_FILES
Logger.Debug("Trying to delete temp file: [{0}]", _file)
If System.IO.File.Exists(_file) Then
Try
System.IO.File.Delete(_file)
Catch ex As Exception
Logger.Error(ex)
Logger.Warn($"TempFileDelete - Could not delete the tempfile from TEMP_FILES: {ex.Message}")
End Try
End If
Next
Catch ex As Exception
Logger.Warn($"TempFileDelete(X) - Could not delete the tempfile from TEMP_FILES: {ex.Message}")
End Try
DeleteTempFiles()
Else
Logger.Info("No active profiles")
@@ -257,9 +240,19 @@ Public Class clsWorker
End Try
End Sub
Public Function FetchMessages(Server As String, Port As Integer, Username As String, Password As String, AuthType As String) As Boolean
Public Function FetchMessages(pServer As String, pPort As Integer, pUsername As String, pPassword As String, pAuthType As String, pArchiveFolder As String) As Boolean
Try
Dim oSession = Fetcher.Connect(Server, Port, Username, Password, AuthType)
Dim oSession As MailSession.SessionInfo
If pAuthType = MailSession.AUTH_OAUTH2 Then
Dim oClientId As String = pServer
Dim oClientSecret As String = pPassword
Dim oTenantId As String = pArchiveFolder
oSession = Fetcher.ConnectToO365(pUsername, oClientId, oTenantId, oClientSecret)
Else
oSession = Fetcher.Connect(pServer, pPort, pUsername, pPassword, pAuthType)
End If
If oSession.Connected = False AndAlso oSession.Error IsNot Nothing Then