Free Trial
Web API version
Licensing
Request A Quote
HAVE QUESTIONS OR NEED HELP? SUBMIT THE SUPPORT REQUEST FORM or write email to SUPPORT@BYTESCOUT.COM
Convert Text Email with Attachments to PDF | VB.NET
Program.vb:
VB
Imports System.Drawing.Printing Imports System.IO Imports System.Text Imports Bytescout.PDF Imports Bytescout.PDF.Converters Module Program Sub Main() Try ' Parse MessageContents using MsgReader Library ' MsgReader library can be obtained from: https://github.com/Sicos1977/MSGReader Using msg = New MsgReader.Outlook.Storage.Message("TxtSampleEmailWithAttachment.msg") ' Get Sender information Dim from = msg.GetEmailSender(False, False) ' Message sent datetime Dim sentOn = msg.SentOn ' Recipient To information Dim recipientsTo = msg.GetEmailRecipients(MsgReader.Outlook.RecipientType.[To], False, False) ' Recipient CC information Dim recipientsCc = msg.GetEmailRecipients(MsgReader.Outlook.RecipientType.Cc, False, False) ' Recipient BCC information Dim recipientBcc = msg.GetEmailRecipients(MsgReader.Outlook.RecipientType.Bcc, False, False) #Region "Generate and save HTML" Dim oHtmlGenerator As New HtmlGenerator() oHtmlGenerator.Title = $"Subject: {msg.Subject}" oHtmlGenerator.AddParagraphBodyItem($"File Name: {msg.FileName}") oHtmlGenerator.AddParagraphBodyItem($"From: {from}") oHtmlGenerator.AddParagraphBodyItem($"Sent On: {(If(sentOn.HasValue, sentOn.Value.ToString("MM/dd/yyyy HH:mm"), ""))}") oHtmlGenerator.AddParagraphBodyItem($"To: {recipientsTo}") oHtmlGenerator.AddParagraphBodyItem($"Subject: {msg.Subject}") If Not String.IsNullOrEmpty(recipientsCc) Then oHtmlGenerator.AddParagraphBodyItem($"CC: {recipientsCc}") End If If Not String.IsNullOrEmpty(recipientBcc) Then oHtmlGenerator.AddParagraphBodyItem($"BCC: {recipientBcc}") End If oHtmlGenerator.AddRawBodyItem("<hr/>") Dim msgBodySplitted = msg.BodyText.Split(vbLf.ToCharArray()) For Each itmBody In msgBodySplitted oHtmlGenerator.AddParagraphBodyItem(itmBody) Next ' Generate Html oHtmlGenerator.SaveHtml("result.html") #End Region Using Converter As HtmlToPdfConverter = New HtmlToPdfConverter() Converter.PageSize = PaperKind.A4 Converter.Orientation = Bytescout.PDF.Converters.PaperOrientation.Portrait Converter.ConvertHtmlToPdf("result.html", "result.pdf") ' Get attachments from message (if any, and append to document) If msg.Attachments.Count > 0 Then Using outputDocument As New Document("result.pdf") For Each itmAttachment As MsgReader.Outlook.Storage.Attachment In msg.Attachments ' Get Memory Stream Dim attachmentMemoryStream As MemoryStream = New MemoryStream(itmAttachment.Data) ' Append Attachment Dim docAttachment As Document = New Document(attachmentMemoryStream) ' Append all pages to main PDF For Each item As Page In docAttachment.Pages outputDocument.Pages.Add(item) Next Next ' Save output file outputDocument.Save("result.pdf") End Using End If ' Open output file Dim processStartInfo As ProcessStartInfo = New ProcessStartInfo("result.pdf") processStartInfo.UseShellExecute = True Process.Start(processStartInfo) End Using End Using Catch ex As Exception Console.WriteLine(ex.Message) Console.WriteLine("Press enter key to exit...") Console.ReadLine() End Try End Sub ''' <summary> ''' Html Generator class ''' </summary> Class HtmlGenerator #Region "Constructors and variable declarations" Public Sub New() Me.StrBodyItems = New List(Of String)() End Sub Public Property Title As String Private Property StrBodyItems As List(Of String) #End Region #Region "Methods" ''' <summary> ''' Add Body Item ''' </summary> Public Sub AddRawBodyItem(ByVal strBodyItem As String) StrBodyItems.Add(strBodyItem) End Sub ''' <summary> ''' Add Paragraph body item ''' </summary> Public Sub AddParagraphBodyItem(ByVal strText As String) StrBodyItems.Add(String.Format("<p style=''>{0}</p>", strText)) End Sub ''' <summary> ''' Gets generated HTML ''' </summary> Public Function GetHtml() As String Dim oRetHtml As StringBuilder = New StringBuilder(String.Empty) oRetHtml.Append("<html>") oRetHtml.Append("<head>") oRetHtml.AppendFormat("<title>{0}</title>", Title) oRetHtml.Append("<style>p { line-height: 107.9 %; margin-bottom: 13pt; font-family: 'Arial', 'sans-serif'; font-size: 15pt; margin-top: 0; margin-left: 0; margin-right: 0; }</style>") oRetHtml.Append("</head>") oRetHtml.Append("<body>") For Each itemBody In StrBodyItems oRetHtml.Append(itemBody) Next oRetHtml.Append("</body>") oRetHtml.Append("</html>") Return oRetHtml.ToString() End Function ''' <summary> ''' Save all HTML ''' </summary> Public Sub SaveHtml(ByVal fileName As String) Dim allHtml = GetHtml() System.IO.File.WriteAllText(fileName, allHtml) End Sub #End Region End Class End Module