Digital Data - Marlon Schreiber 18ae60e75d MS send
2019-05-10 14:45:24 +02:00

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