Imports Independentsoft.Email Imports Independentsoft.Email.Imap Imports Independentsoft.Email.Mime Imports DigitalData.EMLProfiler.ClassCurrent Imports DigitalData.Modules.Logging Imports AE Imports System.Net Imports System.Reflection Imports System.IO Imports DigitalData.Modules.Database Imports DigitalData.Modules.Messaging Public Class clsEmailIMAP Private Shared Logger As DigitalData.Modules.Logging.Logger Private Shared LogConfig As DigitalData.Modules.Logging.LogConfig Private _DB_MSSQL As clsDatabase Private _limilab As DigitalData.Modules.Messaging.Limilab Sub New(LogConf As LogConfig, ECMConnectionString As String) LogConfig = LogConf Logger = LogConf.GetLogger _DB_MSSQL = New clsDatabase(LogConf, ECMConnectionString) _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 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 End If Return True 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