I think your decision depends on the volume and feature requirements.
For quick and dirty, you can roll your own function and have your service send it to an smtp server. I've included a simple example, which is based on the SmtpAppender in logback
If you want tracking, segmentation, engagement campaigns, help with spam filtering, etc. you will probably want to engage with a vendor thru their api. Some example vendors are SailThru and Cheetahmail
Another thing to consider is sending all of your email messages to a queue, and having worker processes send the emails. Whether the consumers are a vendor api, or your own code, it provides more flexibility down the road.