Add Initial Support for OAuth2 / O365
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user