Using Java Mail API from Clojure
Java API does not provide a way to send mail or interface with POP/IMAP servers, but Sun does provide a framework to build mail and messaging applications.
You can get the JavaMail API here. Following is a simple function that allows you to send mail from clojure.
- activation.jar
- mailapi.jar
- smtp.jar
If you just need to send email from your clojure applications, just grab the jar's listed above. I use this snippet to send email through GMail, i have not tested it anywhere else, but it should work.
(defn mail [& m]
(let [mail (apply hash-map m)
props (java.util.Properties.)]
(doto props
(.put "mail.smtp.host" (:host mail))
(.put "mail.smtp.port" (:port mail))
(.put "mail.smtp.user" (:user mail))
(.put "mail.smtp.socketFactory.port" (:port mail))
(.put "mail.smtp.auth" "true"))
(if (= (:ssl mail) true)
(doto props
(.put "mail.smtp.starttls.enable" "true")
(.put "mail.smtp.socketFactory.class"
"javax.net.ssl.SSLSocketFactory")
(.put "mail.smtp.socketFactory.fallback" "false")))
(let [authenticator (proxy [javax.mail.Authenticator] []
(getPasswordAuthentication
[]
(javax.mail.PasswordAuthentication.
(:user mail) (:password mail))))
session (javax.mail.Session/getDefaultInstance props authenticator)
msg (javax.mail.internet.MimeMessage. session)]
(.setFrom msg (javax.mail.internet.InternetAddress. (:user mail)))
(doseq [to (:to mail)]
(.setRecipients msg
(javax.mail.Message$RecipientType/TO)
(javax.mail.internet.InternetAddress/parse to)))
(.setSubject msg (:subject mail))
(.setText msg (:text mail))
(javax.mail.Transport/send msg))))
(mail :user user@gmail.com"
:password "pass"
:host "smtp.gmail.com"
:port 465
:ssl true
:to ["nurullah@nakkaya.com" ]
:subject "I Have Rebooted."
:text "I Have Rebooted.")