73 lines
3.1 KiB
VB.net

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
''' <summary>
''' Uses a private API from MailWriter to write a MailMessage to disk.
''' May break in future versions of .NET
''' </summary>
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