Visual Basic.NET Example CodeWhen an Outlook user composes and sends a message using either Rich Text Format or HTML Format, Outlook automagically generates a file, winmail.dat, and attaches it to the end of the email. The winmail.dat contains the rich text body and original attachments. To parse winmail.dat (TNEF stream) file, we should use ParseTNEF method.
' The following example codes demonstrate parsing winmail.dat - TNEF stream
' To get full sample projects, please download and install EAGetMail on your machine.
' To run it correctly, please change email server, user, password, folder, file name value to yours
Imports System.Collections
Imports System.Text
Imports System.IO
' Imports EAGetMail namespace
Imports EAGetMail
Module Module1
Private Sub ParseEmail(ByVal emlFile As String)
Dim oMail As New Mail("TryIt")
oMail.Load(emlFile, False)
If oMail.IsEncrypted Then
Try
' This email is encrypted, we decrypt it by user default certificate.
' you can also use specified certificate like this
' Dim oCert As New Certificate()
' oCert.Load("c:\test.pfx", "pfxpassword", _
' Certificate.CertificateKeyLocation.CRYPT_USER_KEYSET)
' oMail = oMail.Decrypt( oCert )
oMail = oMail.Decrypt(Nothing)
Catch ep As Exception
Console.WriteLine(ep.Message)
End Try
End If
If oMail.IsSigned Then
Try
' This email is digital signed.
Dim cert As EAGetMail.Certificate = oMail.VerifySignature()
' You can add the certificate to your certificate storage like this
' cert.AddToStore( _
' Certificate.CertificateStoreLocation.CERT_SYSTEM_STORE_CURRENT_USER, _
' "addressbook" )
' then you can use send the encrypted email back to this sender.
Console.WriteLine("This email contains a valid digital signature.")
Catch ep As Exception
Console.WriteLine(ep.Message)
End Try
End If
' Parse Mail From/Sender
Console.WriteLine("From: {0}", oMail.From.ToString())
' Parse Mail To/Recipient
Dim addrs As MailAddress() = oMail.[To]
For i As Integer = 0 To addrs.Length - 1
Console.WriteLine("To: {0}", addrs(i).ToString())
Next
' Parse Mail CC
addrs = oMail.Cc
For i As Integer = 0 To addrs.Length - 1
Console.WriteLine("To: {0}", addrs(i).ToString())
Next
' Parse Mail Subject
Console.WriteLine("Subject: {0}", oMail.Subject)
' Parse Mail Text/Plain body
Console.WriteLine("TextBody: {0}", oMail.TextBody)
' Parse Mail Html Body
Console.WriteLine("HtmlBody: {0}", oMail.HtmlBody)
' Parse Attachments
Dim atts As Attachment() = oMail.Attachments
For i As Integer = 0 To atts.Length - 1
Dim att As Attachment = atts(i)
' This attachment is in OUTLOOK RTF format(TNEF), decode it here.
If [String].Compare(att.Name, "winmail.dat") = 0 Then
Dim tatts As Attachment() = Nothing
Try
tatts = Mail.ParseTNEF(att.Content, True)
Catch ep As Exception
Console.WriteLine(ep.Message)
End Try
Dim y As Integer = tatts.Length
For x As Integer = 0 To y - 1
Dim tatt As Attachment = tatts(x)
Console.WriteLine("winmail.dat: {0}", tatt.Name)
Next
Continue For
End If
Console.WriteLine("Attachment: {0}", att.Name)
Next
End Sub
Sub Main()
ParseEmail("c:\my folder\test.eml")
End Sub
End Module
Click here to read original topic - full version ... If you have any comments or questions about above example codes, please add your comments here.