Mailgun API in clojure
Switch branches/tags
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
src/mailgun
test/mailgun
.gitignore
CHANGELOG.md
LICENSE
README.md
project.clj

README.md

mailgun

Clojars Project

A Clojure wrapper for mailgun API.

Leiningen

[nilenso/mailgun "0.2.3"]

Maven

<dependency>
  <groupId>nilenso</groupId>
  <artifactId>mailgun</artifactId>
  <version>0.2.2</version>
</dependency>

Usage

(:require [mailgun.mail :as mail]
          [mailgun.util :refer [to-file]])

The send-mail function takes two argument mailgun credentials and email content which has to be given in the following format

(def creds {:key "key-3ax6xnjp29jd6fds4gc373sgvjxteol1" :domain "bar.com"})

(def content {:from "no-reply@bar.com"
              :to "someone@foo.com"
              :subject "Test"
              :html "test body"
              :attachment (to-file ["/path/to/file1.doc" "/path/to/file2.doc"])})

The value of the :attachment has to be a vector of files to be attached. If there are no files to be attached then don't include the :attachment keyword in the content.

send message

(mail/send-mail creds content)

get messages

There are functions that help you retrieve stored messages from mailgun and parse them as required and also download attachments if any.

  • get-stored-message

The get-stored-message function gets the complete mail response from mailgun.

(mail/get-stored-message creds msg-key)
  • parse

This helps parse the :body of the mail

(mail/parse ["subject"] msg-body)
  • parse-message

This is wrapper over the parse function, which parses the basic fields like - to, sender, bcc, cc, subject, date, body-html and attachments.

(mail/parse-message msg-body)

Here is an example -

(let [msg-key "eyJRhImsiOiAiZ1IiwgInMiOiAiNmNlTQ3NTY4ZGZSwg0MWRmLWEwODQtNzCJjIjogImJpZ3RhbmtzMiJMtMzQ0OC0NWJiY2Q4ODQMDkwMzk4ZCIsIwIjogdHJ19"
      msg-body (->> msg-key
                    (mail/get-stored-message creds)
                    :body)
      recipients (mail/parse ["To" "Cc" "Bcc"] msg-body)
      message (mail/parse-message msg-body)]
  (println recipients)
  (println message))
=> {:to "bar124@foomail.com" :bcc "someone_else@foo.in" :cc nil}
=> {:sender "foo@bar.com", :to "bar123@foomail.com", :bcc "someone_else@foo.in", :cc nil, :subject "Message Subject", :date "Mon, 2 May 2016 14:43:28 +0530", :body-html "<div dir=\"ltr\"><br clear=\"all\"><div><br></div><br>\r\n</div>\r\n", :attachments [{"url" "https://api.mailgun.net/v2/domains/foomail.in/messages/eyJRhImsiOiAiZ1IiwgInMiOiAiNmNlTQ3NTY4ZGZSwg0MWRmLWEwODQtNzCJjIjogImJpZ3RhbmtzMiJMtMzQ0OC0NWJiY2Q4ODQMDkwMzk4ZCIsIwIjogdHJ19/attachments/0", "content-type" "image/jpeg", "name" "Image1.jpg", "size" 267928} {"url" "https://api.mailgun.net/v2/domains/foomail.in/messages/eyJRhImsiOiAiZ1IiwgInMiOiAiNmNlTQ3NTY4ZGZSwg0MWRmLWEwODQtNzCJjIjogImJpZ3RhbmtzMiJMtMzQ0OC0NWJiY2Q4ODQMDkwMzk4ZCIsIwIjogdHJ19/attachments/1", "content-type" "image/jpeg", "name" "Image2.jpg", "size" 477946}]}

download attachments

The download-attachment function can be used to download attachments give the attachment url and the credentials

(let [attch-url "https://api.mailgun.net/v2/domains/foomail.in/messages/eyJRhImsiOiAiZ1IiwgInMiOiAiNmNlTQ3NTY4ZGZSwg0MWRmLWEwODQtNzCJjIjogImJpZ3RhbmtzMiJMtMzQ0OC0NWJiY2Q4ODQMDkwMzk4ZCIsIwIjogdHJ19/attachments/0"]
  (mail/download-attachment creds attch-url))
=> #object[java.io.BufferedInputStream 0xffb1f95 "java.io.BufferedInputStream@ffb1f95"]

License

Copyright © 2016 Nilenso

Distributed under the Eclipse Public License either version 1.0 or (at your option) any later version.