278 lines
12 KiB
VB.net
278 lines
12 KiB
VB.net
Imports Independentsoft.Email
|
|
Imports Independentsoft.Email.Pop3
|
|
Imports Independentsoft.Email.Smtp
|
|
Imports Independentsoft.Email.Mime
|
|
Imports Independentsoft.Email.Imap
|
|
Imports DigitalData.EMLProfiler.ClassCurrent
|
|
Imports DigitalData.Modules.Logging
|
|
|
|
|
|
Public Class clsEmail
|
|
Private Shared Logger As DigitalData.Modules.Logging.Logger
|
|
Public Shared EMAIL_INBOX_LIST As New ArrayList()
|
|
Sub New(LogConf As LogConfig)
|
|
Logger = LogConf.GetLogger
|
|
End Sub
|
|
Private Shared Sub OnWriteLog(ByVal sender As Object, ByVal e As WriteLogEventArgs)
|
|
Logger.Info(e.Log)
|
|
End Sub
|
|
Public Function POP3_COLLECT() As Boolean
|
|
Try
|
|
Logger.Debug(String.Format("Working on POP3_COLLECT....."))
|
|
Dim oClient As New Pop3Client(MAIL_SERVER, MAIL_PORT)
|
|
|
|
oClient.ValidateRemoteCertificate = False
|
|
oClient.Connect()
|
|
Logger.Debug(String.Format("..connected!"))
|
|
oClient.Login(MAIL_USER, MAIL_USER_PW)
|
|
|
|
Dim oMessageInfo As MessageInfo() = oClient.List()
|
|
Dim oCOUNT As Integer = 0
|
|
For i As Integer = 0 To oMessageInfo.Length - 1
|
|
|
|
Dim oMessage As Message = oClient.GetMessage(oMessageInfo(i).Index)
|
|
Dim oMsgId_AlreadyExists As Boolean = False
|
|
For Each pulled_msg As Message In MAIL_LIST
|
|
If pulled_msg.MessageID = oMessage.MessageID Then
|
|
oMsgId_AlreadyExists = True
|
|
End If
|
|
Next
|
|
If oMsgId_AlreadyExists = False Then
|
|
oCOUNT += 1
|
|
MAIL_LIST.Add(oMessage)
|
|
Logger.Debug(String.Format("Message [{0}] added to working Mail_List", oMessage.Subject))
|
|
End If
|
|
|
|
|
|
'client.Delete(messageInfo(i).Index)
|
|
Next
|
|
Logger.Debug($"{oCOUNT.ToString} messages will be worked..")
|
|
oClient.Disconnect()
|
|
Logger.Debug(String.Format("POP3_COLLECT finished!"))
|
|
Return True
|
|
Catch ex As Exception
|
|
Logger.Error(ex)
|
|
' clsLogger.Add("Unexpected Error in POP3_COLLECT: " & ex.Message)
|
|
EventLog.WriteEntry("DD EmailProfiler", "Unexpected Error in POP3_COLLECT: " & ex.Message(), EventLogEntryType.Error)
|
|
Return False
|
|
End Try
|
|
End Function
|
|
Public Function TEST_POP3_COLLECT(MYMAIL_SERVER As String, MYMAIL_PORT As Integer, MYMAIL_USER As String, MYMAIL_USER_PW As String) As Boolean
|
|
Try
|
|
Logger.Debug(String.Format("Working on TEST_POP3_COLLECT..."))
|
|
Dim oPop3Client As New Pop3Client(MYMAIL_SERVER, MYMAIL_PORT)
|
|
Dim oLogPath = System.IO.Path.Combine(My.Application.Info.DirectoryPath, "Log\logindependentSoft.txt")
|
|
Logger.Debug($"IsoftLog: {oLogPath}...")
|
|
Dim oindependentLogger As New Independentsoft.Email.Logger(oLogPath)
|
|
' oPop3Client.ValidateRemoteCertificate = False
|
|
oPop3Client.Logger = oindependentLogger
|
|
oPop3Client.Connect()
|
|
Logger.Debug(String.Format("..connected!"))
|
|
oPop3Client.Login(MYMAIL_USER, MYMAIL_USER_PW)
|
|
|
|
Dim messageInfo As MessageInfo() = oPop3Client.List()
|
|
|
|
For i As Integer = 0 To messageInfo.Length - 1
|
|
Dim message As Message = oPop3Client.GetMessage(messageInfo(i).Index)
|
|
MsgBox($"Message-subject: {message.Subject}, Message unique ID = {messageInfo(i).UniqueID} added", )
|
|
Next
|
|
|
|
oPop3Client.Disconnect()
|
|
MsgBox(String.Format("TEST_POP3_COLLECT finished!"))
|
|
Return True
|
|
Catch ex As Exception
|
|
Logger.Error(ex)
|
|
|
|
Return False
|
|
End Try
|
|
End Function
|
|
Public Function DELETE_EMAIL(msgid As String)
|
|
Try
|
|
If CURRENT_POLL_TYPE = "POP" Then
|
|
Dim client As New Pop3Client(MAIL_SERVER, MAIL_PORT)
|
|
client.ValidateRemoteCertificate = False
|
|
client.Connect()
|
|
client.Login(MAIL_USER, MAIL_USER_PW)
|
|
|
|
Dim messageInfo As MessageInfo() = client.List()
|
|
|
|
For i As Integer = 0 To messageInfo.Length - 1
|
|
Dim message As Message = client.GetMessage(messageInfo(i).Index)
|
|
If message.MessageID = msgid Then
|
|
client.Delete(messageInfo(i).Index)
|
|
Logger.Info(String.Format("Message [{0}] was deleted!", message.Subject))
|
|
Exit For
|
|
End If
|
|
Next
|
|
client.Disconnect()
|
|
Return True
|
|
ElseIf CURRENT_POLL_TYPE = "IMAP" Then
|
|
Try
|
|
Dim oClient As New ImapClient(MAIL_SERVER, MAIL_PORT)
|
|
|
|
oClient.ValidateRemoteCertificate = False
|
|
oClient.Connect()
|
|
oClient.Login(MAIL_USER, MAIL_USER_PW)
|
|
|
|
oClient.SelectFolder("Inbox")
|
|
Dim oEnvelopes As Envelope() = oClient.ListMessages()
|
|
For i As Integer = 0 To oEnvelopes.Length - 1
|
|
If oEnvelopes(i).MessageID = msgid Then
|
|
oClient.Delete(oEnvelopes(i).UniqueID) 'mark as deleted
|
|
End If
|
|
Next
|
|
oClient.Expunge() 'delete messages marked as deleted
|
|
oClient.Disconnect()
|
|
Return True
|
|
Catch ex As Exception
|
|
Logger.Warn("Error in IMAP Delete: " & ex.Message)
|
|
Return False
|
|
End Try
|
|
|
|
Else
|
|
Return False
|
|
End If
|
|
Catch ex As Exception
|
|
Logger.Error(ex)
|
|
'clsLogger.Add("Unexpected Error in DELETE_EMAIL: " & ex.Message)
|
|
Return False
|
|
End Try
|
|
End Function
|
|
Public Function Email_Send_Independentsoft(ByVal mailSubject As String, ByVal mailBody As String, mailto As String,
|
|
mailfrom As String, mailsmtp As String, mailport As Integer, mailUser As String, mailPW As String,
|
|
AUTH_TYPE As String, Optional attment As String = "")
|
|
Try
|
|
Logger.Debug($"in Email_Send_Independentsoft..")
|
|
Dim empfaenger As String()
|
|
If mailto.Contains(";") Then
|
|
empfaenger = mailto.Split(";")
|
|
Else
|
|
ReDim Preserve empfaenger(0)
|
|
empfaenger(0) = mailto
|
|
End If
|
|
Dim _error As Boolean = False
|
|
'Für jeden Empfänger eine Neue Mail erzeugen
|
|
For Each _mailempfaenger As String In empfaenger
|
|
Logger.Debug($"Working on email for {_mailempfaenger}..")
|
|
Try
|
|
Dim message As New Message()
|
|
message.From = New Mailbox(mailfrom, mailfrom)
|
|
message.[To].Add(New Mailbox(_mailempfaenger))
|
|
message.Subject = mailSubject
|
|
Logger.Debug($"Message created..")
|
|
Dim textBodyPart As New BodyPart()
|
|
textBodyPart.ContentType = New ContentType("text", "html", "utf-8")
|
|
textBodyPart.ContentTransferEncoding = ContentTransferEncoding.QuotedPrintable
|
|
textBodyPart.Body = mailBody
|
|
message.BodyParts.Add(textBodyPart)
|
|
If attment <> String.Empty Then
|
|
If System.IO.File.Exists(attment) Then
|
|
Dim attachment1 As New Attachment(attment)
|
|
If attment.ToLower.EndsWith("pdf") Then
|
|
attachment1.ContentType = New ContentType("application", "pdf")
|
|
ElseIf attment.ToLower.EndsWith("jpg") Then
|
|
attachment1.ContentType = New ContentType("application", "jpg")
|
|
ElseIf attment.ToLower.EndsWith("docx") Then
|
|
attachment1.ContentType = New ContentType("application", "MS-word")
|
|
End If
|
|
message.BodyParts.Add(attachment1)
|
|
Else
|
|
Logger.Warn($"Attachment {attment.ToString} is not existing!")
|
|
End If
|
|
End If
|
|
Dim client As SmtpClient
|
|
Try
|
|
client = New SmtpClient(mailsmtp, mailport)
|
|
Catch ex As Exception
|
|
Logger.Warn("clsEmail.Create Client: " & ex.Message)
|
|
_error = True
|
|
Continue For
|
|
End Try
|
|
Try
|
|
client.Connect()
|
|
Catch ex As Exception
|
|
Logger.Warn("clsEmail.Client.Connect1: " & ex.Message)
|
|
Logger.Debug("Error in ClientConnect - but still trying to send")
|
|
_error = True
|
|
' Continue For
|
|
End Try
|
|
Logger.Debug("Connected to Client!")
|
|
If AUTH_TYPE = "SSL" Then
|
|
client.EnableSsl = True
|
|
'client.ValidateRemoteCertificate = True
|
|
Logger.Debug("Authentification via SSL.")
|
|
ElseIf AUTH_TYPE = "TLS" Then
|
|
' client.ValidateRemoteCertificate = False
|
|
client.StartTls()
|
|
client.EnableSsl = False
|
|
Logger.Debug("Authentification via TLS. SSL disabled")
|
|
Else
|
|
client.EnableSsl = False
|
|
Logger.Debug("Authentification NONE. SSL disabled")
|
|
End If
|
|
Try
|
|
|
|
client.Connect()
|
|
Catch ex As Exception
|
|
Logger.Warn("clsEmail.Client.Connect: " & ex.Message)
|
|
_error = True
|
|
' Continue For
|
|
End Try
|
|
Try
|
|
If mailsmtp.Contains("office365.com") Then
|
|
client.Login(mailUser, mailPW, AuthenticationType.None)
|
|
Else
|
|
client.Login(mailUser, mailPW)
|
|
End If
|
|
|
|
Logger.Debug("Logged in!")
|
|
Catch ex As Exception
|
|
Try
|
|
If mailsmtp.Contains("office365.com") Then
|
|
client.Login(mailUser, mailPW, AuthenticationType.Login)
|
|
Else
|
|
client.Login(mailUser, mailPW, AuthenticationType.Anonymous)
|
|
End If
|
|
|
|
Catch ex1 As Exception
|
|
Try
|
|
client.Login(mailUser, mailPW, AuthenticationType.Login)
|
|
Catch ex2 As Exception
|
|
Logger.Warn("clsEmail.Client.Login: " & ex.Message)
|
|
_error = True
|
|
client.Disconnect()
|
|
Continue For
|
|
End Try
|
|
End Try
|
|
End Try
|
|
Try
|
|
client.Send(message)
|
|
Logger.Info("Message to " & _mailempfaenger & " has been send.")
|
|
_error = False
|
|
Catch ex As Exception
|
|
Logger.Warn("clsEmail.Client.Send: " & ex.Message)
|
|
_error = True
|
|
client.Disconnect()
|
|
Continue For
|
|
End Try
|
|
client.Disconnect()
|
|
|
|
Catch ex As Exception
|
|
Logger.Error(ex)
|
|
_error = True
|
|
End Try
|
|
Next
|
|
|
|
If _error = True Then
|
|
Return False
|
|
Else
|
|
Return True
|
|
End If
|
|
Catch ex As Exception
|
|
Logger.Error(ex)
|
|
Return False
|
|
End Try
|
|
End Function
|
|
|
|
End Class
|