# SendGrid and Phoenix Framework

This is a small tutorial explaining how to use SendGrid to send emails in Phoenix Framework (1.4)

We need to start by adding Bamboo to mix.exs dependencies:

Add to defp deps do list

 1 2  {:bamboo, "~> 1.2"}, {:poison, "~> 4.0"}

Then in your config.exs add the following lines:

 100 101 102  config :my_app, MyProject.Mail, adapter: Bamboo.SendGridAdapter, api_key: System.get_env("SENDGRID_API_KEY")

:my_app should be the same atom being used in the other configurations in this file.

MyProject.Mail should be a module defined by use that will handle all the sending of emails.

I’m using environment variables to allow for the configuration to be more dynamic, specially between environments (dev, staging, production, etc)

To define the environment variable just define in the terminal export SENDGRID_API_KEY=you-key-here. This way Phoenix can pick it up at runtime, using System.get_env.

After this we need to create our module that is going to handle the sending of emails from our project.

Lets create a file called lib/my_project/mail.ex and add:

  1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42  defmodule MyProject.Mail do use Bamboo.Mailer, otp_app: :my_app import Bamboo.SendGridHelper import Bamboo.Email def send_notification_email(email, hash) do html = """ %PRODUCT% - %TITLE%

%TITLE%

""" title = "Finish creating your account" new_email() |> to(email) |> subject("Email Confirmation") |> substitute("%HOST%", @host) |> substitute("%TITLE%", title) |> html_body(html) |> deliver_now() end end