Learn how to convert text email with attachments to PDF in VB.NET with this source code sample. ByteScout PDF SDK is the component to help programmers in generating new pdf files, modifying and updating existing pdf documents or pdf forms. Provides support for auto-filling pdf forms, adding text with adjustable font, style, size, font family, new form fields, vector and raster drawings and you can use it to convert text email with attachments to PDF with VB.NET.
This code snippet below for ByteScout PDF SDK works best when you need to quickly convert text email with attachments to PDF in your VB.NET application. In order to implement the functionality, you should copy and paste this code for VB.NET below into your code editor with your app, compile and run your application. Enjoy writing a code with ready-to-use sample codes in VB.NET.
ByteScout PDF SDK free trial version is available on our website. VB.NET and other programming languages are supported.
On-demand (REST Web API) version:
Web API (on-demand version)
On-premise offline SDK for Windows:
60 Day Free Trial (on-premise)
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 = {code}quot;Subject: {msg.Subject}"
oHtmlGenerator.AddParagraphBodyItem({code}quot;File Name: {msg.FileName}")
oHtmlGenerator.AddParagraphBodyItem({code}quot;From: {from}")
oHtmlGenerator.AddParagraphBodyItem({code}quot;Sent On: {(If(sentOn.HasValue, sentOn.Value.ToString("MM/dd/yyyy HH:mm"), ""))}")
oHtmlGenerator.AddParagraphBodyItem({code}quot;To: {recipientsTo}")
oHtmlGenerator.AddParagraphBodyItem({code}quot;Subject: {msg.Subject}")
If Not String.IsNullOrEmpty(recipientsCc) Then
oHtmlGenerator.AddParagraphBodyItem({code}quot;CC: {recipientsCc}")
End If
If Not String.IsNullOrEmpty(recipientBcc) Then
oHtmlGenerator.AddParagraphBodyItem({code}quot;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
60 Day Free Trial or Visit ByteScout PDF SDK Home Page
Explore ByteScout PDF SDK Documentation
Explore Samples
Sign Up for ByteScout PDF SDK Online Training
Get Your API Key
Explore Web API Docs
Explore Web API Samples
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="MsgReader" version="3.4.1" targetFramework="net45" />
<package id="OpenMcdf" version="2.2.1.3" targetFramework="net45" />
</packages>
60 Day Free Trial or Visit ByteScout PDF SDK Home Page
Explore ByteScout PDF SDK Documentation
Explore Samples
Sign Up for ByteScout PDF SDK Online Training
Get Your API Key
Explore Web API Docs
Explore Web API Samples
60 Day Free Trial or Visit ByteScout PDF SDK Home Page
Explore ByteScout PDF SDK Documentation
Explore Samples
Sign Up for ByteScout PDF SDK Online Training
Get Your API Key
Explore Web API Docs
Explore Web API Samples
also available as: