Sending Email In C# & .NET - Part 11 - Sending HTML Email Using MailKit
[C#, .NET, Email, StarLibrary, MailKit]
This is Part 11 of a series on sending email.
- Sending Email in C# & .NET - Part 1 - Introduction
- Sending Email in C# & .NET - Part 2 - Delivery
- Sending Email in C# & .NET - Part 3 - Using Gmail
- Sending Email In C# & .NET - Part 4 - Using Office 365 & MS Graph API
- Sending Email In C# & .NET - Part 5 - Using Google Cloud API
- Sending Email In C# & .NET - Part 6 - Testing SMTP Locally Using PaperCut
- Sending Email In C# & .NET - Part 7 - Sending Inline Images Using SMTP
- Sending Email In C# & .NET - Part 8 - Sending HTML Email Using SMTP
- Sending Email In C# & .NET - Part 9 - Sending Multiple Format Email Using SMTP
- Sending Email In C# & .NET - Part 10 - Sending Plain Text Email Using MailKit
- Sending Email In C# & .NET - Part 11 - Sending HTML Email Using MailKit (This post)
- Sending Email In C# & .NET - Part 12 - Sending Email With Attachments Using MailKit
- Sending Email In C# & .NET - Part 13 - Sending Email With Inline Attachments Using MailKit
- Sending Email In C# & .NET - Part 14 - Sending Multiple Format Email Using MailKit
- Sending Email In C# & .NET - Part 15 - Sending Calendar Invites Using MailKit
- Sending Email In C# & .NET - Part 16 - Testing SMTP Locally Using Mailpit
Our last post, “Sending Email In C# & .NET - Part 10 - Sending Plain Text Email Using MailKit”, looked at how to send plain text email using MailKit.
In this post, we will look at how to send an HTML email.
The process is exactly the same as before:
- Create a
MimeMessage
- Create one (or more)
MailboxAddress
for the recipients and add to theTo
collection of theMimeMessage
- Create one
MailboxAddress
for the sender and add it to theFrom
collection of theMimeMessage
- Set the
Subject
of theMimeMessage
- Set the
Body
of theMimeMessage
- Send the message using the
SmtpClient
. This is theSmtpClient
fromMailKit
, not the one in System.Net.
The difference is how the Body
is set.
using MailKit.Net.Smtp;
using MimeKit;
using Serilog;
// Configure logging to the console
Log.Logger = new LoggerConfiguration()
.WriteTo.Console()
.CreateLogger();
// Create the email
var message = new MimeMessage();
// Add the sender
message.From.Add(new MailboxAddress("James Bond", "james@mi5.org"));
// Set the recipient
message.To.Add(new MailboxAddress("M", "m@mi5.org"));
// Set the email subject
message.Subject = "Deployment Status - Follow Up";
var textBody = new TextPart("html")
{
Text = """
Dear M,
<br/>
<br/>
Subject Refers.
<br/>
<br/>
I would like to <i>kindly</i> follow up on my last email requesting to know my deployment
status.
<br/>
<br/>
<b>I have been at home for six weeks now!<b>.
"""
};
message.Body = textBody;
// Now send the email
using (var client = new SmtpClient())
{
Log.Information("Connecting to smtp server...");
await client.ConnectAsync("localhost", 25, false);
// Typically, authenticate here. But we are using PaperCut
//await client.AuthenticateAsync("username", "password");
await client.SendAsync(message);
Log.Information("Sent message");
await client.DisconnectAsync(true);
Log.Information("Disconnected from server");
}
The magic is happening here, where we construct the TextPart
.
var textBody = new TextPart("html")
{
Text = """
Dear M,
<br/>
<br/>
Subject Refers.
<br/>
<br/>
I would like to <i>kindly</i> follow up on my last email requesting to know my deployment
status.
<br/>
<br/>
<b>I have been at home for six weeks now!<b>.
"""
};
The argument value "html"
is what is used to construct the HTML body for the email.
If we run this code to send the email, it will appear as follows at the client:
We can see here that the email is sent in HTML
format.
TLDR
In this post, we looked at how to send HTML email using MailKit
, where we create a TextPart
and pass "html"
as the argument.
The code is in my GitHub.
Happy hacking!