mirror of
https://github.com/narkoz/hacker-scripts
synced 2025-08-23 02:47:14 +00:00
69 lines
2.5 KiB
Clojure
69 lines
2.5 KiB
Clojure
(ns hacker-scripts.kumar
|
|
(:import
|
|
(java.util Properties)
|
|
(javax.mail Session Authenticator PasswordAuthentication Message$RecipientType Transport Folder Flags Flags$Flag)
|
|
(javax.mail.internet MimeMessage InternetAddress)
|
|
(javax.mail.search FlagTerm FromTerm AndTerm OrTerm SubjectTerm BodyTerm SearchTerm)))
|
|
|
|
(def host "smtp.gmail.com")
|
|
(def my-email "my-email@gmail.com")
|
|
(def my-password "my-gmail-password")
|
|
(def kumar-email "kumar@gmail.com")
|
|
|
|
(def seen-flag (Flags. (Flags$Flag/SEEN)))
|
|
|
|
(def unread-term (FlagTerm. seen-flag false))
|
|
|
|
(defn get-session []
|
|
(let [authenticator (proxy [Authenticator] []
|
|
(getPasswordAuthentication []
|
|
(PasswordAuthentication. my-email my-password)))
|
|
props (Properties.)]
|
|
(.put props "mail.smtp.host" "smtp.gmail.com")
|
|
(.put props "mail.smtp.port" "587")
|
|
(.put props "mail.smtp.auth" "true")
|
|
(.put props "mail.smtp.starttls.enable" "true")
|
|
(.. Session (getInstance props authenticator))))
|
|
|
|
(defn get-inbox [session]
|
|
(let [store (.getStore session "imaps")
|
|
inbox (do
|
|
(.connect store host my-email my-password)
|
|
(.getFolder store "inbox"))]
|
|
(.open inbox Folder/READ_WRITE)
|
|
inbox))
|
|
|
|
(defn get-no-worries-message [session]
|
|
(let [message (MimeMessage. session)]
|
|
(.setFrom message (InternetAddress. my-email))
|
|
(.addRecipient message Message$RecipientType/TO (InternetAddress. kumar-email))
|
|
(.setSubject message "Database fixes")
|
|
(.setText message "No worries mate, be careful next time")
|
|
message))
|
|
|
|
(defn search-term [pattern]
|
|
(OrTerm. (into-array SearchTerm [(SubjectTerm. pattern) (BodyTerm. pattern)])))
|
|
|
|
(defn any-of-search-term [& patterns]
|
|
(OrTerm. (into-array (map search-term patterns))))
|
|
|
|
(defn from-term [addr]
|
|
(FromTerm. (InternetAddress. addr)))
|
|
|
|
(defn get-unread-sos-from-kumar [inbox]
|
|
(let [flag (AndTerm. (into-array SearchTerm [unread-term
|
|
(from-term kumar-email)
|
|
(any-of-search-term "help" "sorry" "trouble")]))]
|
|
(.search inbox flag)))
|
|
|
|
(defn mark-as-read [inbox messages]
|
|
(.setFlags inbox messages seen-flag true))
|
|
|
|
(defn kumar-asshole []
|
|
(let [session (get-session)
|
|
inbox (get-inbox session)
|
|
unread-sos-from-kumar (get-unread-sos-from-kumar inbox)]
|
|
(when (seq unread-sos-from-kumar)
|
|
(mark-as-read inbox unread-sos-from-kumar)
|
|
(Transport/send (get-no-worries-message session)))))
|