mailTemplate - Send an email using a PHP template file.
mailTemplate($_filename, $_v)
causes the PHP engine to parse the PHP file specified by $_filename
, with the
variables passed in the variable $_v
, which should output an RFC-822 (and its
successors) style message.
The function then extracts the headers from the message, grabs the "To" and "Subject" lines from it, and then passes
the "To:", "Subject:", message body, and remaining headers, to the PHP
mail()
function.
As an example, consider template file "thanks.php"
To: <<?= $email ?>>
Subject: Thank you for your request
Content-Type: text/plain; charset=utf-8
Dear <?= $name =>,
Thankyou for your request, one of our staff will contact you <?= $when =>.
<?php if ($important) { ?>
Your request is important to us.
<?php } ?>
Which could then be called with:
mailTemplate("thanks.php", [
'email' => "dave@example.com",
'name' => "Dave",
'when' => "tomorrow",
'important' => FALSE,
]};
Note that, as of this implementation, $_filename
is read using
include()
, so it uses the file-finding rules defined therein.
Also, it is worth remembering that PHP eats newlines directly following a PHP close tag. Therefore, if you have:
To: <?= $recipient ?>
Subject: ...
Then the newline following the close tag will be eaten by the PHP parser, and you'll end up with:
To: example@example.comSubject: ...
To work around this, you need to either make the closing tag not the last thing on the line (e.g. by adding a trailing space to the line), or forcibly output a newline yourself from within the PHP, e.g.:
To: <?= $recipient."\n" ?>
Subject: ...