summaryrefslogtreecommitdiff
path: root/src/email.clj
blob: 47d05a87eee4a4af5e3a7dbf29fc7122988295f4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
(ns email
  (:import org.antlr.stringtemplate.StringTemplateGroup)
  (:require [clojure.contrib.str-utils2 :as str-utils2]))

(defn base-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))))

(def mail-templates (StringTemplateGroup. "dumpfm-mail" "template/mail" ))
;;(.setErrorListener mail-templates StringTemplateGroup/DEFAULT_ERROR_LISTENER)
(.setRefreshInterval mail-templates 3)

(defn parse-mail-template [temp props]
  (let [st (.getInstanceOf mail-templates temp)]
    (doseq [[k v] props]
      (.setAttribute st k v))
    (let [[s b] (.split (.toString st) "\\n" 2)]
      [(.trim (.replaceFirst s "SUBJECT: " ""))
       (.trim b)])))

(defn dump-mail [to subject text]
  (base-mail :user "info@dump.fm"
             :password "dumprulez7"
             :host "smtpout.secureserver.net"
             :port 25
             :ssl false
             :to to
             :subject subject
             :text text))

(defn send-registration-email 
  ([nick email] (send-registration-email nick email "welcome"))
  ([nick email temp]
     (let [[s b] (parse-mail-template temp {"nick" nick})]
       (dump-mail [email] s b))))

(defn send-reset-email [nick email key]
  (let [[s b] (parse-mail-template "reset" {"nick" nick "key" key})]
    (dump-mail [email] s b)))