From a5b2ca350481965099ff21db66fefe55282efaa5 Mon Sep 17 00:00:00 2001 From: Thomas Hintz Date: Sat, 18 Jan 2014 10:49:02 -0800 Subject: [PATCH] Initial version. --- cl-sendgrid.asd | 9 +++++++++ cl-sendgrid.lisp | 20 ++++++++++++++++++++ packages.lisp | 5 +++++ 3 files changed, 34 insertions(+) create mode 100644 cl-sendgrid.asd create mode 100644 cl-sendgrid.lisp create mode 100644 packages.lisp diff --git a/cl-sendgrid.asd b/cl-sendgrid.asd new file mode 100644 index 0000000..d0b96ce --- /dev/null +++ b/cl-sendgrid.asd @@ -0,0 +1,9 @@ +(defpackage :cl-sendgrid-system (:use :asdf :cl)) + +(in-package :cl-sendgrid-system) + +(defsystem :cl-sendgrid + :version "0.1" + :depends-on (drakma yason flexi-streams) + :components ((:file "packages") + (:file "cl-sendgrid" :depends-on ("packages")))) diff --git a/cl-sendgrid.lisp b/cl-sendgrid.lisp new file mode 100644 index 0000000..7914a40 --- /dev/null +++ b/cl-sendgrid.lisp @@ -0,0 +1,20 @@ +(in-package :cl-sendgrid) + +(define-condition sendgrid-error (error) + ((message :initarg :message :reader message))) + +(defun send-email (&key api-user api-key subject to text html from) + (let ((r (parse (flexi-streams:octets-to-string + (http-request "https://sendgrid.com/api/mail.send.json" + :method :post + :parameters `(("api_user" . ,api-user) + ("api_key" . ,api-key) + ("subject" . ,subject) + ("to" . ,to) + ("text" . ,text) + ("html" . ,html) + ("from" . ,from)))) + :object-as :alist))) + (if (string-equal (cdr (assoc "message" r :test #'string-equal)) "success") + t + (error 'sendgrid-error :message (cdr (assoc "errors" r :test #'string-equal)))))) diff --git a/packages.lisp b/packages.lisp new file mode 100644 index 0000000..c5bf0b8 --- /dev/null +++ b/packages.lisp @@ -0,0 +1,5 @@ +(in-package :cl-user) + +(defpackage #:cl-sendgrid + (:use :cl :drakma :yason) + (:export #:send-email #:sendgrid-error))