Imports Independentsoft.Email
Imports Independentsoft.Email.Pop3
Imports Independentsoft.Email.Smtp
Imports Independentsoft.Email.Mime
Imports Independentsoft.Email.Imap
Imports DigitalData.Modules.Logging
Imports System.Net.Mail
Imports System.Net
Public Class Email
Private _logger As Logging.Logger
Private _logConfig As LogConfig
Public Sub New(LogConfig As LogConfig)
_logger = LogConfig.GetLogger()
_logConfig = LogConfig
End Sub
Public Function IMAP_COLLECT(INBOXNAME As String, MYMAIL_SERVER As String, MYMAIL_PORT As Integer, MYMAIL_USER As String, MYMAIL_USER_PW As String)
Try
Dim oMAIL_LIST As New ArrayList()
_logger.Info(String.Format("Working on IMAP_COLLECT..."))
Dim oClient As New ImapClient(MYMAIL_SERVER, MYMAIL_PORT)
oClient.Connect()
oClient.Login(MYMAIL_USER, MYMAIL_USER_PW)
oClient.SelectFolder("Inbox")
Dim oEnvelopes As Envelope() = oClient.ListMessages()
For i As Integer = 0 To oEnvelopes.Length - 1
If Not IsNothing(oEnvelopes(i).Subject) Then
'If envelopes(i).Subject.ToString.ToUpper.Contains("[PROCESSMANAGER]") Or envelopes(i).Subject.ToString.ToUpper.Contains("[ADDI]") Then
_logger.Info($"Working on email: UniqueID: {oEnvelopes(i).UniqueID} - Subject:{oEnvelopes(i).Subject} - Date {oEnvelopes(i).Date.ToString}")
Dim message As Mime.Message = oClient.GetMessage(oEnvelopes(i).UniqueID)
If Not IsNothing(message) Then
oMAIL_LIST.Add(message)
End If
'End If
End If
Next
oClient.Disconnect()
_logger.Debug("IMAP_COLLECT finished!")
Return oMAIL_LIST
Catch ex As Exception
_logger.Error(ex, "Unexpected Error in IMAP COLLECT:")
Return Nothing
End Try
End Function
Public Function TEST_IMAP_COLLECT(INBOXNAME As String, MYMAIL_SERVER As String, MYMAIL_PORT As Integer, MYMAIL_USER As String, MYMAIL_USER_PW As String)
Try
_logger.Info(String.Format("Working on TEST_IMAP_COLLECT....."))
Dim oClient As New ImapClient(MYMAIL_SERVER, MYMAIL_PORT)
oClient.Connect()
oClient.Login(MYMAIL_USER, MYMAIL_USER_PW)
oClient.SelectFolder(INBOXNAME)
Dim oEnvelopes As Envelope() = oClient.ListMessages()
For i As Integer = 0 To oEnvelopes.Length - 1
If Not IsNothing(oEnvelopes(i).Subject) Then
'If envelopes(i).Subject.ToString.ToUpper.Contains("[PROCESSMANAGER]") Or envelopes(i).Subject.ToString.ToUpper.Contains("[ADDI]") Then
MsgBox($"Working on email: UniqueID: {oEnvelopes(i).UniqueID} - Subject:{oEnvelopes(i).Subject} - Date {oEnvelopes(i).Date.ToString}")
Dim message As Mime.Message = oClient.GetMessage(oEnvelopes(i).UniqueID)
End If
Next
oClient.Disconnect()
_logger.Info("TEST_IMAP_COLLECT finished!")
Return True
Catch ex As Exception
_logger.Error(ex, "Unexpected Error in TEST_IMAP_COLLECT:")
Return False
End Try
End Function
Public Function POP3_COLLECT(MYMAIL_SERVER As String, MYMAIL_PORT As Integer, MYMAIL_USER As String, MYMAIL_USER_PW As String)
Try
Dim oMAIL_LIST As New ArrayList()
_logger.Debug(String.Format("Working on POP3_COLLECT....."))
Dim oClient As New Pop3Client(MYMAIL_SERVER, MYMAIL_PORT)
oClient.ValidateRemoteCertificate = False
oClient.Connect()
_logger.Debug(String.Format("..connected!"))
oClient.Login(MYMAIL_USER, MYMAIL_USER_PW)
Dim oMessageInfo As MessageInfo() = oClient.List()
For i As Integer = 0 To oMessageInfo.Length - 1
Dim message As Message = oClient.GetMessage(oMessageInfo(i).Index)
oMAIL_LIST.Add(message)
Try
_logger.Debug(String.Format("Message [{0}] added", message.Subject))
Catch ex As Exception
End Try
Next
oClient.Disconnect()
_logger.Debug(String.Format(" POP3_COLLECT finished!"))
Return oMAIL_LIST
Catch ex As Exception
_logger.Error(ex)
Return Nothing
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 oClient As New Pop3Client(MYMAIL_SERVER, MYMAIL_PORT)
oClient.ValidateRemoteCertificate = False
oClient.Connect()
_logger.Debug(String.Format("..connected!"))
oClient.Login(MYMAIL_USER, MYMAIL_USER_PW)
Dim messageInfo As MessageInfo() = oClient.List()
For i As Integer = 0 To messageInfo.Length - 1
Dim message As Message = oClient.GetMessage(messageInfo(i).Index)
MsgBox(String.Format("Message [{0}] added", message.Subject))
Next
oClient.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 NewEmail(mailto As String, mailSubject As String, mailBody As String,
mailfrom As String, mailsmtp As String, mailport As Integer, mailUser As String, mailPW As String,
AUTH_TYPE As String, SENDER_INSTANCE As String, Optional attachmentString As String = "", Optional Test As Boolean = False)
Try
Dim oError As Boolean = False
Dim oReceipiants As String()
If mailto.Contains(";") Then
oReceipiants = mailto.Split(";")
Else
ReDim Preserve oReceipiants(0)
oReceipiants(0) = mailto
End If
For Each oMailReceipiant As String In oReceipiants
_logger.Debug($"oMailReceipiant [{oMailReceipiant}]")
_logger.Debug($"mailsmtp [{mailsmtp}]")
Dim sClient As Net.Mail.SmtpClient
Try
sClient = New Net.Mail.SmtpClient(mailsmtp, mailport)
Catch ex As Exception
_logger.Warn($"Could not create SMTP-Client: [{ex.Message}]")
Return False
End Try
sClient.DeliveryMethod = SmtpDeliveryMethod.Network
Dim mymesssage As New MailMessage
sClient.Port = mailport
_logger.Debug($"mailport [{mailport}]")
If AUTH_TYPE = "SSL" Then
_logger.Debug("SSL = true")
sClient.EnableSsl = True
Else
_logger.Debug("SSL = false")
sClient.EnableSsl = False
End If
_logger.Debug($"mailUser [{mailUser}]")
sClient.Credentials = New NetworkCredential(mailUser, mailPW)
sClient.UseDefaultCredentials = False
If Test = True Then
mymesssage.Body = $"This is the body (text will be replaced within profile)!
mailsmtp: {mailsmtp}
mailport: {mailport}
mailUser: {mailUser}
mailPW: XXXX
AUTH_TYPE: {AUTH_TYPE}"
Else
mymesssage.Body = mailBody
End If
_logger.Debug($"mailBody [{mailBody}]")
'mymesssage.IsBodyHtml = True
Dim htmlView As AlternateView = AlternateView.CreateAlternateViewFromString(mymesssage.Body)
htmlView.ContentType = New System.Net.Mime.ContentType("text/html")
mymesssage.AlternateViews.Add(htmlView)
_logger.Debug($"attachmentString [{attachmentString}]")
If attachmentString <> "" Then
_logger.Info($"Attachment Path is: {attachmentString}")
Dim oAttachment As New System.Net.Mail.Attachment(attachmentString)
'If attment.ToLower.EndsWith("pdf") Then
' oAttachment.ContentType = New Independentsoft.Email.Mime.ContentType("application", "pdf")
'ElseIf attment.ToLower.EndsWith("jpg") Then
' oAttachment.ContentType = New Independentsoft.Email.Mime.ContentType("application", "jpg")
'ElseIf attment.ToLower.EndsWith("docx") Then
' oAttachment.ContentType = New Independentsoft.Email.Mime.ContentType("application", "MS-word")
'End If
mymesssage.Attachments.Add(oAttachment)
Else
_logger.Debug("No Attachment.")
End If
_logger.Debug($"mailfrom [{mailfrom}]")
mymesssage.From = New MailAddress(mailfrom)
_logger.Debug($"mailSubject [{mailSubject}]")
mymesssage.Subject = mailSubject
mymesssage.To.Add(New MailAddress(oMailReceipiant))
_logger.Debug($"Now Sending mail...")
sClient.Send(mymesssage)
_logger.Debug($"Mail has been sent!")
_logger.Info("Message to " & oMailReceipiant & " has been send.")
Next
If oError = False Then
Return True
Else
Return False
End If
Catch ex As Exception
_logger.Error(ex)
Return False
End Try
End Function
Public Function DELETE_EMAIL(POLLTYPE As String, msgid As String, MYMAIL_SERVER As String, MYMAIL_PORT As Integer, MYMAIL_USER As String, MYMAIL_USER_PW As String)
Try
If POLLTYPE = "POP" Then
Dim oClient As New Pop3Client(MYMAIL_SERVER, MYMAIL_PORT)
oClient.ValidateRemoteCertificate = False
oClient.Connect()
oClient.Login(MYMAIL_USER, MYMAIL_USER_PW)
Dim oMessageInfo As MessageInfo() = oClient.List()
For i As Integer = 0 To oMessageInfo.Length - 1
Dim message As Message = oClient.GetMessage(oMessageInfo(i).Index)
If message.MessageID = msgid Then
oClient.Delete(oMessageInfo(i).Index)
_logger.Info(String.Format("Message [{0}] was deleted!", message.Subject))
Exit For
End If
Next
oClient.Disconnect()
Return True
ElseIf POLLTYPE = "IMAP" Then
Dim oIMAPClient As New ImapClient(MYMAIL_SERVER, MYMAIL_PORT)
oIMAPClient.ValidateRemoteCertificate = False
oIMAPClient.Connect()
oIMAPClient.Login(MYMAIL_USER, MYMAIL_USER_PW)
oIMAPClient.SelectFolder("Inbox")
Dim envelopes As Envelope() = oIMAPClient.ListMessages()
For i As Integer = 0 To envelopes.Length - 1
If envelopes(i).MessageID = msgid Then
oIMAPClient.Delete(envelopes(i).UniqueID) 'mark as deleted
End If
Next
oIMAPClient.Expunge() 'delete messages marked as deleted
oIMAPClient.Disconnect()
Return True
End If
Catch ex As Exception
_logger.Error(ex)
'clsLogger.Add("Unexpected Error in DELETE_EMAIL: " & ex.Message)
Return False
End Try
End Function
End Class