blob: 2a68e7b487ef4bb602cfdb4f43aabd2c96daec59 (
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
|
(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 (new StringTemplateGroup "dumpfm-mail" "template/mail"))
(.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]
(let [[s b] (parse-mail-template "welcome" {"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)))
|