Welcome to a tutorial on how to send emails in PHP with HTML templates. So you want to use an HTML file as an email template? Well, there are a few ways to do it – Read on for the examples!
TABLE OF CONTENTS
DOWNLOAD & NOTES
Here is the download link to the example code, so you don’t have to copy-paste everything.
EXAMPLE CODE DOWNLOAD
The example code is released under the MIT license, so feel free to build on top of it or use it in your own project.
SORRY FOR THE ADS...
But someone has to pay the bills, and sponsors are paying for it. I insist on not turning Code Boxx into a "paid scripts" business, and I don't "block people with Adblock". Every little bit of support helps.
Buy Me A Coffee Code Boxx eBooks
PHP-HTML EMAIL TEMPLATES
All right, let us now get into the examples of creating HTML email templates in PHP.
TUTORIAL VIDEO
EXAMPLE 1) HTML TEMPLATE WITH STRING REPLACE
1A) HTML TEMPLATE
<html><body>
<p>Hi {NAME}!</p>
<p>Sent at <strong>{TIME}</strong>.</p>
</body></html>
This is probably one of the most common and traditional methods – Not just for PHP, but for “most other programming languages” as well. Just create the HTML template, and put {VARIABLE}
placeholders where you want to use variables.
1B) PHP STRING REPLACE
// (A) SETTINGS
$subject = "DEMO TEMPLATE";
$to = "joe@doe.com";
$name = "Joe";
$date = date("Y-m-d H:i:s");
// (B) READ TEMPLATE & STRING REPLACE
$html = file_get_contents("1a-template.html");
$html = str_replace("{NAME}", $name, $html);
$html = str_replace("{TIME}", $date, $html);
// (C) SEND!
mail($to, $subject, $html, implode("\r\n", [
"MIME-Version: 1.0",
"Content-type: text/html; charset=utf-8"
]));
This should be pretty self-explanatory. Read the entire HTML file into a string, then do str_replace()
for all {VARIABLE}
placeholders.
EXAMPLE 2) HTML TEMPLATE WITH PHP VARIABLES
2A) HTML TEMPLATE
<html><body>
<p>Hi <?=$name?>!</p>
<p>Sent at <strong><?=$date?></strong>.</p>
</body></html>
Take note, this is a PHP
file with the usual short variable tags <?=$VARIABLE?>
.
2B) OUTPUT BUFFER MAGIC
// (A) SETTINGS
$subject = "DEMO TEMPLATE";
$to = "jon@doe.com";
$name = "Jon";
$date = date("Y-m-d H:i:s");
// (B) OUTPUT BUFFER MAGIC
ob_start();
include "2a-template.php";
$html = ob_get_contents();
ob_end_clean();
// (C) SEND!
mail($to, $subject, $html, implode("\r\n", [
"MIME-Version: 1.0",
"Content-type: text/html; charset=utf-8"
]));
What kind of sorcery is this? For the uninitiated, you should know the following:
$name = "Jon";
$date = date("Y-m-d H:i:s");
include "2a-template.php";
Yes, PHP will instantly parse and output the HTML. So we change that behavior with output buffering.
ob_start()
Start output buffering.include "2a-template.php"
Parse the variables and HTML. But it will be stored in the buffer, not directly output.$html = ob_get_contents()
Get the HTML content from the buffer, and put it into$html
as a string.ob_end_clean()
Clear and stop buffering.
TLDR – Use output buffering to build $html
, then send it out in an email.
EXAMPLE 3) ARRAY EXTRACT
// (A) EXTRACT EMAIL VARIABLES
$email = [
"subject" => "DEMO TEMPLATE",
"to" => "joy@doe.com",
"name" => "Joy",
"date" => date("Y-m-d H:i:s")
];
extract($email);
// (B) OUTPUT BUFFER MAGIC
ob_start();
include "2a-template.php";
$html = ob_get_contents();
ob_end_clean();
// (C) SEND!
mail($to, $subject, $html, implode("\r\n", [
"MIME-Version: 1.0",
"Content-type: text/html; charset=utf-8"
]));
This is the same method as above, but we introduce extract(ARRAY)
to make things more convenient. A quick explanation:
extract()
is a PHP native function. It simply takes in an array and creates variables from it.- For example,
extract(["name" => "jon", "age" => 123])
will create$name = "jon"
and$age = 123
. - So basically, we are just using
extract()
to quickly “map” our email template variables.
EXTRAS
That’s all for the tutorial, and here is a small section on some extras and links that may be useful to you.
INFOGRAPHIC CHEATSHEET
WHICH IS THE BEST METHOD?
All of the above methods work. However, string replacement can be resource-intensive when it comes to a long email with many variables. So, personal preference – “Wicked output buffer with extract” is the most elegant among the three.
LINKS & REFERENCES
- Mail – PHP Manual
- Bulk Send Email In PHP – Code Boxx
- Fix PHP Mail Not Sending – Code Boxx
THE END
Thank you for reading, and we have come to the end. I hope that it has helped you to better understand, and if you want to share anything with this guide, please feel free to comment below. Good luck and happy coding!