/
transport.clj
39 lines (35 loc) · 1.18 KB
/
transport.clj
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
(ns tarayo.mail.transport
(:import
(com.sun.mail.smtp
SMTPTransport)
jakarta.mail.Session
(jakarta.mail.internet
MimeMessage)))
(defn- ^String get-protocol
[^Session session]
;; c.f. https://jakarta.ee/specifications/mail/1.6/apidocs/com/sun/mail/smtp/package-summary.html
(if (= "true" (.getProperty session "mail.smtp.ssl.enable"))
"smtps"
"smtp"))
(defn ^SMTPTransport make-transport
[^Session session]
(.getTransport session (get-protocol session)))
(defn connect!
"Make connection to the specified SMTP server.
This connection will be closed by `tarayo.core/close`."
[^SMTPTransport transport smtp-server]
(let [{:keys [host port user password]} smtp-server]
(.connect transport host port user password)))
(defn send!
"Send a specified message via `SMTPTransport`."
[^SMTPTransport transport ^MimeMessage message]
(try
(.sendMessage transport message (.getAllRecipients message))
{:result :success
:code (.getLastReturnCode transport)
:message (.getLastServerResponse transport)}
(catch Throwable ex
{:result :failed
:code (.getLastReturnCode transport)
:message (.getMessage ex)
:cause ex})))