Brian Dunning's FileMaker Custom Functions

MailMergePlus ( text ; highlight )

Mailmerge function that preserves formatting of source text

  Average rating: 4.0 (45 votes) Log in to vote

Peter Vinogradov   Peter Vinogradov - Show more from this author

Share on Facebook Share on Twitter

  Sample input:
MailMergePlus ( "Dear <>, Welcome to <>..."; 1)
  Sample output:
Dear John (in blue), Welcome to Cambridge University (in blue)...

  Function definition: (Copy & paste into FileMaker's Edit Custom Function window)

A recursive function that replaces bracket-enclosed (<<>>) formulae or field references with evaluated results. Works similarly to Mike Duncan's "MailMerge" function (

Because it does not evaluate the entire output string, This method preserves formatting of the source text (including the format of the merge field/formula based on the format of the first bracket).

The "highlight" switch is used to return a blue coloration for the results of any merge fields/formulae. If this parameter is set to null ( "" ), then no special formatting is applied. This feature is useful for giving users a way to easily check the output of their merge letter.

Edit: Oops, just discovered that my merge formula is very similar (coincidentally, I swear) to the one in this function:
That one uses getfield() instead of evaluate, which is a good way of restricting the functionality so that users can't execute arbitrary calcs.
Edit 3-12-09: Thanks to Nick Lightbody for pointing out that the original formula chopped off the first two characters of the text if no merge fields <<>> are present. I have revised accordingly.



Nick Lightbody   Nick Lightbody, Deskspace Systems Limited
Mar 12, 2009
Very useful being able to switch the hilite on and off.

However - it doesn't quite work right if the first characters in the string are not "<<" when it removes the first two characters.
Thomas Seidler   Thomas Seidler, London
Apr 20, 2012
You've done a top function here Peter, only barbarians won't appreciate it, I removed highlight thing, but ability to quickly and properly evaluate *anything* in <<merge brackets>> is awesome.

I'm using it for regular emails with multiple occurences of the same date in various formats - I used to keep not updating one or another of the dates - about 5 places in email (subject, headers, body etc), and now I just have a date in a field, and use some form of <<FormatTimestamp(myDate;"M jS")>> etc.

Very very useful. I would have had to write it myself otherwise. Thanks, Tom
Mike   Mike, North Carolina
Feb 13, 2013
Fantastic cf.
However, it's easy to send this into an infinite loop:

field: "Hello World <<field>>"
MailMergePlus ( "<<field>>" ; "" )

One possible solution:

In "newtext = ", instead of just highlightMF, escape << and >>:

Substitute ( highlightMF ; ["<<" ; "\\<\\<" ] ; [">>" ; "\\>\\>" ] )

Then at the end, unescape << and >>

If ( moreMfs ; MailMergePlus (newtext ;highlight) ; Substitute ( newtext ; ["\\<\\<" ; "<<" ] ; ["\\>\\>" ; ">>" ] ) )
mark woytovich   mark woytovich, ignotum inc
Dec 18, 2019
Weird... I'm having a problem with this CF in a newly created file. It will not "merge" when there is >1 set of <> merge elements. I have been using this CF elsewhere with great success.

For example this yields nothing, but when I remove <> for example, it works for what is left.

Message goes here.

Anyone have any ideas?
mark woytovich   mark woytovich, ignotum inc
Dec 18, 2019
so that when I entered my placeholders surrounded by << and >> it substituted out what I typed... I hope you understand what was supposed to be the example.
mark woytovich   mark woytovich, ignotum inc
Dec 18, 2019
And I just found that the "MailMerge" CF works....

Log in to post comments.


Note: these functions are not guaranteed or supported by Please contact the individual developer with any questions or problems.

Support this website.

This library has been a free commmunity resource for FileMaker users and developers for 16 years. It receives no funding and has no advertisements. If it has helped you out, I'd really appreciate it if you could contribute whatever you think it's worth: