238 lines
13 KiB
VB.net
238 lines
13 KiB
VB.net
Imports DigitalData.EMLProfiler.ClassCurrent
|
|
Imports Independentsoft.Email.Mime
|
|
Imports DigitalData.Modules.Logging
|
|
Imports DigitalData.Modules.Messaging
|
|
Imports Limilabs.Mail
|
|
Imports Limilabs.Mail.MIME
|
|
Imports Limilabs.Mail.Headers
|
|
Public Class clsWorker
|
|
Private Shared Logger As Logger
|
|
Private MyLogger As LogConfig
|
|
'Private _email As clsEmail
|
|
Private _emailIMAP As clsEmailIMAP
|
|
Private _Database As clsDatabase
|
|
Private _USE_WM As Boolean = False
|
|
Private _windream As clsWindream_allgemein
|
|
Private _windream_index As clsWindream_Index
|
|
Private _workmail As clsWorkEmail
|
|
Private _wrapper As clsEncryption
|
|
Private _POLL_PROFILEID As Integer = 0
|
|
Private _limilab As DigitalData.Modules.Messaging.Limilab
|
|
Dim cs As String
|
|
Sub New(LogConf As LogConfig, ConStr As String, POLL_PROFILEID As Integer, FB_DATASOURCE As String, FB_DATABASE As String, FB_USER As String, FB_PW As String, USE_WM As Boolean, EmailAccountID As Integer, Optional plocaleml As String = "")
|
|
Logger = LogConf.GetLogger
|
|
_limilab = New Limilab(LogConf)
|
|
' _email = New clsEmail(LogConf)
|
|
_emailIMAP = New clsEmailIMAP(LogConf, ConStr)
|
|
_Database = New clsDatabase(LogConf, ConStr)
|
|
cs = ConStr
|
|
_USE_WM = USE_WM
|
|
If _USE_WM Then
|
|
_windream = New clsWindream_allgemein(LogConf)
|
|
_windream_index = New clsWindream_Index(LogConf)
|
|
End If
|
|
|
|
_workmail = New clsWorkEmail(LogConf, ConStr, FB_DATASOURCE, FB_DATABASE, FB_USER, FB_PW, USE_WM, EmailAccountID)
|
|
_wrapper = New clsEncryption("!35452didalog=", LogConf)
|
|
_POLL_PROFILEID = POLL_PROFILEID
|
|
ClassCurrent.CURRENT_DEBUG_LOCAL_EMAIL = plocaleml
|
|
End Sub
|
|
|
|
Public Sub Debug_Local_Email()
|
|
Try
|
|
|
|
Catch ex As Exception
|
|
|
|
End Try
|
|
End Sub
|
|
|
|
Public Sub Start_WorkingProfiles(Optional LocalEmail As Boolean = False)
|
|
Try
|
|
TEMP_FILES.Clear()
|
|
|
|
If _Database.Init(cs) = True Then
|
|
Logger.Debug("now windream_init... ")
|
|
If _USE_WM Then
|
|
If _windream.Init = False Then
|
|
Logger.Info("windream could not be initialized!!")
|
|
Exit Sub
|
|
Else
|
|
Logger.Debug("windream_initialized!")
|
|
End If
|
|
End If
|
|
Dim osql As String = "SELECT * FROM TBEMLP_POLL_PROFILES"
|
|
If _POLL_PROFILEID = 0 Then
|
|
osql &= " WHERE ACTIVE = 1 order by SEQUENCE"
|
|
Else
|
|
osql &= " WHERE GUID = " & _POLL_PROFILEID
|
|
End If
|
|
Dim DT_TBDD_EMAIL As DataTable = _Database.Return_Datatable("SELECT * FROM TBDD_EMAIL_ACCOUNT WHERE ACTIVE = 1")
|
|
Dim DT_PROFILES = _Database.Return_Datatable(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)
|
|
For Each oDR_Profile As DataRow In DT_PROFILES.Rows
|
|
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.Return_Datatable(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.Return_Datatable(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
|
|
Logger.Warn("DT_POLL_PROCESS is nothing")
|
|
Continue For
|
|
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))
|
|
CURRENT_EMAIL_GUID = oDR_Profile.Item("EMAIL_CONF_ID")
|
|
|
|
Dim EMAIL_PROF_TABLE As DataTable = DT_TBDD_EMAIL
|
|
'Presuming the DataTable has a column named Date.
|
|
Dim expression As String
|
|
expression = "GUID = " & CURRENT_EMAIL_GUID
|
|
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")
|
|
Logger.Debug(String.Format("{0}-{1}", MAIL_FROM, MAIL_SERVER))
|
|
|
|
Dim PWPlain = _wrapper.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
|
|
Else
|
|
Logger.Warn("PWPlain is nothing - Could not decrypt passwort")
|
|
End If
|
|
|
|
Next
|
|
CURRENT_WORKMAIL_LIST.Clear()
|
|
|
|
If MAIL_SERVER <> "" Then
|
|
Dim pollresult As Boolean = False
|
|
If LocalEmail = True Then
|
|
pollresult = True
|
|
Dim oEmail As IMail = New MailBuilder().CreateFromEmlFile(CURRENT_DEBUG_LOCAL_EMAIL)
|
|
Dim oMessage As New Message(CURRENT_DEBUG_LOCAL_EMAIL)
|
|
CURRENT_WORKMAIL_LIST.Add(oMessage)
|
|
CURRENT_WORKMAIL_LIST.Add(oEmail)
|
|
Else
|
|
Select Case CURRENT_POLL_TYPE
|
|
Case "POP"
|
|
'pollresult = _email.POP3_COLLECT()
|
|
Case "IMAP"
|
|
'pollresult = _emailIMAP.IMAP_COLLECT()
|
|
'pollresult = _emailIMAP.FetchIMAPMessagesIsoft(MAIL_SERVER, MAIL_PORT, MAIL_USER, MAIL_USER_PW, MAIL_INBOX_NAME, MAIL_ARCHIVE_FOLDER)
|
|
pollresult = _emailIMAP.FetchIMAPMessagesS22(MAIL_SERVER, MAIL_PORT, MAIL_USER, MAIL_USER_PW, MAIL_INBOX_NAME)
|
|
End Select
|
|
End If
|
|
|
|
'If pollresult = False Then
|
|
' Logger.Info(String.Format("Error while polling emails...Trying S22...."))
|
|
' pollresult = _emailIMAP.FetchIMAPMessages(MAIL_SERVER, MAIL_PORT, MAIL_USER, MAIL_USER_PW, MAIL_INBOX_NAME)
|
|
' If pollresult = False Then
|
|
' Logger.Warn(String.Format("FetchIMAPMessagesS22 - also returned error!"))
|
|
' End If
|
|
'End If
|
|
If CURRENT_WORKMAIL_LIST.Count() > 0 Then
|
|
Logger.Info(String.Format("Worked/Pulled: [{0}] E-Mails", CURRENT_WORKMAIL_LIST.Count()))
|
|
Try
|
|
'For Each pulled_msg As Message In CURRENT_WORKMAIL_LIST
|
|
' _workmail.WorkEmailMessage(pulled_msg)
|
|
' CURRENT_MAIL_MESSAGE = Nothing
|
|
'Next
|
|
For Each pulled_msg As IMail In CURRENT_WORKMAIL_LIST
|
|
_workmail.WorkEmailMessage(pulled_msg)
|
|
CURRENT_MAIL_MESSAGE = Nothing
|
|
Next
|
|
Catch ex As Exception
|
|
Logger.Error(ex)
|
|
Logger.Warn($"Error converting CURRENT_WORKMAIL_LIST to IsoftMesage: {ex.Message} ")
|
|
End Try
|
|
|
|
Else
|
|
Logger.Debug(String.Format("No emails for profile!"))
|
|
End If
|
|
Else
|
|
Logger.Warn("For the Email-Profile ID " & CURRENT_EMAIL_GUID & " no record could be found!")
|
|
End If
|
|
|
|
_Database.Execute_non_Query("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
|
|
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
|
|
'Try
|
|
' Dim oDiTempPath As New IO.DirectoryInfo(System.IO.Path.GetTempPath)
|
|
' Dim oaryFi As IO.FileInfo() = oDiTempPath.GetFiles()
|
|
' Dim ofi As IO.FileInfo
|
|
|
|
' For Each fi In oaryFi
|
|
' Try
|
|
' fi.Delete()
|
|
' Catch ex As Exception
|
|
' Logger.Warn($"TempFileDelete2 - Could not delete the tempfile: {ex.Message}")
|
|
' End Try
|
|
|
|
' Next
|
|
'Catch ex As Exception
|
|
' Logger.Warn($"TempFileDelete3 - Could not delete the tempfile: {ex.Message}")
|
|
'End Try
|
|
|
|
|
|
Catch ex As Exception
|
|
Logger.Warn($"TempFileDelete(X) - Could not delete the tempfile from TEMP_FILES: {ex.Message}")
|
|
End Try
|
|
|
|
Else
|
|
Logger.Info("No active profiles")
|
|
End If
|
|
End If
|
|
|
|
_Database.Execute_non_Query("UPDATE TBEMLP_CONFIG SET LAST_TICK = GETDATE() WHERE GUID = 1")
|
|
End If
|
|
Catch ex As Exception
|
|
Logger.Error(ex)
|
|
End Try
|
|
End Sub
|
|
End Class
|