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 jars from Clojars,
[javax.mail/mail "1.4.3"]
Following is a simple function that allows you to send mail from Clojure. 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))))
recipients (reduce #(str % "," %2) (:to mail))
session (javax.mail.Session/getInstance props authenticator)
msg (javax.mail.internet.MimeMessage. session)]
(.setFrom msg (javax.mail.internet.InternetAddress. (:user mail)))
(.setRecipients msg
(javax.mail.Message$RecipientType/TO)
(javax.mail.internet.InternetAddress/parse recipients))
(.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.")