We would like to create a standard header and footer for our email templates. Rather than pasting the custom HTML in the top of each system email template we want to override, it would be better to define a header template, and a footer template, and then use smarty to {include} these templates.

Is this possible with CiviCRM?

Is there a reason CiviCRM doesn't have a single header/footer template by default? If not would this make a reasonable feature request?

  1. I dont think CiviCRM does this by default

  2. However, I do think this is a good idea and makes sense to include it in core for non-civimail mailings (which already have a header/footer)

  3. Might want to modify the core mailing functions:


to add a default header / footer

  1. Might want to allow this to be overridden both at the system level, function level and via a hook
  • Sounds great, but might require a significant amount of work. I'm also hoping there might be a quicker solution which would allow me to just {include} custom templates in the short term. But this would be something we would be happy to work on in the future if time allows us to. – John Apr 9 '15 at 17:26
  • Its a relatively easy,small and localized patch. You can reuse most of the code from the civimal code file – Donald Lobo Apr 9 '15 at 22:27

I just want to clarify the basic functionality provided by CiviMail, since it may provide enough. CiviMail has separate functionality to manage headers and footers and templates. So a standard header and footer can be defined and used for several templates. At the time of configuring a mailing 1) the template if any is specified and then an instance (ie copy) of it can modified in the editor, and 2) the header if any and 3) the footer if any are also specified. If your main interest is in being able to separate managing the header and footer from all the templates that use them, this should be enough.

If you are more interested in pre-assigning for each template a specific header and footer, then a small extension could be developed that would allow the header and footer for a template to be specified when it is edited. Later when a mailing is being configured and a template is selected, those stored selections would be used to set the mailing's header and footer.

  • Thanks Joe. I'm particularly interested in the system-generated email message such as event confirmation emails, rather than the CiviMail templates. – John Apr 10 '15 at 10:27

one option might be to create a custom token {template.header} and {template.footer} that generates the needed html. the way you implement that function can be to fetch the html from a template. Note that it probably means you can't have token within these templates, that might or might not be an issue for you


We've done this, unless I'm misunderstanding you.

I made an extension and put the required header code (in our case, a formatted address block) into a tpl in the templates/CRM/something directory. This included tokens etc. as it would have in the message template itself. Then in the message template I just used {include file=CRM/something/addressdate.tpl}.

This works fine for us, but I did encounter weird stuff to do with needing/not-needing the $ symbol on tokens. This seemed directly related to the use of an include file, as the same issues didn't arise if you put the same header code into the message template itself. That said we have a bunch of other extensions, and I never figured out the root cause, so ymmv.

  • Forgot to say it probably needs CIVICRM_MAIL_SMARTY enabled in civicrm.settings.php. – Andrew West May 22 '15 at 13:12
  • Sorry, I was a bit confusing there. There's nothing to the extension other than this template - I just like to keep things organised :-) You could put the .tpl file into your custom templates directory and it'd be exactly the same – Andrew West Aug 12 '15 at 18:33
  • I see - sorry. Got a bit confused that this was re: CiviMail but OP is specific about System Workflow Messages. – Sonicthoughts Aug 18 '15 at 18:32

Your Answer

