comply with CAN-SPAM in workflow messages
Take out the $ signs. Smarty variables use $ signs, tokens don't. It is a little bit awkward when they're mixed in the same template.

I don't know the legal answer to the other part of the question, but bulk mailings include it by default.