Elixir Mailgun Client
Clone or download
Latest commit ace116f Mar 11, 2016
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
config Update readme Oct 1, 2014
fixture Add an option for file content as a string in an attachment map Nov 29, 2015
lib Update client.ex Nov 30, 2015
test Add an option for file content as a string in an attachment map Nov 29, 2015
.gitignore Make it so Oct 1, 2014
.travis.yml add travis Aug 18, 2015
LICENSE Add license Oct 1, 2014
README.md Updates version in README Jan 20, 2016
mix.exs also allow for poison 2 Mar 11, 2016
mix.lock update poison to 1.4.0 Jun 6, 2015

README.md

Elixir Mailgun Client Build Status

# config/config.exs

config :my_app, mailgun_domain: "https://api.mailgun.net/v3/mydomain.com",
                mailgun_key: "key-##############"


# lib/mailer.ex
defmodule MyApp.Mailer do
  @config domain: Application.get_env(:my_app, :mailgun_domain),
          key: Application.get_env(:my_app, :mailgun_key)
  use Mailgun.Client, @config
                      

  @from "info@example.com"

  def send_welcome_text_email(user) do
    send_email to: user.email,
               from: @from,
               subject: "hello!",
               text: "Welcome!"
  end

  def send_welcome_html_email(user) do
    send_email to: user.email,
               from: @from,
               subject: "hello!",
               html: "<strong>Welcome!</strong>"
  end

 # attachments expect a list of maps. Each map should have a filename and path/content

  def send_greetings(user, file_path) do
    send_email to: user.email,
               from: @from,
               subject: "Happy b'day",
               html: "<strong>Cheers!</strong>",
               attachments: [%{path: file_path, filename: "greetings.png"}]
  end

  def send_invoice(user) do
    pdf = Invoice.create_for(user) # a string
    send_email to: user.email,
               from: @from,
               subject: "Invoice",
               html: "<strong>Your Invoice</strong>",
               attachments: [%{content: pdf, filename: "invoice.pdf"}]
  end
end


iex> MyApp.Mailer.send_welcome_text_email(user)
{:ok, ...}

Installation

Add mailgun to your mix.exs dependencies:

def deps do
  [ {:mailgun, "~> 0.1.2"} ]
end

Test mode

For testing purposes mailgun can output emails to a local file instead of actually sending them. Just set the mode configuration key to :test and the test_file_path to where you want that file to appear.

# lib/mailer.ex
defmodule MyApp.Mailer do
  @config domain: Application.get_env(:my_app, :mailgun_domain),
          key: Application.get_env(:my_app, :mailgun_key),
          mode: :test,
          test_file_path: "/tmp/mailgun.json"
  use Mailgun.Client, @config

...
end

httpc options

Under the hood the client uses httpc to call Mailgun REST API. You can inject any valid httpc options to your outbound requests by defining them within httpc_opts config entry:

# lib/mailer.ex
defmodule MyApp.Mailer do
  @config domain: Application.get_env(:my_app, :mailgun_domain),
          key: Application.get_env(:my_app, :mailgun_key),
          httpc_opts: [connect_timeout: 2000, timeout: 3000]
  use Mailgun.Client, @config
...