Sendgrid + Mako email templates quick code review
Here a few things I spotted (not necessarily design related):


vars is a builtin, and should be avoided as a variable name.  Many template systems call this the context (what you are calling vars), so that's probably a better name.
Defaulting function parameters to mutable objects (as you do in the line below) is dangerous (can produce unexpected results, if you're not familiar with how python handles function-param defaults).  See Why are default arguments evaluated at definition time in Python? For more information.

def __init__(self, addr_from, subject,context={},text="",

Instead, you should do something like this:

def __init__(self, addr_from, subject, context=None, text="",
             temp_path=None, temp_filename=None):
    context = context or {}

I'm not sure the if temp_path ... / return "" is the best design.  It took me a bit longer than it should to figure out why you were doing that.  One alternative would be to move the conditional into the __init__ function, so it doesn't look like an error is being handled with return "".