Sample source code below will display you how to manage a complex task like convert email with attachments to pdf with pdf sdk in C#. Want to convert email with attachments to pdf with pdf sdk in your C# app? ByteScout PDF Suite is designed for it. ByteScout PDF Suite is the set that includes 6 SDK products to work with PDF from generating rich PDF reports to extracting data from PDF documents and converting them to HTML. This bundle includes PDF (Generator) SDK, PDF Renderer SDK, PDF Extractor SDK, PDF to HTML SDK, PDF Viewer SDK and PDF Generator SDK for Javascript.
Want to save time? You will save a lot of time on writing and testing code as you may just take the C# code from ByteScout PDF Suite for convert email with attachments to pdf with pdf sdk below and use it in your application. Follow the instructions from scratch to work and copy the C# code. Want to see how it works with your data then code testing will allow the function to be tested and work properly.
ByteScout PDF Suite free trial version is available on our website. C# 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)
using System;
using System.Diagnostics;
using System.Drawing.Printing;
using System.IO;
using System.Text;
using Bytescout.PDF;
using Bytescout.PDF.Converters;
using Font = Bytescout.PDF.Font;
using SolidBrush = Bytescout.PDF.SolidBrush;
namespace EmailToPDF_EmailWithAttachment
{
class Program
{
static void Main(string[] args)
{
try
{
// Parse MessageContents using MsgReader Library
// MsgReader library can be obtained from: https://github.com/Sicos1977/MSGReader
using (var msg = new MsgReader.Outlook.Storage.Message("EmailWithAttachments.msg"))
{
// Get Sender information
var from = msg.GetEmailSender(false, false);
// Message sent datetime
var sentOn = msg.SentOn;
// Recipient To information
var recipientsTo = msg.GetEmailRecipients(MsgReader.Outlook.RecipientType.To, false, false);
// Recipient CC information
var recipientsCc = msg.GetEmailRecipients(MsgReader.Outlook.RecipientType.Cc, false, false);
// Recipient BCC information
var recipientBcc = msg.GetEmailRecipients(MsgReader.Outlook.RecipientType.Bcc, false, false);
// Message subject
var subject = msg.Subject;
// Get Message Body
var msgBody = msg.BodyHtml;
// Prepare PDF docuemnt
using (Document outputDocument = new Document())
{
// Add registration keys
outputDocument.RegistrationName = "demo";
outputDocument.RegistrationKey = "demo";
// Add page
Page page = new Page(PaperFormat.A4);
outputDocument.Pages.Add(page);
// Add sample content
Font font = new Font(StandardFonts.Times, 12);
Brush brush = new SolidBrush();
// Add Email contents
int topMargin = 20;
page.Canvas.DrawString({code}quot;File Name: {msg.FileName}", font, brush, 20, (topMargin += 20));
page.Canvas.DrawString({code}quot;From: {from}", font, brush, 20, (topMargin += 20));
page.Canvas.DrawString({code}quot;Sent On: {(sentOn.HasValue ? sentOn.Value.ToString("MM/dd/yyyy HH:mm") : "")}", font, brush, 20, (topMargin += 20));
page.Canvas.DrawString({code}quot;To: {recipientsTo}", font, brush, 20, (topMargin += 20));
if (!string.IsNullOrEmpty(recipientsCc))
{
page.Canvas.DrawString({code}quot;CC: {recipientsCc}", font, brush, 20, (topMargin += 20));
}
if (!string.IsNullOrEmpty(recipientBcc))
{
page.Canvas.DrawString({code}quot;BCC: {recipientBcc}", font, brush, 20, (topMargin += 20));
}
page.Canvas.DrawString({code}quot;Subject: {subject}", font, brush, 20, (topMargin += 20));
page.Canvas.DrawString("Message body in next page.", font, brush, 20, (topMargin += 20));
// Convert Html body to PDF in order to retain all formatting.
using (HtmlToPdfConverter converter = new HtmlToPdfConverter())
{
converter.PageSize = PaperKind.A4;
converter.Orientation = Bytescout.PDF.Converters.PaperOrientation.Portrait;
// Get all inline attachment, and replace them
foreach (MsgReader.Outlook.Storage.Attachment itmAttachment in msg.Attachments)
{
if (itmAttachment.IsInline)
{
var oData = itmAttachment.Data;
var dataBase64 = Convert.ToBase64String(oData);
// Replace within email
msgBody = msgBody.Replace({code}quot;src=\"{itmAttachment.FileName}\"", {code}quot;src=\"{ "data:image/jpeg;base64," + dataBase64}\"");
}
}
// Convert input HTML to stream
byte[] byteArrayBody = Encoding.UTF8.GetBytes(msgBody);
MemoryStream inputStream = new MemoryStream(byteArrayBody);
// Create output stream to store generated PDF file
using (var outputStream = new MemoryStream())
{
// Convert HTML to PDF
converter.ConvertHtmlToPdf(inputStream, outputStream);
// Create new document from generated output stream
Document docContent = new Document(outputStream);
// Append all pages to main PDF
foreach (Page item in docContent.Pages)
{
outputDocument.Pages.Add(item);
}
// Apped all other attachments
foreach (MsgReader.Outlook.Storage.Attachment itmAttachment in msg.Attachments)
{
if (!itmAttachment.IsInline)
{
// Attachment is image, so adding accordingly
var pageAttachment = new Page(PaperFormat.A4);
Canvas canvas = pageAttachment.Canvas;
var oAttachmentStream = new MemoryStream(itmAttachment.Data);
Image imageAttachment = new Image(oAttachmentStream);
canvas.DrawImage(imageAttachment, 20, 20);
// Add attachment
outputDocument.Pages.Add(pageAttachment);
}
}
// Save output file
outputDocument.Save("result.pdf");
}
}
// Open result document in default associated application (for demo purpose)
ProcessStartInfo processStartInfo = new ProcessStartInfo("result.pdf");
processStartInfo.UseShellExecute = true;
Process.Start(processStartInfo);
}
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
Console.WriteLine("Press enter key to exit...");
Console.ReadLine();
}
}
}
}
60 Day Free Trial or Visit ByteScout PDF Suite Home Page
Explore ByteScout PDF Suite Documentation
Explore Samples
Sign Up for ByteScout PDF Suite 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.0" targetFramework="net45" />
<package id="OpenMcdf" version="2.2.1.3" targetFramework="net45" />
</packages>
60 Day Free Trial or Visit ByteScout PDF Suite Home Page
Explore ByteScout PDF Suite Documentation
Explore Samples
Sign Up for ByteScout PDF Suite Online Training
Get Your API Key
Explore Web API Docs
Explore Web API Samples
60 Day Free Trial or Visit ByteScout PDF Suite Home Page
Explore ByteScout PDF Suite Documentation
Explore Samples
Sign Up for ByteScout PDF Suite Online Training
Get Your API Key
Explore Web API Docs
Explore Web API Samples
also available as: