1;;; url-imap.el --- IMAP retrieval routines 2 3;; Copyright (C) 1999, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. 4 5;; Author: Simon Josefsson <jas@pdc.kth.se> 6;; Keywords: comm, data, processes 7 8;; This file is part of GNU Emacs. 9 10;; GNU Emacs is free software; you can redistribute it and/or modify 11;; it under the terms of the GNU General Public License as published by 12;; the Free Software Foundation; either version 2, or (at your option) 13;; any later version. 14 15;; GNU Emacs is distributed in the hope that it will be useful, 16;; but WITHOUT ANY WARRANTY; without even the implied warranty of 17;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18;; GNU General Public License for more details. 19 20;; You should have received a copy of the GNU General Public License 21;; along with GNU Emacs; see the file COPYING. If not, write to the 22;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 23;; Boston, MA 02110-1301, USA. 24 25;;; Commentary: 26 27;; Anyway, here's a teaser. It's quite broken in lots of regards, but at 28;; least it seem to work. At least a little. At least when called 29;; manually like this (I've no idea how it's supposed to be called): 30 31;; (url-imap (url-generic-parse-url "imap://cyrus.andrew.cmu.edu/archive.c-client;UID=1021")) 32 33;;; Code: 34 35(eval-when-compile (require 'cl)) 36(require 'url-util) 37(require 'url-parse) 38(require 'nnimap) 39(require 'mm-util) 40 41(defconst url-imap-default-port 143 "Default IMAP port") 42 43(defun url-imap-open-host (host port user pass) 44 ;; xxx use user and password 45 (if (fboundp 'nnheader-init-server-buffer) 46 (nnheader-init-server-buffer)) 47 (let ((imap-username user) 48 (imap-password pass) 49 (authenticator (if user 'login 'anonymous))) 50 (nnimap-open-server host 51 `((nnimap-server-port ,port) 52 (nnimap-stream 'network) 53 (nnimap-authenticator ,authenticator))))) 54 55(defun url-imap (url) 56 (check-type url vector "Need a pre-parsed URL.") 57 (save-excursion 58 (set-buffer (generate-new-buffer " *url-imap*")) 59 (mm-disable-multibyte) 60 (let* ((host (url-host url)) 61 (port (url-port url)) 62 ;; xxx decode mailbox (see rfc2192) 63 (mailbox (url-filename url)) 64 (coding-system-for-read 'binary)) 65 (and (eq (string-to-char mailbox) ?/) 66 (setq mailbox (substring mailbox 1))) 67 (url-imap-open-host host port (url-user url) (url-password url)) 68 (cond ((assoc "TYPE" (url-attributes url)) 69 ;; xxx list mailboxes (start gnus?) 70 ) 71 ((assoc "UID" (url-attributes url)) 72 ;; fetch message part 73 ;; xxx handle partial fetches 74 (insert "Content-type: message/rfc822\n\n") 75 (nnimap-request-article (cdr (assoc "UID" (url-attributes url))) 76 mailbox host (current-buffer))) 77 (t 78 ;; xxx list messages in mailbox (start gnus?) 79 ))) 80 (current-buffer))) 81 82;;; arch-tag: 034991ff-5425-48ea-b911-c96c90e6f47d 83;;; url-imap.el ends here 84