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