Imports DigitalData.EMLProfiler.ClassCurrent Imports DigitalData.Modules.Logging Imports AE Imports System.Net Imports System.Reflection Imports System.IO Imports DigitalData.Modules.Messaging 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) 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() 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 ''' ''' Uses a private API from MailWriter to write a MailMessage to disk. ''' May break in future versions of .NET ''' Public Function WriteMessageToFile(Message As Mail.MailMessage, Filename As String) As Boolean Dim oAssembly As Assembly = GetType(Mail.SmtpClient).Assembly Dim oMailWriterType As Type = oAssembly.[GetType]("System.Net.Mail.MailWriter") Try Using oStream As New FileStream(Filename, FileMode.Create) Dim oMailWriterConstructor As ConstructorInfo = oMailWriterType.GetConstructor( BindingFlags.Instance Or BindingFlags.NonPublic, Nothing, New Type() {GetType(Stream)}, Nothing ) Dim oMailWriter As Object = oMailWriterConstructor.Invoke(New Object() {oStream}) Dim sendMethod As MethodInfo = GetType(Mail.MailMessage).GetMethod("Send", BindingFlags.Instance Or BindingFlags.NonPublic) sendMethod.Invoke(Message, BindingFlags.Instance Or BindingFlags.NonPublic, Nothing, {oMailWriter, True, True}, Nothing) End Using Return True Catch ex As Exception Return Nothing End Try End Function End Class