A terrifyingly long time ago — before some of you had your first job in martech — I wrote about Velocity “Poison Pills” for overly inclusive Smart Lists. That is, forcing a Java-level error so an email errors out instead of sending.
Brute force, but it works.
Someone asked me about that technique the other day, so I decided to rewrite my “throw an exception” Velocimacro so it shows better info in the Activity Log.
I now recommend #throw_v2
:
#macro( throw_v2 $message )
#if( !$message.isEmpty() )
#evaluate( "${esc.h}set( ${message} )" )
#end
#end
You can include the macro definition in your global Velocity {{my.velocity includes}} token. (As I always say, you do have global includes, right? ☺)
Then call it like so:
#throw_v2("ineligible")
Unlike the earlier macro, this one lets you pass a custom message which will show up in the Activity Log for the Email Bounced Soft:
Why it works
#set("blah")
is invalid Velocity, guaranteed to throw an error. By using #evaluate
and wrapping it in an isEmpty()
check, we delay the error until the macro is run (the macro will still compile so it’s available to other scripts).