Clean up UI, add Security NONE
This commit is contained in:
@@ -6,43 +6,83 @@ Imports System.Reflection
|
||||
Imports System.IO
|
||||
|
||||
Imports DigitalData.Modules.Messaging
|
||||
Imports DigitalData.Modules.Messaging.Mail
|
||||
Imports Limilabs.Client.IMAP
|
||||
|
||||
Public Class clsEmailIMAP
|
||||
Private Shared Logger As Logger
|
||||
Private Shared LogConfig As LogConfig
|
||||
Private _limilab As Limilab
|
||||
Sub New(LogConf As LogConfig)
|
||||
LogConfig = LogConf
|
||||
Logger = LogConf.GetLogger
|
||||
_limilab = New Limilab(LogConf)
|
||||
Private ReadOnly Logger As Logger
|
||||
Private ReadOnly _limilab As Limilab
|
||||
Private Fetcher As MailFetcher
|
||||
|
||||
Public ReadOnly Property Client As Imap
|
||||
Get
|
||||
Return Fetcher.Client
|
||||
End Get
|
||||
End Property
|
||||
|
||||
Sub New(pLogConfig As LogConfig)
|
||||
Logger = pLogConfig.GetLogger
|
||||
_limilab = New Limilab(pLogConfig)
|
||||
Fetcher = New MailFetcher(pLogConfig)
|
||||
End Sub
|
||||
Public Function FetchIMAPMessagesLimilab(Server As String, Port As Integer, Username As String, Password As String, AuthType As String) As Boolean
|
||||
Try
|
||||
Logger.Debug("FetchIMAPMessagesLimilab - Fetching messages...")
|
||||
_limilab.InitIMAP(True, Server, Port, Username, Password, AuthType)
|
||||
Dim oListuids As New List(Of Long)
|
||||
oListuids = _limilab.IMAPGetMessageIDs_AllMails()
|
||||
Dim oSession = Fetcher.Connect(Server, Port, Username, Password, AuthType)
|
||||
|
||||
If IsNothing(oListuids) Then
|
||||
Logger.Warn("List of UIDs was Nothing. Returning False.")
|
||||
If oSession.Connected = False AndAlso oSession.Error IsNot Nothing Then
|
||||
Logger.Warn("Connection to Mail Server failed!")
|
||||
Logger.Error(oSession.Error)
|
||||
Return False
|
||||
Else
|
||||
If oListuids.Count > 0 Then
|
||||
CURRENT_WORKMAIL_UID_LIST = oListuids
|
||||
Logger.Info("FetchIMAPMessagesLimilab - Found [{0}] messages", oListuids.Count)
|
||||
CURRENT_ImapObject = _limilab.CurrentImapObject
|
||||
Else
|
||||
Logger.Debug("FetchIMAPMessagesLimilab - No Emails found!")
|
||||
End If
|
||||
|
||||
ElseIf oSession.Connected = False Then
|
||||
Logger.Warn("Connection to Mail Server failed!")
|
||||
Return False
|
||||
End If
|
||||
|
||||
Dim oMailIds As List(Of Long) = Fetcher.ListAllMails()
|
||||
|
||||
If oMailIds Is Nothing Then
|
||||
Logger.Warn("List of UIDs was Nothing. Exiting.")
|
||||
Return False
|
||||
End If
|
||||
|
||||
If oMailIds.Count = 0 Then
|
||||
Logger.Debug("No Emails found.")
|
||||
Return True
|
||||
End If
|
||||
|
||||
CURRENT_WORKMAIL_UID_LIST = oMailIds
|
||||
|
||||
Return True
|
||||
|
||||
'Logger.Debug("FetchIMAPMessagesLimilab - Fetching messages...")
|
||||
'_limilab.InitIMAP(True, Server, Port, Username, Password, AuthType)
|
||||
|
||||
|
||||
'Dim oListuids As New List(Of Long)
|
||||
'oListuids = _limilab.IMAPGetMessageIDs_AllMails()
|
||||
|
||||
'If IsNothing(oListuids) Then
|
||||
' Logger.Warn("List of UIDs was Nothing. Returning False.")
|
||||
' Return False
|
||||
'Else
|
||||
' If oListuids.Count > 0 Then
|
||||
' CURRENT_WORKMAIL_UID_LIST = oListuids
|
||||
' Logger.Info("FetchIMAPMessagesLimilab - Found [{0}] messages", oListuids.Count)
|
||||
' CURRENT_ImapObject = _limilab.CurrentImapObject
|
||||
' Else
|
||||
' Logger.Debug("FetchIMAPMessagesLimilab - No Emails found!")
|
||||
' End If
|
||||
|
||||
' Return True
|
||||
'End If
|
||||
|
||||
Catch ex As Exception
|
||||
Logger.Error(ex)
|
||||
Return False
|
||||
End Try
|
||||
End Function
|
||||
|
||||
''' <summary>
|
||||
''' Uses a private API from MailWriter to write a MailMessage to disk.
|
||||
''' May break in future versions of .NET
|
||||
|
||||
@@ -5,36 +5,40 @@ Imports Limilabs.Mail
|
||||
Imports Limilabs.Mail.MIME
|
||||
Imports Limilabs.Mail.Headers
|
||||
Imports DigitalData.Modules.Database
|
||||
Imports DigitalData.Modules.Messaging.Mail
|
||||
|
||||
Public Class clsWorker
|
||||
Private Shared Logger As Logger
|
||||
'Private _email As clsEmail
|
||||
Private ReadOnly _emailIMAP As clsEmailIMAP
|
||||
'Private _Database As clsDatabase
|
||||
Private ReadOnly _Database As MSSQLServer
|
||||
Private ReadOnly _USE_WM As Boolean = False
|
||||
Private ReadOnly _windream As clsWindream_allgemein
|
||||
Private ReadOnly _windream_index As clsWindream_Index
|
||||
Private ReadOnly _workmail As clsWorkEmail
|
||||
Private ReadOnly _wrapper As clsEncryption
|
||||
Private ReadOnly _POLL_PROFILEID As Integer = 0
|
||||
Private ReadOnly Eml_Limitation_Sender As String = ""
|
||||
Sub New(pLogConfig As LogConfig, ConStr As String, WMConStr As String, POLL_PROFILEID As Integer, USE_WM As Boolean, EmailAccountID As Integer, EmlProfPraefix As String, EML_LIMITATION As String, Optional plocaleml As String = "")
|
||||
Logger = pLogConfig.GetLogger
|
||||
_emailIMAP = New clsEmailIMAP(pLogConfig)
|
||||
_Database = New MSSQLServer(pLogConfig, ConStr)
|
||||
Private ReadOnly Logger As Logger
|
||||
Private ReadOnly Fetcher As MailFetcher
|
||||
Private ReadOnly Database As MSSQLServer
|
||||
Private ReadOnly UseWindream As Boolean = False
|
||||
Private ReadOnly ClassWindreamAllgemein As clsWindream_allgemein
|
||||
Private ReadOnly ClassWindreamIndex As clsWindream_Index
|
||||
Private ReadOnly ClassWorkMail As clsWorkEmail
|
||||
Private ReadOnly Encryption As clsEncryption
|
||||
Private ReadOnly ProfileId As Integer = 0D
|
||||
Private ReadOnly EmailLimitationSender As String = ""
|
||||
|
||||
_USE_WM = USE_WM
|
||||
Eml_Limitation_Sender = EML_LIMITATION
|
||||
If _USE_WM Then
|
||||
_windream = New clsWindream_allgemein(pLogConfig)
|
||||
_windream_index = New clsWindream_Index(pLogConfig)
|
||||
Sub New(pLogConfig As LogConfig, pConnectionString As String, pWindreamConnectionString As String, pPollProfileId As Integer, pUseWindream As Boolean, pEmailAccountID As Integer, pEmailPrefix As String, pEmailLimitationSender As String, Optional pLocalEML As String = "")
|
||||
Logger = pLogConfig.GetLogger
|
||||
'ClassEmailImap = New clsEmailIMAP(pLogConfig)
|
||||
Fetcher = New MailFetcher(pLogConfig)
|
||||
Database = New MSSQLServer(pLogConfig, pConnectionString)
|
||||
|
||||
UseWindream = pUseWindream
|
||||
EmailLimitationSender = pEmailLimitationSender
|
||||
|
||||
If UseWindream Then
|
||||
ClassWindreamAllgemein = New clsWindream_allgemein(pLogConfig)
|
||||
ClassWindreamIndex = New clsWindream_Index(pLogConfig)
|
||||
End If
|
||||
|
||||
_workmail = New clsWorkEmail(pLogConfig, ConStr, WMConStr, USE_WM, EmailAccountID, EmlProfPraefix)
|
||||
_wrapper = New clsEncryption("!35452didalog=", pLogConfig)
|
||||
_POLL_PROFILEID = POLL_PROFILEID
|
||||
CURRENT_DEBUG_LOCAL_EMAIL = plocaleml
|
||||
ClassWorkMail = New clsWorkEmail(pLogConfig, pConnectionString, pWindreamConnectionString, pUseWindream, pEmailAccountID, pEmailPrefix)
|
||||
|
||||
|
||||
Encryption = New clsEncryption("!35452didalog=", pLogConfig)
|
||||
ProfileId = pPollProfileId
|
||||
CURRENT_DEBUG_LOCAL_EMAIL = pLocalEML
|
||||
End Sub
|
||||
|
||||
Public Sub Start_WorkingProfiles(Optional LocalEmail As Boolean = False)
|
||||
@@ -53,10 +57,10 @@ Public Class clsWorker
|
||||
Next
|
||||
TEMP_FILES.Clear()
|
||||
|
||||
If _Database.DBInitialized = True Then
|
||||
If Database.DBInitialized = True Then
|
||||
Logger.Debug("now windream_init... ")
|
||||
If _USE_WM Then
|
||||
If _windream.Init = False Then
|
||||
If UseWindream Then
|
||||
If ClassWindreamAllgemein.Init = False Then
|
||||
Logger.Info("windream could not be initialized!!")
|
||||
Exit Sub
|
||||
Else
|
||||
@@ -64,13 +68,13 @@ Public Class clsWorker
|
||||
End If
|
||||
End If
|
||||
Dim osql As String = "SELECT * FROM TBEMLP_POLL_PROFILES"
|
||||
If _POLL_PROFILEID = 0 Then
|
||||
If ProfileId = 0 Then
|
||||
osql &= " WHERE ACTIVE = 1 order by SEQUENCE"
|
||||
Else
|
||||
osql &= " WHERE GUID = " & _POLL_PROFILEID
|
||||
osql &= " WHERE GUID = " & ProfileId
|
||||
End If
|
||||
Dim DT_TBDD_EMAIL As DataTable = _Database.GetDatatable("SELECT * FROM TBDD_EMAIL_ACCOUNT WHERE ACTIVE = 1")
|
||||
Dim DT_PROFILES = _Database.GetDatatable(osql)
|
||||
Dim DT_TBDD_EMAIL As DataTable = Database.GetDatatable("SELECT * FROM TBDD_EMAIL_ACCOUNT WHERE ACTIVE = 1")
|
||||
Dim DT_PROFILES = Database.GetDatatable(osql)
|
||||
If Not IsNothing(DT_PROFILES) Then
|
||||
If DT_PROFILES.Rows.Count > 0 Then
|
||||
Logger.Debug("count of active profiles: " & DT_PROFILES.Rows.Count.ToString)
|
||||
@@ -78,14 +82,14 @@ Public Class clsWorker
|
||||
CURRENT_PROFILE_GUID = oDR_Profile.Item("GUID")
|
||||
DT_POLL_PROCESS = Nothing
|
||||
Dim sql = String.Format("SELECT * FROM TBEMLP_POLL_PROCESS WHERE PROFILE_ID = {0} AND ACTIVE = 1", CURRENT_PROFILE_GUID)
|
||||
DT_POLL_PROCESS = _Database.GetDatatable(sql)
|
||||
DT_POLL_PROCESS = Database.GetDatatable(sql)
|
||||
If Not IsNothing(DT_POLL_PROCESS) Then
|
||||
If DT_POLL_PROCESS.Rows.Count = 0 Then
|
||||
Logger.Info("No processes configured for this Email-Profile - " & sql)
|
||||
Continue For
|
||||
Else
|
||||
DT_STEPS = Nothing
|
||||
DT_STEPS = _Database.GetDatatable(String.Format("SELECT T.* FROM TBEMLP_POLL_STEPS T,TBEMLP_POLL_PROCESS T1 WHERE T.PROCESS_ID = T1.GUID AND T1.PROFILE_ID = {0} AND T1.ACTIVE = 1", CURRENT_PROFILE_GUID))
|
||||
DT_STEPS = Database.GetDatatable(String.Format("SELECT T.* FROM TBEMLP_POLL_STEPS T,TBEMLP_POLL_PROCESS T1 WHERE T.PROCESS_ID = T1.GUID AND T1.PROFILE_ID = {0} AND T1.ACTIVE = 1", CURRENT_PROFILE_GUID))
|
||||
|
||||
End If
|
||||
Else
|
||||
@@ -123,7 +127,7 @@ Public Class clsWorker
|
||||
MAIL_AUTHTYPE = row("AUTH_TYPE")
|
||||
Logger.Debug(String.Format("{0}-{1}", MAIL_FROM, MAIL_SERVER))
|
||||
|
||||
Dim PWPlain = _wrapper.DecryptData(MAIL_USER_PW)
|
||||
Dim PWPlain = Encryption.DecryptData(MAIL_USER_PW)
|
||||
If Not IsNothing(PWPlain) Then
|
||||
If PWPlain <> "" Then
|
||||
MAIL_USER_PW = PWPlain
|
||||
@@ -138,15 +142,17 @@ Public Class clsWorker
|
||||
CURRENT_WORKMAIL_UID_LIST.Clear()
|
||||
|
||||
If MAIL_SERVER <> "" Then
|
||||
Dim pollresult As Boolean = False
|
||||
Dim oPollResult As Boolean = False
|
||||
If LocalEmail = True Then
|
||||
pollresult = True
|
||||
oPollResult = True
|
||||
Else
|
||||
Select Case CURRENT_POLL_TYPE
|
||||
Case "POP"
|
||||
'pollresult = _email.POP3_COLLECT()
|
||||
Case "IMAP"
|
||||
pollresult = _emailIMAP.FetchIMAPMessagesLimilab(MAIL_SERVER, MAIL_PORT, MAIL_USER, MAIL_USER_PW, MAIL_AUTHTYPE)
|
||||
oPollResult = FetchMessages(MAIL_SERVER, MAIL_PORT, MAIL_USER, MAIL_USER_PW, MAIL_AUTHTYPE)
|
||||
|
||||
Case Else
|
||||
Logger.Error("Poll Type [{0}] is not supported!", CURRENT_POLL_TYPE)
|
||||
oPollResult = False
|
||||
End Select
|
||||
End If
|
||||
|
||||
@@ -154,24 +160,23 @@ Public Class clsWorker
|
||||
If LocalEmail Then
|
||||
Logger.Info("Working with local Mail")
|
||||
Dim oEmail As IMail = New MailBuilder().CreateFromEmlFile(CURRENT_DEBUG_LOCAL_EMAIL)
|
||||
_workmail.WorkEmailMessage(oEmail, 123456789)
|
||||
ClassWorkMail.WorkEmailMessage(oEmail, 123456789)
|
||||
CURRENT_MAIL_MESSAGE = Nothing
|
||||
Else
|
||||
Try
|
||||
Logger.Info(String.Format("Pulled: [{0}] E-Mails", CURRENT_WORKMAIL_UID_LIST.Count()))
|
||||
Dim LIMIT_EMAIL_FROM As Boolean = False
|
||||
If Eml_Limitation_Sender.Contains("@") Then
|
||||
If EmailLimitationSender.Contains("@") Then
|
||||
LIMIT_EMAIL_FROM = True
|
||||
Logger.Info("####################################")
|
||||
Logger.Info($"LIMIT_EMAIL_FROM is ACTIVE - EMAIL_FROM = [{Eml_Limitation_Sender}]")
|
||||
Logger.Info($"LIMIT_EMAIL_FROM is ACTIVE - EMAIL_FROM = [{EmailLimitationSender}]")
|
||||
Logger.Info("####################################")
|
||||
Logger.Debug("####################################")
|
||||
Logger.Debug($"LIMIT_EMAIL_FROM is ACTIVE - EMAIL_FROM = [{Eml_Limitation_Sender}]")
|
||||
Logger.Debug($"LIMIT_EMAIL_FROM is ACTIVE - EMAIL_FROM = [{EmailLimitationSender}]")
|
||||
Logger.Debug("####################################")
|
||||
End If
|
||||
For Each oUID In CURRENT_WORKMAIL_UID_LIST
|
||||
Dim oEml = CURRENT_ImapObject.GetMessageByUID(oUID)
|
||||
Dim oEmail As IMail = New MailBuilder().CreateFromEml(oEml)
|
||||
Dim oEmail As IMail = Fetcher.FetchMail(oUID)
|
||||
|
||||
If Not IsNothing(oEmail) Then
|
||||
If LIMIT_EMAIL_FROM Then
|
||||
@@ -179,12 +184,12 @@ Public Class clsWorker
|
||||
For Each m As MailBox In oEmail.From
|
||||
oEmailFrom = m.Address
|
||||
Next
|
||||
If oEmailFrom <> Eml_Limitation_Sender Then
|
||||
If oEmailFrom <> EmailLimitationSender Then
|
||||
Logger.Debug($"Skipping email {oEmailFrom} ...Subject [{oEmail.Subject}]")
|
||||
Continue For
|
||||
End If
|
||||
End If
|
||||
If _workmail.WorkEmailMessage(oEmail, oUID) = True Then
|
||||
If ClassWorkMail.WorkEmailMessage(oEmail, oUID) = True Then
|
||||
If CURRENT_DEBUG_LOCAL_EMAIL = "" Then
|
||||
EMAIL_DELETE()
|
||||
End If
|
||||
@@ -197,8 +202,8 @@ Public Class clsWorker
|
||||
CURRENT_MAIL_MESSAGE = Nothing
|
||||
Next
|
||||
If CURRENT_POLL_TYPE = "IMAP" And CURRENT_WORKMAIL_UID_LIST.Count > 0 Then
|
||||
If Not IsNothing(CURRENT_ImapObject) Then
|
||||
CURRENT_ImapObject.Close()
|
||||
If Not IsNothing(Fetcher.Client) Then
|
||||
Fetcher.Client.Close()
|
||||
End If
|
||||
End If
|
||||
|
||||
@@ -216,7 +221,7 @@ Public Class clsWorker
|
||||
Logger.Warn("For the Email-Profile ID " & CURRENT_EMAIL_GUID & " no record could be found!")
|
||||
End If
|
||||
|
||||
_Database.ExecuteNonQuery("UPDATE TBEMLP_POLL_PROFILES SET LAST_TICK = GETDATE() WHERE GUID = " & oDR_Profile.Item("GUID").ToString)
|
||||
Database.ExecuteNonQuery("UPDATE TBEMLP_POLL_PROFILES SET LAST_TICK = GETDATE() WHERE GUID = " & oDR_Profile.Item("GUID").ToString)
|
||||
Else
|
||||
Logger.Warn("For the Email-Profile ID " & CURRENT_EMAIL_GUID & " no record could be found! Check wether Email-Profile is active!")
|
||||
End If
|
||||
@@ -245,24 +250,66 @@ Public Class clsWorker
|
||||
End If
|
||||
End If
|
||||
|
||||
_Database.ExecuteNonQuery("UPDATE TBEMLP_CONFIG SET LAST_TICK = GETDATE() WHERE GUID = 1")
|
||||
Database.ExecuteNonQuery("UPDATE TBEMLP_CONFIG SET LAST_TICK = GETDATE() WHERE GUID = 1")
|
||||
End If
|
||||
Catch ex As Exception
|
||||
Logger.Error(ex)
|
||||
End Try
|
||||
End Sub
|
||||
Private Function EMAIL_DELETE()
|
||||
If DeleteMail = True And MessageError = False Then
|
||||
If Not IsNothing(CURRENT_ImapObject) Then
|
||||
CURRENT_ImapObject.DeleteMessageByUID(CURRENT_MAIL_UID)
|
||||
Else
|
||||
Logger.Warn("EMAIL_DELETE - CURRENT_ImapObject is nothing")
|
||||
|
||||
Public Function FetchMessages(Server As String, Port As Integer, Username As String, Password As String, AuthType As String) As Boolean
|
||||
Try
|
||||
Dim oSession = Fetcher.Connect(Server, Port, Username, Password, AuthType)
|
||||
|
||||
|
||||
If oSession.Connected = False AndAlso oSession.Error IsNot Nothing Then
|
||||
Logger.Warn("Connection to Mail Server failed!")
|
||||
Logger.Error(oSession.Error)
|
||||
Return False
|
||||
|
||||
ElseIf oSession.Connected = False Then
|
||||
Logger.Warn("Connection to Mail Server failed!")
|
||||
Return False
|
||||
End If
|
||||
|
||||
Else
|
||||
If MessageError = True Then
|
||||
Logger.Warn($"Did not delete Message with UID [{CURRENT_MAIL_UID}] as there was an MessageError!")
|
||||
CURRENT_ImapObject = Fetcher.Client
|
||||
Dim oMailIds As List(Of Long) = Fetcher.ListAllMails()
|
||||
|
||||
If oMailIds Is Nothing Then
|
||||
Logger.Warn("List of UIDs was Nothing. Exiting.")
|
||||
Return False
|
||||
End If
|
||||
End If
|
||||
|
||||
If oMailIds.Count = 0 Then
|
||||
Logger.Debug("No Emails found.")
|
||||
Return True
|
||||
End If
|
||||
|
||||
CURRENT_WORKMAIL_UID_LIST = oMailIds
|
||||
|
||||
Return True
|
||||
|
||||
Catch ex As Exception
|
||||
Logger.Error(ex)
|
||||
Return False
|
||||
End Try
|
||||
End Function
|
||||
Private Sub EMAIL_DELETE()
|
||||
Try
|
||||
If DeleteMail = True And MessageError = False Then
|
||||
If IsNothing(Fetcher.Client) Then
|
||||
Logger.Warn("EMAIL_DELETE - CURRENT_ImapObject is nothing")
|
||||
End If
|
||||
|
||||
Fetcher.Client.DeleteMessageByUID(CURRENT_MAIL_UID)
|
||||
Logger.Info("Email with Id [{0}] was deleted.", CURRENT_MAIL_UID)
|
||||
Else
|
||||
If MessageError = True Then
|
||||
Logger.Warn("Did not delete Message with UID [{0}] as there was an MessageError!", CURRENT_MAIL_UID)
|
||||
End If
|
||||
End If
|
||||
Catch ex As Exception
|
||||
Logger.Error(ex)
|
||||
End Try
|
||||
End Sub
|
||||
End Class
|
||||
|
||||
Reference in New Issue
Block a user