2012-03-24 79 views
3

我正在使用以下代碼獲取IMAP連接。我想閱讀電子郵件。我讀了這個文檔 link 並不能從這裏開始。在球拍中使用IMAP讀取電子郵件

我的代碼:

#lang racket 

(define imap-server "*****") 
(define imap-port-no ***) 
(define username "*****") 
(define pw "*****") 
(define mailbox-name "INBOX") 

(require openssl/mzssl 
     net/imap 
     mzlib/etc) 

(define (test-connect) 
    (let ([c (ssl-make-client-context)]) 
    (let-values ([(in out) (ssl-connect imap-server imap-port-no c)]) 
     (imap-connect* in out username pw mailbox-name)))) 

(define-values (imap cnt recent) (test-connect)) 

我收到電子郵件從這個最近的郵件的數量和次數。如何從這裏開始。我應該打電話閱讀電子郵件的功能。 在此先感謝。

回答

4

嘗試這樣:

(imap-get-messages imap '(1) '(uid flags header body)) 

這應該返回持有的旗幟,在那裏header爲您提供了完整的頭部分中描述的「字段」列表,body是電子郵件正文。 (這只是一個快速實驗,看看事情是否正常,您需要知道要檢索哪些郵件等 - 全部在the documentation中描述。)

這是一個完整的程序,返回標題列表需要INBOX中的每條消息,其中每條消息都以字符串的形式獲取標題和值的列表。但是請注意,電子郵件是不是這樣的事情真的可靠 - 您可以收到一條消息,不管是什麼出現在To:領域,也有類似的語義許多其它的頭(例如,Resent-To:類似於To:,有時有一個Sender:頭可以比From:更可靠等)。

#lang racket/base 

(define imap-server "imap.somewhere.com") 
(define imap-port-no 1234) 
(define username "----") 
(define pw "----") 
(define mailbox-name "INBOX") 

(require racket/list openssl/mzssl net/imap net/head) 

(define (test-connect) 
    (let ([c (ssl-make-client-context)]) 
    (let-values ([(in out) (ssl-connect imap-server imap-port-no c)]) 
     (imap-connect* in out username pw mailbox-name)))) 

(define-values [imap messages recent] (test-connect)) 

(define (get-interesting-headers ns) 
    (for/list ([x (imap-get-messages imap ns '(header))]) 
    (filter-map 
    (λ (x) 
     (define s 
     (string->symbol (string-downcase (bytes->string/utf-8 (car x))))) 
     (and (memq s '(from to date subject)) 
      (cons s (bytes->string/utf-8 (cdr x))))) 
    (extract-all-fields (car x))))) 
(get-interesting-headers (for/list ([i messages]) (add1 i))) 
+0

非常感謝解決方案。 – chom 2012-03-25 22:25:28

+0

當我使用頭字段調用imap-get-messages時,我得到了返回值。我只是想要發件人的電子郵件地址,收件人的電子郵件地址,日期和主題從該返回值。返回值不是一個字符串。這是一個列表。我不知道如何從列表中獲取這部分數據或將此列表轉換爲字符串。我應該使用哪一段代碼來獲取這些信息?提前致謝。 – chom 2012-03-25 22:38:08

+0

已更新爲示例代碼。 – 2012-03-26 07:59:58