2012-03-24 13 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

このような何か試してみてください:これはheaderはあなたに完全なヘッダ部分を与え、bodyは、電子メールの本文であるフラグで記述された「フィールド」を開催リストを返す必要があります

(imap-get-messages imap '(1) '(uid flags 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

+0

ヘッダーフィールドだけを使ってimap-get-messagesを呼び出すと、戻り値が返されます。私はちょうど送信者の電子メールアドレス、受信者の電子メールアドレス、日付とその戻り値からの件名が欲しいです。戻り値は文字列ではありません。それはリストです。私はリストからこの部分のデータを取得する方法や、このリストを文字列に変換する方法はありません。この情報を取得するために使用するコードはどれですか?前もって感謝します。 – chom

+0

サンプルコードで更新しました。 –

関連する問題