We added placeholder fields on the contact record and then created workflows that send the emails. In those workflows: it pulls the value from the custom object into that placeholder field, sends the email, and then clears the field so it can be used again. Not ideal, but it works.