我该如何使用Clojure阅读我的电子邮件?

3
我希望用Clojure解析我的IMAP收件箱中的消息。
我知道有clojure-mail库,但我没有Gmail帐户。谢谢!

3
Java有许多可用的IMAP库。 - Charles Duffy
@CharlesDuffy 用Clojure使用Java库的答案也很酷。 - leontalbot
@LeonidBeschastny,...这个问题的提问者已经知道了,并且在问题中也提到了,但由于仅适用于Gmail,因此无法使用。 - Charles Duffy
@leontalbot,...那么,您认为回答的基本要素是什么?从Clojure使用IMAP客户端库并不是特别困难,但编写一个良好的、惯用的本地封装器需要付出努力,而SO并不是“免费为我完成我的工作”的场所。 - Charles Duffy
就我个人而言,我会考虑使用Apache Commons中的IMAP客户端;请参见http://commons.apache.org/proper/commons-net/apidocs/org/apache/commons/net/imap/package-summary.html。 - Charles Duffy
1个回答

5
Apache Commons IMAP客户端库是一个不错的选择。如果不关心失败处理,他们示例程序的核心可以在不到20行Clojure代码中轻松复制。请保留HTML标签。
(ns mail-client.core
  (:import [org.apache.commons.net PrintCommandListener]
            [org.apache.commons.net.imap IMAPClient]))

(defn get-mail [server username password]
  (doto (IMAPClient.)
    (.setDefaultTimeout 60000)
    (.addProtocolCommandListener (PrintCommandListener. System/out true))
    (.connect server)
    (.login username password)
    (.setSoTimeout 6000)
    (.capability)
    (.select "inbox")
    (.examine "inbox")
    (.status "inbox" (into-array String ["MESSAGES"]))
    (.logout)
    (.disconnect)))

谢谢!我已经用 :import 替换了 :include。我该如何指定端口号?谢谢! - leontalbot
如果您查看文档(http://commons.apache.org/proper/commons-net/apidocs/org/apache/commons/net/imap/IMAPClient.html),您会发现`connect`方法是从`org.apache.commons.net.SocketClient`继承而来的,因此有一个接受端口号的两个参数形式。 - Charles Duffy
当然,如果您的端口号是用于通过SSL进行连接的端口号,则需要使用IMAPSClient而不是IMAPClient。上游文档值得熟悉。 - Charles Duffy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接