|
| 1 | +(ns hacker-scripts.kumar |
| 2 | + (:import |
| 3 | + (java.util Properties) |
| 4 | + (javax.mail Session Authenticator PasswordAuthentication Message$RecipientType Transport Folder Flags Flags$Flag) |
| 5 | + (javax.mail.internet MimeMessage InternetAddress) |
| 6 | + (javax.mail.search FlagTerm FromTerm AndTerm OrTerm SubjectTerm BodyTerm SearchTerm))) |
| 7 | + |
| 8 | +(def host "smtp.gmail.com") |
| 9 | +( def my-email "[email protected]") |
| 10 | +(def my-password "my-gmail-password") |
| 11 | +( def kumar-email "[email protected]") |
| 12 | + |
| 13 | +(def seen-flag (Flags. (Flags$Flag/SEEN))) |
| 14 | + |
| 15 | +(def unread-term (FlagTerm. seen-flag false)) |
| 16 | + |
| 17 | +(defn get-session [] |
| 18 | + (let [authenticator (proxy [Authenticator] [] |
| 19 | + (getPasswordAuthentication [] |
| 20 | + (PasswordAuthentication. my-email my-password))) |
| 21 | + props (Properties.)] |
| 22 | + (.put props "mail.smtp.host" "smtp.gmail.com") |
| 23 | + (.put props "mail.smtp.port" "587") |
| 24 | + (.put props "mail.smtp.auth" "true") |
| 25 | + (.put props "mail.smtp.starttls.enable" "true") |
| 26 | + (.. Session (getInstance props authenticator)))) |
| 27 | + |
| 28 | +(defn get-inbox [session] |
| 29 | + (let [store (.getStore session "imaps") |
| 30 | + inbox (do |
| 31 | + (.connect store host my-email my-password) |
| 32 | + (.getFolder store "inbox"))] |
| 33 | + (.open inbox Folder/READ_WRITE) |
| 34 | + inbox)) |
| 35 | + |
| 36 | +(defn get-no-worries-message [session] |
| 37 | + (let [message (MimeMessage. session)] |
| 38 | + (.setFrom message (InternetAddress. my-email)) |
| 39 | + (.addRecipient message Message$RecipientType/TO (InternetAddress. kumar-email)) |
| 40 | + (.setSubject message "Database fixes") |
| 41 | + (.setText message "No worries mate, be careful next time") |
| 42 | + message)) |
| 43 | + |
| 44 | +(defn search-term [pattern] |
| 45 | + (OrTerm. (into-array SearchTerm [(SubjectTerm. pattern) (BodyTerm. pattern)]))) |
| 46 | + |
| 47 | +(defn any-of-search-term [& patterns] |
| 48 | + (OrTerm. (into-array (map search-term patterns)))) |
| 49 | + |
| 50 | +(defn from-term [addr] |
| 51 | + (FromTerm. (InternetAddress. addr))) |
| 52 | + |
| 53 | +(defn get-unread-sos-from-kumar [inbox] |
| 54 | + (let [flag (AndTerm. (into-array SearchTerm [unread-term |
| 55 | + (from-term kumar-email) |
| 56 | + (any-of-search-term "help" "sorry" "trouble")]))] |
| 57 | + (.search inbox flag))) |
| 58 | + |
| 59 | +(defn mark-as-read [inbox messages] |
| 60 | + (.setFlags inbox messages seen-flag true)) |
| 61 | + |
| 62 | +(defn kumar-asshole [] |
| 63 | + (let [session (get-session) |
| 64 | + inbox (get-inbox session) |
| 65 | + unread-sos-from-kumar (get-unread-sos-from-kumar inbox)] |
| 66 | + (when (seq unread-sos-from-kumar) |
| 67 | + (mark-as-read inbox unread-sos-from-kumar) |
| 68 | + (Transport/send (get-no-worries-message session))))) |
0 commit comments