30 lines
814 B
Racket
30 lines
814 B
Racket
#lang scheme
|
|
|
|
(require mzlib/list net/head)
|
|
|
|
(define msgs
|
|
(sort (filter (lambda (x) (regexp-match #rx"^[0-9]*$" (path->string x))) (directory-list))
|
|
(lambda (a b) (< (string->number (path->string a))
|
|
(string->number (path->string b))))))
|
|
|
|
(define mailbox
|
|
(let loop ([msgs msgs][p 1])
|
|
(if (null? msgs)
|
|
null
|
|
(let ([msg (car msgs)]
|
|
[rest (loop (cdr msgs) (add1 p))])
|
|
(let ([header (with-input-from-file msg
|
|
(lambda () (read-string (file-size msg))))])
|
|
(cons (list
|
|
(string->number (path->string msg))
|
|
p
|
|
(file-exists? (format "~abody" msg))
|
|
(extract-field "From" header)
|
|
(extract-field "Subject" header)
|
|
null
|
|
#f)
|
|
rest))))))
|
|
|
|
(with-output-to-file "mailbox" (lambda () (write mailbox) (newline))
|
|
#:exists 'truncate)
|