Elixir MailSlurp Library

Official Elixir library for MailSlurp. Create email accounts then send and receive email from Elixir, Erlang, Phoenix and more.


There are multiple ways to install MailSlurp.

Note: replace the version shown with the latest version on hex.pm.


{:mailslurp, "~> 11.6"}


{mailslurp, "11.6.0"}


dep_mailslurp = hex 11.6.0

MailSlurp uses Tesla client and httpc by default. Hackney is recommended as it handles some MailSlurp POST methods with empty bodies.

defp deps do
  {:hackney, "~> 1.17.4"},
  {:mailslurp, "~> 11.6.1"}

Configure client


Create a MailSlurp account to obtain a free API KEY.

find api key

Configure Tesla

The MailSlurp REST API is split into controllers. Each method accepts a Tesla client as the first parameter.

# create a tesla client for MailSlurp controllers
middleware = [
  # set x-api-key header with MailSlurp API Key
  {Tesla.Middleware.Headers, [{"x-api-key", "your-mailslurp-api-key-here"}]},
  {Tesla.Middleware.BaseUrl, "https://api.mailslurp.com"},
  {Tesla.Middleware.EncodeJson, engine: Poison}
# use hackney adapter instead of httpc
adapter = {Tesla.Adapter.Hackney, [recv_timeout: 30_000]}
# create a connection
connection = Tesla.client(middleware, adapter)

Use controllers

Controller method return values can be matched against :ok, T or :error, :info.

# handle ok result and response
{ :ok, inbox } = MailSlurpAPI.Api.InboxController.create_inbox(connection)
# handle error
{ :error, info } = MailSlurpAPI.Api.InboxController.create_inbox(connection)


Here are some common use cases. See the documentation or examples pages for more information.

Create inbox

Inboxes have an emailAddress and id.

# create test email address
{ :ok, inbox } = MailSlurpAPI.Api.InboxController.create_inbox(connection)
assert inbox.emailAddress =~ "@mailslurp."

Receive email

{:ok, email} = MailSlurpAPI.Api.WaitForController.wait_for_latest_email(connection, [
    :inboxId = inbox.id,
    :timeout = 30_000,
    :unreadOnly = true

Send email

MailSlurpAPI.Api.InboxController.send_email(connection, inbox.id, [
    to: [inbox.emailAddress],
    subject: "test",
    body: "Hello"