Email template engine

Newest version of Mail.dll email client includes a easy to use template engine.

It allows you to easily create html template for your emails:

Loading and rendering such template requires one line of code:

// C# version

Contact contact = ...;

 string html = Template
     .FromFile("template.txt")
     .DataFrom(contact)
     .Render();
' VB.NET version

Dim contact As Contact = ....

Dim html As String = Template _
     .FromFile("template.txt") _
     .DataFrom(contact) _
     .Render()

This is how the template looks like:

<html>
<head>
    <title>Your order</title>
</head>
<body>
	Hi [FirstName] [LastName],
	<br />
	<p>
	Your account [if Verified]has[else]<strong>has not</strong>[end] been verified. <br/>
	Your password is: [Password].
	</p>
	<p>
	Here are your orders:
	</p>
	[foreach Orders]
		<p>
		Order sent to <strong>[Street]</strong>:
		</p>
		<table style="width: 30%;">
			[foreach Items]
				<tr style="background-color: #E0ECFF;">
					<td>[Name]</td><td>[Price]</td>
				</tr>
			[end]
		</table>
	[end]
	<p>
		Thank you for your orders.
	<p>
</body>
</html>

Here’s the sample code that loads, fills the template and sends it using Mail.dll:

// C# version

Mail.Html(Template
              .FromFile("template.txt")
              .DataFrom(_contact)
              .Render())
    .Text("This is text version of the message.")
    .From(new MailBox("alice@mail.com", "Alice"))
    .To(new MailBox("bob@mail.com", "Bob"))
    .Subject("Your order")
    .UsingNewSmtp()
    .WithCredentials("alice@example.org", "password")
    .Server("smtp.example.org")
    .WithSSL()
    .Send();
' VB.NET version

Mail.Html(Template _
               .FromFile("template.txt") _
               .DataFrom(_contact) _
               .Render()) _
     .Text("This is text version of the message.") _
     .From(New MailBox("alice@mail.com", "Alice")) _
     .[To](New MailBox("bob@mail.com", "Bob")) _
     .Subject("Your order") _
     .UsingNewSmtp() _
     .WithCredentials("alice@example.org", "password") _
     .Server("smtp.example.org") _
     .WithSSL() _
     .Send()

And this is how the data, used by template, look like:

// C# version

public class Contact
{
    public List<Order> Orders { get; private set; }

    public string FirstName { get; set; }
    public string LastName { get; set; }
    public bool Verified;
    private string Password { get; set; }

    public Contact()
    {
        Orders = new List<Order>();
    }
} ;
' VB.NET version

Public Class Contact
	Public Property Orders() As List(Of Order)
		Get
			Return m_Orders
		End Get
		Private Set
			m_Orders = Value
		End Set
	End Property
	Private m_Orders As List(Of Order)

	Public Property FirstName() As String
		Get
			Return m_FirstName
		End Get
		Set
			m_FirstName = Value
		End Set
	End Property
	Private m_FirstName As String
	Public Property LastName() As String
		Get
			Return m_LastName
		End Get
		Set
			m_LastName = Value
		End Set
	End Property
	Private m_LastName As String
	Public Verified As Boolean
	Private Property Password() As String
		Get
			Return m_Password
		End Get
		Set
			m_Password = Value
		End Set
	End Property
	Private m_Password As String

	Public Sub New()
		Orders = New List(Of Order)()
	End Sub
End Class

Tags: , , ,

4 Responses to “Email template engine”

  1. Uroš Says:

    This is a very usefull thing and easy to implement thanks to your tutorial! Great job.

  2. Martin Staael Says:

    I tried using DataFrom with a Dictionary but it doesn’t work. Would be nice to have

  3. Pawel Lesnikowski Says:

    @Martin

    You can use Template.AddKey method:

    string s = Template
        .Create("Show some number [key].")
        .AddKey("key", "42")
        .Render();
    

    I’ve already implemented this feature, and it’ll be added in the next release.

  4. Send email to multiple recipients Says:

    [...] Also take a look at Mail.dll’s templating engine [...]

Leave a Reply