Liking cljdoc? Tell your friends :D

sendgrid

[Clojars Project]clojars-sendgrid

A Clojure library for sending emails with SendGrid.

Usage

(require '[sendgrid.core :as sendgrid])

(def sg-config
  {:api-key "d34db33f"})

;; Send a plain-text email
(sendgrid/send-email sg-config
                     {:to      "email@example.com"
                      :from    "email2@example.com"
                      :subject "SendGrid Test"
                      :text    "Email body here."})
;; => {:message "success"}

;; Send an HTML email
(sendgrid/send-email sg-config
                     {:to      "email@example.com"
                      :from    "email2@example.com"
                      :subject "SendGrid Test"
                      :html    "<h1>Email body here.</h1>"})
;; => {:message "success"}

For details on individual request params, please see the SendGrid API documentation.

Emails can also include attachments via the :attachments param. Attachments must be a sequence of maps where each map contains a :name and :content and optionally a :mime-type (String). :content can be a File, InputStream, ByteArray, or String.

(let [attachments
      [{:name "plain.txt", :mime-type "text/plain", :content "Simple."}
       {:name "yay.jpg",   :content (-> "yay.jpg" io/resource io/file)}]]
  (sendgrid/send-email sg-config
                       {:to          "email@example.com"
                        :from        "email2@example.com"
                        :subject     "SendGrid Test"
                        :html        "<h1>Email body here.</h1>"
                        :attachments attachments}))
;; => {:message "success"}

Testing

To run the tests you'll need the following environment variables set:

  • SENDGRID_API_KEY
  • FROM_EMAIL
  • TO_EMAIL

Alternately you can set these values in a profiles.clj file (see Environ for more information).

Please note that the tests will send real emails to the TO_EMAIL you've set, and will count against your SendGrid email quota.

Motivation

Features differentiating this library from (some of) the alternatives:

  • Idiomatic Clojure.
  • No global state.
  • Convenient handling of files (whether generated or served from the file system).
  • No errors on long message contents.
  • No assumptions about error handling (error handling is caller's responsibility).

License

Copyright © 2016 Cameron Desautels

Distributed under the MIT License.

Can you improve this documentation?Edit on GitHub

cljdoc is a website building & hosting documentation for Clojure/Script libraries

× close