• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /macosx-10.9.5/emacs-92/emacs/lisp/gnus/

Lines Matching defs:imap

0 ;;; imap.el --- imap library
28 ;; imap.el is a elisp library providing an interface for talking to
31 ;; imap.el is roughly divided in two parts, one that parses IMAP
37 ;; The imap.el API consist of the following functions, other functions
43 ;; imap-open, imap-opened, imap-authenticate, imap-close,
44 ;; imap-capability, imap-namespace, imap-error-text
48 ;; imap-mailbox-get, imap-mailbox-map, imap-current-mailbox,
49 ;; imap-current-mailbox-p, imap-search, imap-mailbox-select,
50 ;; imap-mailbox-examine, imap-mailbox-unselect, imap-mailbox-expunge
51 ;; imap-mailbox-close, imap-mailbox-create, imap-mailbox-delete
52 ;; imap-mailbox-rename, imap-mailbox-lsub, imap-mailbox-list
53 ;; imap-mailbox-subscribe, imap-mailbox-unsubscribe, imap-mailbox-status
54 ;; imap-mailbox-acl-get, imap-mailbox-acl-set, imap-mailbox-acl-delete
58 ;; imap-fetch-asynch, imap-fetch,
59 ;; imap-current-message, imap-list-to-message-set,
60 ;; imap-message-get, imap-message-map
61 ;; imap-message-envelope-date, imap-message-envelope-subject,
62 ;; imap-message-envelope-from, imap-message-envelope-sender,
63 ;; imap-message-envelope-reply-to, imap-message-envelope-to,
64 ;; imap-message-envelope-cc, imap-message-envelope-bcc
65 ;; imap-message-envelope-in-reply-to, imap-message-envelope-message-id
66 ;; imap-message-body, imap-message-flag-permanent-p
67 ;; imap-message-flags-set, imap-message-flags-del
68 ;; imap-message-flags-add, imap-message-copyuid
69 ;; imap-message-copy, imap-message-appenduid
70 ;; imap-message-append, imap-envelope-from
71 ;; imap-body-lines
77 ;; imap.el support RFC1730/2060 (IMAP4/IMAP4rev1), implemented IMAP
91 ;; (imap-open "my.mail.server")
92 ;; => " *imap* my.mail.server:0"
95 ;; `imap-open'. It is possible to do all without this, but it would
97 ;; imap.el API functions.
99 ;; (imap-authenticate "myusername" "mypassword")
102 ;; (imap-mailbox-lsub "*")
105 ;; (imap-mailbox-list "INBOX.n%")
108 ;; (imap-mailbox-select "INBOX.nnimap")
111 ;; (imap-mailbox-get 'exists)
114 ;; (imap-mailbox-get 'uidvalidity)
117 ;; (imap-search "FLAGGED SINCE 18-DEC-98")
120 ;; (imap-fetch 235 "RFC822.PEEK" 'RFC822)
128 ;; imap-message-* functions.
161 (defalias 'imap-point-at-eol 'point-at-eol)
162 (defun imap-point-at-eol ()
169 (defgroup imap nil
174 (defcustom imap-kerberos4-program '("imtest -m kerberos_v4 -u %l -p %p %s"
178 %l with the value of `imap-default-user'. The program should accept
181 :group 'imap
184 (defcustom imap-gssapi-program (list
191 %l with the value of `imap-default-user'. The program should accept
194 :group 'imap
197 (defcustom imap-ssl-program '("openssl s_client -quiet -ssl3 -connect %s:%p"
206 :group 'imap
210 (defcustom imap-shell-program '("ssh %s imapd"
216 number on server, %g with `imap-shell-host', and %l with
217 `imap-default-user'. The program should read IMAP commands from stdin
220 :group 'imap
223 (defcustom imap-process-connection-type nil
232 :group 'imap
235 (defcustom imap-use-utf7 t
240 :group 'imap
243 (defcustom imap-log nil
244 "If non-nil, a imap session trace is placed in *imap-log* buffer.
246 information (such as e-mail) may be stored in the *imap-log*
249 :group 'imap
252 (defcustom imap-debug nil
253 "If non-nil, random debug spews are placed in *imap-debug* buffer.
255 information (such as e-mail) may be stored in the *imap-debug*
258 :group 'imap
261 (defcustom imap-shell-host "gateway"
263 :group 'imap
266 (defcustom imap-default-user (user-login-name)
268 :group 'imap
271 (defcustom imap-read-timeout (if (string-match
279 :group 'imap)
281 (defcustom imap-store-password nil
283 :group 'imap
288 (defvar imap-fetch-data-hook nil
291 (defvar imap-streams '(gssapi kerberos4 starttls tls ssl network shell)
294 (defvar imap-stream-alist
295 '((gssapi imap-gssapi-stream-p imap-gssapi-open)
296 (kerberos4 imap-kerberos4-stream-p imap-kerberos4-open)
297 (tls imap-tls-p imap-tls-open)
298 (ssl imap-ssl-p imap-ssl-open)
299 (network imap-network-p imap-network-open)
300 (shell imap-shell-p imap-shell-open)
301 (starttls imap-starttls-p imap-starttls-open))
310 (defvar imap-authenticators '(gssapi
318 (defvar imap-authenticator-alist
319 '((gssapi imap-gssapi-auth-p imap-gssapi-auth)
320 (kerberos4 imap-kerberos4-auth-p imap-kerberos4-auth)
321 (cram-md5 imap-cram-md5-p imap-cram-md5-auth)
322 (login imap-login-p imap-login-auth)
323 (anonymous imap-anonymous-p imap-anonymous-auth)
324 (digest-md5 imap-digest-md5-p imap-digest-md5-auth))
333 (defvar imap-error nil
338 (defconst imap-default-port 143)
339 (defconst imap-default-ssl-port 993)
340 (defconst imap-default-tls-port 993)
341 (defconst imap-default-stream 'network)
342 (defconst imap-coding-system-for-read 'binary)
343 (defconst imap-coding-system-for-write 'binary)
344 (defconst imap-local-variables '(imap-server
345 imap-port
346 imap-client-eol
347 imap-server-eol
348 imap-auth
349 imap-stream
350 imap-username
351 imap-password
352 imap-current-mailbox
353 imap-current-target-mailbox
354 imap-message-data
355 imap-capability
356 imap-namespace
357 imap-state
358 imap-reached-tag
359 imap-failed-tags
360 imap-tag
361 imap-process
362 imap-calculate-literal-size-first
363 imap-mailbox-data))
364 (defconst imap-log-buffer "*imap-log*")
365 (defconst imap-debug-buffer "*imap-debug*")
369 (defvar imap-stream nil)
370 (defvar imap-auth nil)
371 (defvar imap-server nil)
372 (defvar imap-port nil)
373 (defvar imap-username nil)
374 (defvar imap-password nil)
375 (defvar imap-calculate-literal-size-first nil)
376 (defvar imap-state 'closed
381 (defvar imap-server-eol "\r\n"
384 (defvar imap-client-eol "\r\n"
387 (defvar imap-current-mailbox nil
390 (defvar imap-current-target-mailbox nil
393 (defvar imap-mailbox-data nil
396 (defvar imap-mailbox-prime 997
397 "Length of imap-mailbox-data.")
399 (defvar imap-current-message nil
402 (defvar imap-message-data nil
405 (defvar imap-message-prime 997
406 "Length of imap-message-data.")
408 (defvar imap-capability nil
411 (defvar imap-namespace nil
414 (defvar imap-reached-tag 0
417 (defvar imap-failed-tags nil
423 (defvar imap-tag 0
426 (defvar imap-process nil
429 (defvar imap-continuation nil
433 (defvar imap-callbacks nil
442 (defun imap-remassoc (key alist)
451 (setcdr alist (imap-remassoc key (cdr alist)))
454 (defsubst imap-disable-multibyte ()
459 (defsubst imap-utf7-encode (string)
460 (if imap-use-utf7
465 "imap: Could not UTF7 encode `%s', using it unencoded..."
470 (defsubst imap-utf7-decode (string)
471 (if imap-use-utf7
476 "imap: Could not UTF7 decode `%s', using it undecoded..."
481 (defsubst imap-ok-p (status)
484 (setq imap-error status)
487 (defun imap-error-text (&optional buffer)
489 (nth 3 (car imap-failed-tags))))
495 (defun imap-kerberos4-stream-p (buffer)
496 (imap-capability 'AUTH=KERBEROS_V4 buffer))
498 (defun imap-kerberos4-open (name buffer server port)
499 (let ((cmds imap-kerberos4-program)
504 (let* ((port (or port imap-default-port))
505 (coding-system-for-read imap-coding-system-for-read)
506 (coding-system-for-write imap-coding-system-for-write)
507 (process-connection-type imap-process-connection-type)
515 ?l imap-default-user))))
519 (setq imap-client-eol "\n"
520 imap-calculate-literal-size-first t)
539 (not (and (imap-parse-greeting)
549 (and imap-log
550 (with-current-buffer (get-buffer-create imap-log-buffer)
551 (imap-disable-multibyte)
562 (imap-send-command "LOGOUT"))
567 (defun imap-gssapi-stream-p (buffer)
568 (imap-capability 'AUTH=GSSAPI buffer))
570 (defun imap-gssapi-open (name buffer server port)
571 (let ((cmds imap-gssapi-program)
576 (let* ((port (or port imap-default-port))
577 (coding-system-for-read imap-coding-system-for-read)
578 (coding-system-for-write imap-coding-system-for-write)
579 (process-connection-type imap-process-connection-type)
587 ?l imap-default-user))))
591 (setq imap-client-eol "\n"
592 imap-calculate-literal-size-first t)
615 (not (and (imap-parse-greeting)
625 (and imap-log
626 (with-current-buffer (get-buffer-create imap-log-buffer)
627 (imap-disable-multibyte)
637 (imap-send-command "LOGOUT"))
642 (defun imap-ssl-p (buffer)
645 (defun imap-ssl-open (name buffer server port)
647 (let ((cmds (if (listp imap-ssl-program) imap-ssl-program
648 (list imap-ssl-program)))
651 (message "imap: Opening SSL connection with `%s'..." cmd)
653 (let* ((port (or port imap-default-ssl-port))
654 (coding-system-for-read imap-coding-system-for-read)
655 (coding-system-for-write imap-coding-system-for-write)
656 (process-connection-type imap-process-connection-type)
678 (not (imap-parse-greeting)))
681 (and imap-log
682 (with-current-buffer (get-buffer-create imap-log-buffer)
683 (imap-disable-multibyte)
692 (message "imap: Opening SSL connection with `%s'...done" cmd)
694 (message "imap: Opening SSL connection with `%s'...failed" cmd)
697 (defun imap-tls-p (buffer)
700 (defun imap-tls-open (name buffer server port)
701 (let* ((port (or port imap-default-tls-port))
702 (coding-system-for-read imap-coding-system-for-read)
703 (coding-system-for-write imap-coding-system-for-write)
710 (not (imap-parse-greeting)))
713 (and imap-log
714 (with-current-buffer (get-buffer-create imap-log-buffer)
715 (imap-disable-multibyte)
722 (defun imap-network-p (buffer)
725 (defun imap-network-open (name buffer server port)
726 (let* ((port (or port imap-default-port))
727 (coding-system-for-read imap-coding-system-for-read)
728 (coding-system-for-write imap-coding-system-for-write)
734 (not (imap-parse-greeting)))
737 (and imap-log
738 (with-current-buffer (get-buffer-create imap-log-buffer)
739 (imap-disable-multibyte)
746 (defun imap-shell-p (buffer)
749 (defun imap-shell-open (name buffer server port)
750 (let ((cmds (if (listp imap-shell-program) imap-shell-program
751 (list imap-shell-program)))
754 (message "imap: Opening IMAP connection with `%s'..." cmd)
755 (setq imap-client-eol "\n")
756 (let* ((port (or port imap-default-port))
757 (coding-system-for-read imap-coding-system-for-read)
758 (coding-system-for-write imap-coding-system-for-write)
765 ?g imap-shell-host
767 ?l imap-default-user)))))
773 (not (imap-parse-greeting)))
776 (and imap-log
777 (with-current-buffer (get-buffer-create imap-log-buffer)
778 (imap-disable-multibyte)
787 (message "imap: Opening IMAP connection with `%s'...done" cmd)
789 (message "imap: Opening IMAP connection with `%s'...failed" cmd)
792 (defun imap-starttls-p (buffer)
793 (imap-capability 'STARTTLS buffer))
795 (defun imap-starttls-open (name buffer server port)
796 (let* ((port (or port imap-default-port))
797 (coding-system-for-read imap-coding-system-for-read)
798 (coding-system-for-write imap-coding-system-for-write)
801 (message "imap: Connecting with STARTTLS...")
807 (not (imap-parse-greeting)))
810 (imap-send-command "STARTTLS")
818 (and imap-log
819 (with-current-buffer (get-buffer-create imap-log-buffer)
827 (message "imap: STARTTLS info: %s" tls-info))
828 (message "imap: Connecting with STARTTLS...%s" (if done "done" "failed"))
833 (defun imap-interactive-login (buffer loginfunc)
839 (make-local-variable 'imap-username)
840 (make-local-variable 'imap-password)
844 (setq user (or imap-username
846 (concat "IMAP username for " imap-server
847 " (using stream `" (symbol-name imap-stream)
849 (or user imap-default-user))))
850 (setq passwd (or imap-password
853 imap-server " (using authenticator `"
854 (symbol-name imap-auth) "'): "))))
859 imap-username user)
860 (when (and (not imap-password)
861 (or imap-store-password
863 (setq imap-password passwd)))
866 (setq imap-password nil)
876 (defun imap-gssapi-auth-p (buffer)
877 (eq imap-stream 'gssapi))
879 (defun imap-gssapi-auth (buffer)
880 (message "imap: Authenticating using GSSAPI...%s"
881 (if (eq imap-stream 'gssapi) "done" "failed"))
882 (eq imap-stream 'gssapi))
884 (defun imap-kerberos4-auth-p (buffer)
885 (and (imap-capability 'AUTH=KERBEROS_V4 buffer)
886 (eq imap-stream 'kerberos4)))
888 (defun imap-kerberos4-auth (buffer)
889 (message "imap: Authenticating using Kerberos 4...%s"
890 (if (eq imap-stream 'kerberos4) "done" "failed"))
891 (eq imap-stream 'kerberos4))
893 (defun imap-cram-md5-p (buffer)
894 (imap-capability 'AUTH=CRAM-MD5 buffer))
896 (defun imap-cram-md5-auth (buffer)
898 (message "imap: Authenticating using CRAM-MD5...")
899 (let ((done (imap-interactive-login
902 (imap-ok-p
903 (imap-send-command-wait
913 (message "imap: Authenticating using CRAM-MD5...done")
914 (message "imap: Authenticating using CRAM-MD5...failed"))))
916 (defun imap-login-p (buffer)
917 (and (not (imap-capability 'LOGINDISABLED buffer))
918 (not (imap-capability 'X-LOGIN-CMD-DISABLED buffer))))
920 (defun imap-login-auth (buffer)
922 (message "imap: Plaintext authentication...")
923 (imap-interactive-login buffer
925 (imap-ok-p (imap-send-command-wait
929 (defun imap-anonymous-p (buffer)
932 (defun imap-anonymous-auth (buffer)
933 (message "imap: Logging in anonymously...")
935 (imap-ok-p (imap-send-command-wait
939 (defun imap-digest-md5-p (buffer)
940 (and (imap-capability 'AUTH=DIGEST-MD5 buffer)
945 (defun imap-digest-md5-auth (buffer)
947 (message "imap: Authenticating using DIGEST-MD5...")
948 (imap-interactive-login
952 (imap-send-command
960 "imap" (digest-md5-challenge 'realm)))
966 (if (not (eq (imap-wait-for-tag tag) 'INCOMPLETE))
968 (setq imap-continuation nil)
969 (imap-send-command-1 "")
970 (imap-ok-p (imap-wait-for-tag tag)))))))
974 (defun imap-open-1 (buffer)
977 (setq imap-current-mailbox nil
978 imap-current-message nil
979 imap-state 'initial
980 imap-process (condition-case ()
981 (funcall (nth 2 (assq imap-stream
982 imap-stream-alist))
983 "imap" buffer imap-server imap-port)
985 (when imap-process
986 (set-process-filter imap-process 'imap-arrival-filter)
987 (set-process-sentinel imap-process 'imap-sentinel)
988 (while (and (eq imap-state 'initial)
989 (memq (process-status imap-process) '(open run)))
990 (message "Waiting for response from %s..." imap-server)
991 (accept-process-output imap-process 1))
992 (message "Waiting for response from %s...done" imap-server)
993 (and (memq (process-status imap-process) '(open run))
994 imap-process))))
996 (defun imap-open (server &optional port stream auth buffer)
1000 STREAM indicates the stream to use, see `imap-streams' for available
1002 AUTH indicates authenticator to use, see `imap-authenticators' for
1007 (setq buffer (or buffer (format " *imap* %s:%d" server (or port 0))))
1009 (if (imap-opened buffer)
1010 (imap-close buffer))
1011 (mapcar 'make-local-variable imap-local-variables)
1012 (imap-disable-multibyte)
1014 (setq imap-server (or server imap-server))
1015 (setq imap-port (or port imap-port))
1016 (setq imap-auth (or auth imap-auth))
1017 (setq imap-stream (or stream imap-stream))
1018 (message "imap: Connecting to %s..." imap-server)
1019 (if (null (let ((imap-stream (or imap-stream imap-default-stream)))
1020 (imap-open-1 buffer)))
1022 (message "imap: Connecting to %s...failed" imap-server)
1024 (when (null imap-stream)
1026 (let ((streams imap-streams))
1029 (when (funcall (nth 1 (assq stream imap-stream-alist)) buffer)
1031 (if (not (eq imap-default-stream stream))
1034 (mapcar 'make-local-variable imap-local-variables)
1035 (imap-disable-multibyte)
1037 (setq imap-server (or server imap-server))
1038 (setq imap-port (or port imap-port))
1039 (setq imap-auth (or auth imap-auth))
1040 (message "imap: Reconnecting with stream `%s'..." stream)
1041 (if (null (let ((imap-stream stream))
1042 (imap-open-1 (current-buffer))))
1046 "imap: Reconnecting with stream `%s'...failed"
1049 (imap-close buffer)
1055 (message "imap: Reconnecting with stream `%s'...done"
1057 (setq imap-stream stream)
1058 (setq imap-capability nil)
1061 (message "imap: Connecting to %s...done" imap-server)
1062 (setq imap-stream stream)
1063 (setq imap-capability nil)
1065 (when (imap-opened buffer)
1066 (setq imap-mailbox-data (make-vector imap-mailbox-prime 0)))
1067 (when imap-stream
1070 (defun imap-opened (&optional buffer)
1071 "Return non-nil if connection to imap server in BUFFER is open.
1076 (and imap-process
1077 (memq (process-status imap-process) '(open run))))))
1079 (defun imap-authenticate (&optional user passwd buffer)
1087 (if (not (eq imap-state 'nonauth))
1088 (or (eq imap-state 'auth)
1089 (eq imap-state 'select)
1090 (eq imap-state 'examine))
1091 (make-local-variable 'imap-username)
1092 (make-local-variable 'imap-password)
1093 (if user (setq imap-username user))
1094 (if passwd (setq imap-password passwd))
1095 (if imap-auth
1096 (and (funcall (nth 2 (assq imap-auth
1097 imap-authenticator-alist)) buffer)
1098 (setq imap-state 'auth))
1100 (let ((auths imap-authenticators)
1104 (when (funcall (nth 1 (assq auth imap-authenticator-alist)) buffer)
1105 (message "imap: Authenticating to `%s' using `%s'..."
1106 imap-server auth)
1107 (setq imap-auth auth)
1108 (if (funcall (nth 2 (assq auth imap-authenticator-alist)) buffer)
1110 (message "imap: Authenticating to `%s' using `%s'...done"
1111 imap-server auth)
1113 (message "imap: Authenticating to `%s' using `%s'...failed"
1114 imap-server auth)))))
1115 imap-state))))
1117 (defun imap-close (&optional buffer)
1121 (when (imap-opened)
1123 (imap-send-command-wait "LOGOUT")
1125 (when (and imap-process
1126 (memq (process-status imap-process) '(open run)))
1127 (delete-process imap-process))
1128 (setq imap-current-mailbox nil
1129 imap-current-message nil
1130 imap-process nil)
1134 (defun imap-capability (&optional identifier buffer)
1139 (unless imap-capability
1140 (unless (imap-ok-p (imap-send-command-wait "CAPABILITY"))
1141 (setq imap-capability '(IMAP2))))
1143 (memq (intern (upcase (symbol-name identifier))) imap-capability)
1144 imap-capability)))
1146 (defun imap-namespace (&optional buffer)
1150 (unless imap-namespace
1151 (when (imap-capability 'NAMESPACE)
1152 (imap-send-command-wait "NAMESPACE")))
1153 imap-namespace))
1155 (defun imap-send-command-wait (command &optional buffer)
1156 (imap-wait-for-tag (imap-send-command command buffer) buffer))
1162 (defun imap-mailbox-put (propname value &optional mailbox buffer)
1164 (if imap-mailbox-data
1165 (put (intern (or mailbox imap-current-mailbox) imap-mailbox-data)
1171 (defsubst imap-mailbox-get-1 (propname &optional mailbox)
1172 (get (intern-soft (or mailbox imap-current-mailbox) imap-mailbox-data)
1175 (defun imap-mailbox-get (propname &optional mailbox buffer)
1176 (let ((mailbox (imap-utf7-encode mailbox)))
1178 (imap-mailbox-get-1 propname (or mailbox imap-current-mailbox)))))
1180 (defun imap-mailbox-map-1 (func &optional mailbox-decoder buffer)
1188 imap-mailbox-data)
1191 (defun imap-mailbox-map (func &optional buffer)
1192 "Map a function across each mailbox in `imap-mailbox-data', returning a list.
1195 (imap-mailbox-map-1 func 'imap-utf7-decode buffer))
1197 (defun imap-current-mailbox (&optional buffer)
1199 (imap-utf7-decode imap-current-mailbox)))
1201 (defun imap-current-mailbox-p-1 (mailbox &optional examine)
1202 (and (string= mailbox imap-current-mailbox)
1204 (eq imap-state 'examine))
1206 (eq imap-state 'selected)))))
1208 (defun imap-current-mailbox-p (mailbox &optional examine buffer)
1210 (imap-current-mailbox-p-1 (imap-utf7-encode mailbox) examine)))
1212 (defun imap-mailbox-select-1 (mailbox &optional examine)
1215 (if (imap-current-mailbox-p-1 mailbox examine)
1216 imap-current-mailbox
1217 (setq imap-current-mailbox mailbox)
1218 (if (imap-ok-p (imap-send-command-wait
1222 (setq imap-message-data (make-vector imap-message-prime 0)
1223 imap-state (if examine 'examine 'selected))
1224 imap-current-mailbox)
1226 (setq imap-current-mailbox nil))))
1228 (defun imap-mailbox-select (mailbox &optional examine buffer)
1230 (imap-utf7-decode
1231 (imap-mailbox-select-1 (imap-utf7-encode mailbox) examine))))
1233 (defun imap-mailbox-examine-1 (mailbox &optional buffer)
1235 (imap-mailbox-select-1 mailbox 'examine)))
1237 (defun imap-mailbox-examine (mailbox &optional buffer)
1239 (imap-mailbox-select mailbox 'examine buffer))
1241 (defun imap-mailbox-unselect (&optional buffer)
1244 (when (or (eq imap-state 'auth)
1245 (and (imap-capability 'UNSELECT)
1246 (imap-ok-p (imap-send-command-wait "UNSELECT")))
1247 (and (imap-ok-p
1248 (imap-send-command-wait (concat "EXAMINE \""
1249 imap-current-mailbox
1251 (imap-ok-p (imap-send-command-wait "CLOSE"))))
1252 (setq imap-current-mailbox nil
1253 imap-message-data nil
1254 imap-state 'auth)
1257 (defun imap-mailbox-expunge (&optional asynch buffer)
1262 (when (and imap-current-mailbox (not (eq imap-state 'examine)))
1264 (imap-send-command "EXPUNGE")
1265 (imap-ok-p (imap-send-command-wait "EXPUNGE"))))))
1267 (defun imap-mailbox-close (&optional asynch buffer)
1272 (when imap-current-mailbox
1274 (imap-add-callback (imap-send-command "CLOSE")
1277 imap-current-mailbox status)
1278 (when (eq ,imap-current-mailbox
1279 imap-current-mailbox)
1282 (setq imap-current-mailbox nil
1283 imap-message-data nil
1284 imap-state 'auth))))
1285 (when (imap-ok-p (imap-send-command-wait "CLOSE"))
1286 (setq imap-current-mailbox nil
1287 imap-message-data nil
1288 imap-state 'auth)))
1291 (defun imap-mailbox-create-1 (mailbox)
1292 (imap-ok-p (imap-send-command-wait (list "CREATE \"" mailbox "\""))))
1294 (defun imap-mailbox-create (mailbox &optional buffer)
1298 (imap-mailbox-create-1 (imap-utf7-encode mailbox))))
1300 (defun imap-mailbox-delete (mailbox &optional buffer)
1303 (let ((mailbox (imap-utf7-encode mailbox)))
1305 (imap-ok-p
1306 (imap-send-command-wait (list "DELETE \"" mailbox "\""))))))
1308 (defun imap-mailbox-rename (oldname newname &optional buffer)
1311 (let ((oldname (imap-utf7-encode oldname))
1312 (newname (imap-utf7-encode newname)))
1314 (imap-ok-p
1315 (imap-send-command-wait (list "RENAME \"" oldname "\" "
1318 (defun imap-mailbox-lsub (&optional root reference add-delimiter buffer)
1325 (when (and add-delimiter (null (imap-mailbox-get-1 'delimiter root)))
1326 (imap-send-command-wait (concat "LIST \"" reference "\" \""
1327 (imap-utf7-encode root) "\"")))
1329 (imap-mailbox-map-1 (lambda (mailbox)
1330 (imap-mailbox-put 'lsub nil mailbox)))
1331 (when (imap-ok-p
1332 (imap-send-command-wait
1333 (concat "LSUB \"" reference "\" \"" (imap-utf7-encode root)
1334 (and add-delimiter (imap-mailbox-get-1 'delimiter root))
1337 (imap-mailbox-map-1 (lambda (mailbox)
1338 (when (imap-mailbox-get-1 'lsub mailbox)
1339 (push (imap-utf7-decode mailbox) out))))
1342 (defun imap-mailbox-list (root &optional reference add-delimiter buffer)
1349 (when (and add-delimiter (null (imap-mailbox-get-1 'delimiter root)))
1350 (imap-send-command-wait (concat "LIST \"" reference "\" \""
1351 (imap-utf7-encode root) "\"")))
1353 (imap-mailbox-map-1 (lambda (mailbox)
1354 (imap-mailbox-put 'list nil mailbox)))
1355 (when (imap-ok-p
1356 (imap-send-command-wait
1357 (concat "LIST \"" reference "\" \"" (imap-utf7-encode root)
1358 (and add-delimiter (imap-mailbox-get-1 'delimiter root))
1361 (imap-mailbox-map-1 (lambda (mailbox)
1362 (when (imap-mailbox-get-1 'list mailbox)
1363 (push (imap-utf7-decode mailbox) out))))
1366 (defun imap-mailbox-subscribe (mailbox &optional buffer)
1370 (imap-ok-p (imap-send-command-wait (concat "SUBSCRIBE \""
1371 (imap-utf7-encode mailbox)
1374 (defun imap-mailbox-unsubscribe (mailbox &optional buffer)
1378 (imap-ok-p (imap-send-command-wait (concat "UNSUBSCRIBE "
1379 (imap-utf7-encode mailbox)
1382 (defun imap-mailbox-status (mailbox items &optional buffer)
1389 (when (imap-ok-p
1390 (imap-send-command-wait (list "STATUS \""
1391 (imap-utf7-encode mailbox)
1400 (imap-mailbox-get item mailbox))
1402 (imap-mailbox-get items mailbox)))))
1404 (defun imap-mailbox-status-asynch (mailbox items &optional buffer)
1410 (imap-send-command (list "STATUS \""
1411 (imap-utf7-encode mailbox)
1418 (defun imap-mailbox-acl-get (&optional mailbox buffer)
1420 (let ((mailbox (imap-utf7-encode mailbox)))
1422 (when (imap-ok-p
1423 (imap-send-command-wait (list "GETACL \""
1424 (or mailbox imap-current-mailbox)
1426 (imap-mailbox-get-1 'acl (or mailbox imap-current-mailbox))))))
1428 (defun imap-mailbox-acl-set (identifier rights &optional mailbox buffer)
1430 (let ((mailbox (imap-utf7-encode mailbox)))
1432 (imap-ok-p
1433 (imap-send-command-wait (list "SETACL \""
1434 (or mailbox imap-current-mailbox)
1440 (defun imap-mailbox-acl-delete (identifier &optional mailbox buffer)
1442 (let ((mailbox (imap-utf7-encode mailbox)))
1444 (imap-ok-p
1445 (imap-send-command-wait (list "DELETEACL \""
1446 (or mailbox imap-current-mailbox)
1454 (defun imap-current-message (&optional buffer)
1456 imap-current-message))
1458 (defun imap-list-to-message-set (list)
1466 (defun imap-range-to-message-set (range)
1478 (defun imap-fetch-asynch (uids props &optional nouidfetch buffer)
1480 (imap-send-command (format "%sFETCH %s %s" (if nouidfetch "" "UID ")
1482 (imap-list-to-message-set uids)
1486 (defun imap-fetch (uids props &optional receive nouidfetch buffer)
1491 (when (imap-ok-p (imap-send-command-wait
1494 (imap-list-to-message-set uids)
1503 (imap-message-get uid prop))
1505 (imap-message-get uid receive)))
1507 (imap-message-get uids receive))))))
1509 (defun imap-message-put (uid propname value &optional buffer)
1511 (if imap-message-data
1512 (put (intern (number-to-string uid) imap-message-data)
1518 (defun imap-message-get (uid propname &optional buffer)
1520 (get (intern-soft (number-to-string uid) imap-message-data)
1523 (defun imap-message-map (func propname &optional buffer)
1524 "Map a function across each mailbox in `imap-message-data', returning a list."
1530 imap-message-data)
1533 (defmacro imap-message-envelope-date (uid &optional buffer)
1535 (elt (imap-message-get ,uid 'ENVELOPE) 0)))
1537 (defmacro imap-message-envelope-subject (uid &optional buffer)
1539 (elt (imap-message-get ,uid 'ENVELOPE) 1)))
1541 (defmacro imap-message-envelope-from (uid &optional buffer)
1543 (elt (imap-message-get ,uid 'ENVELOPE) 2)))
1545 (defmacro imap-message-envelope-sender (uid &optional buffer)
1547 (elt (imap-message-get ,uid 'ENVELOPE) 3)))
1549 (defmacro imap-message-envelope-reply-to (uid &optional buffer)
1551 (elt (imap-message-get ,uid 'ENVELOPE) 4)))
1553 (defmacro imap-message-envelope-to (uid &optional buffer)
1555 (elt (imap-message-get ,uid 'ENVELOPE) 5)))
1557 (defmacro imap-message-envelope-cc (uid &optional buffer)
1559 (elt (imap-message-get ,uid 'ENVELOPE) 6)))
1561 (defmacro imap-message-envelope-bcc (uid &optional buffer)
1563 (elt (imap-message-get ,uid 'ENVELOPE) 7)))
1565 (defmacro imap-message-envelope-in-reply-to (uid &optional buffer)
1567 (elt (imap-message-get ,uid 'ENVELOPE) 8)))
1569 (defmacro imap-message-envelope-message-id (uid &optional buffer)
1571 (elt (imap-message-get ,uid 'ENVELOPE) 9)))
1573 (defmacro imap-message-body (uid &optional buffer)
1575 (imap-message-get ,uid 'BODY)))
1577 (defun imap-search (predicate &optional buffer)
1579 (imap-mailbox-put 'search 'dummy)
1580 (when (imap-ok-p (imap-send-command-wait (concat "UID SEARCH " predicate)))
1581 (if (eq (imap-mailbox-get-1 'search imap-current-mailbox) 'dummy)
1585 (imap-mailbox-get-1 'search imap-current-mailbox)))))
1587 (defun imap-message-flag-permanent-p (flag &optional mailbox buffer)
1590 (or (member "\\*" (imap-mailbox-get 'permanentflags mailbox))
1591 (member flag (imap-mailbox-get 'permanentflags mailbox)))))
1593 (defun imap-message-flags-set (articles flags &optional silent buffer)
1596 (imap-ok-p (imap-send-command-wait
1600 (defun imap-message-flags-del (articles flags &optional silent buffer)
1603 (imap-ok-p (imap-send-command-wait
1607 (defun imap-message-flags-add (articles flags &optional silent buffer)
1610 (imap-ok-p (imap-send-command-wait
1614 (defun imap-message-copyuid-1 (mailbox)
1615 (if (imap-capability 'UIDPLUS)
1616 (list (nth 0 (imap-mailbox-get-1 'copyuid mailbox))
1617 (string-to-number (nth 2 (imap-mailbox-get-1 'copyuid mailbox))))
1618 (let ((old-mailbox imap-current-mailbox)
1619 (state imap-state)
1620 (imap-message-data (make-vector 2 0)))
1621 (when (imap-mailbox-examine-1 mailbox)
1623 (and (imap-fetch "*" "UID")
1624 (list (imap-mailbox-get-1 'uidvalidity mailbox)
1625 (apply 'max (imap-message-map
1628 (imap-mailbox-select old-mailbox (eq state 'examine))
1629 (imap-mailbox-unselect)))))))
1631 (defun imap-message-copyuid (mailbox &optional buffer)
1633 (imap-message-copyuid-1 (imap-utf7-decode mailbox))))
1635 (defun imap-message-copy (articles mailbox
1644 (let ((mailbox (imap-utf7-encode mailbox)))
1646 (imap-current-target-mailbox mailbox))
1647 (if (imap-ok-p (imap-send-command-wait cmd))
1653 ;;(imap-mailbox-get-1 'trycreate mailbox)
1654 (imap-mailbox-create-1 mailbox))
1655 (imap-ok-p (imap-send-command-wait cmd)))))
1657 (imap-message-copyuid-1 mailbox)))))))
1659 (defun imap-message-appenduid-1 (mailbox)
1660 (if (imap-capability 'UIDPLUS)
1661 (imap-mailbox-get-1 'appenduid mailbox)
1662 (let ((old-mailbox imap-current-mailbox)
1663 (state imap-state)
1664 (imap-message-data (make-vector 2 0)))
1665 (when (imap-mailbox-examine-1 mailbox)
1667 (and (imap-fetch "*" "UID")
1668 (list (imap-mailbox-get-1 'uidvalidity mailbox)
1669 (apply 'max (imap-message-map
1672 (imap-mailbox-select old-mailbox (eq state 'examine))
1673 (imap-mailbox-unselect)))))))
1675 (defun imap-message-appenduid (mailbox &optional buffer)
1677 (imap-message-appenduid-1 (imap-utf7-encode mailbox))))
1679 (defun imap-message-append (mailbox article &optional flags date-time buffer)
1684 (let ((mailbox (imap-utf7-encode mailbox)))
1686 (and (let ((imap-current-target-mailbox mailbox))
1687 (imap-ok-p
1688 (imap-send-command-wait
1690 (imap-message-appenduid-1 mailbox)))))
1692 (defun imap-body-lines (body)
1703 (apply '+ (mapcar 'imap-body-lines body)))
1706 (defun imap-envelope-from (from)
1720 (defun imap-add-callback (tag func)
1721 (setq imap-callbacks (append (list (cons tag func)) imap-callbacks)))
1723 (defun imap-send-command-1 (cmdstr)
1724 (setq cmdstr (concat cmdstr imap-client-eol))
1725 (and imap-log
1726 (with-current-buffer (get-buffer-create imap-log-buffer)
1727 (imap-disable-multibyte)
1731 (process-send-string imap-process cmdstr))
1733 (defun imap-send-command (command &optional buffer)
1736 (let ((tag (setq imap-tag (1+ imap-tag)))
1738 (setq cmdstr (concat (number-to-string imap-tag) " "))
1743 (let ((eol imap-client-eol)
1744 (calcfirst imap-calculate-literal-size-first)
1760 (imap-send-command-1 cmdstr)
1762 (if (not (eq (imap-wait-for-tag tag) 'INCOMPLETE))
1764 (let ((process imap-process)
1765 (stream imap-stream)
1766 (eol imap-client-eol))
1768 (and imap-log
1770 imap-log-buffer)
1771 (imap-disable-multibyte)
1777 (process-send-string process imap-client-eol))))
1778 (setq imap-continuation nil)))
1780 (imap-send-command-1 cmdstr)
1783 (if (not (eq (imap-wait-for-tag tag) 'INCOMPLETE))
1785 (setq command (cons (funcall cmd imap-continuation)
1787 (setq imap-continuation nil)))
1791 (imap-send-command-1 cmdstr))
1794 (defun imap-wait-for-tag (tag &optional buffer)
1796 (let (imap-have-messaged)
1797 (while (and (null imap-continuation)
1798 (memq (process-status imap-process) '(open run))
1799 (< imap-reached-tag tag))
1803 (setq imap-have-messaged t)
1804 (message "imap read: %dk" len))
1805 (accept-process-output imap-process
1806 (truncate imap-read-timeout)
1807 (truncate (* (- imap-read-timeout
1808 (truncate imap-read-timeout))
1814 (when (and (null imap-continuation)
1815 (< imap-reached-tag tag))
1816 (accept-process-output imap-process 0 0))
1817 (when imap-have-messaged
1819 (and (memq (process-status imap-process) '(open run))
1820 (or (assq tag imap-failed-tags)
1821 (if imap-continuation
1825 (defun imap-sentinel (process string)
1828 (defun imap-find-next-line ()
1831 (when (re-search-forward (concat imap-server-eol "\\|{\\([0-9]+\\)}"
1832 imap-server-eol)
1838 (imap-find-next-line))
1841 (defun imap-arrival-filter (proc string)
1849 (and imap-log
1850 (with-current-buffer (get-buffer-create imap-log-buffer)
1851 (imap-disable-multibyte)
1857 (while (setq end (imap-find-next-line))
1860 (delete-backward-char (length imap-server-eol))
1863 (cond ((eq imap-state 'initial)
1864 (imap-parse-greeting))
1865 ((or (eq imap-state 'auth)
1866 (eq imap-state 'nonauth)
1867 (eq imap-state 'selected)
1868 (eq imap-state 'examine))
1869 (imap-parse-response))
1872 imap-state)))
1879 (defsubst imap-forward ()
1886 (defsubst imap-parse-number ()
1895 (defsubst imap-parse-literal ()
1915 (defsubst imap-parse-string ()
1929 (imap-parse-literal))))
1933 (defsubst imap-parse-nil ()
1939 (defsubst imap-parse-nstring ()
1940 (or (imap-parse-string)
1941 (and (imap-parse-nil)
1957 (defsubst imap-parse-astring ()
1958 (or (imap-parse-string)
1988 (defsubst imap-parse-address ()
1991 (imap-forward)
1992 (setq address (vector (prog1 (imap-parse-nstring)
1993 (imap-forward))
1994 (prog1 (imap-parse-nstring)
1995 (imap-forward))
1996 (prog1 (imap-parse-nstring)
1997 (imap-forward))
1998 (imap-parse-nstring)))
2000 (imap-forward)
2007 (defsubst imap-parse-address-list ()
2010 (imap-forward)
2013 (progn (and (eq (char-after) ? ) (imap-forward)) t)
2014 (setq address (imap-parse-address)))
2017 (imap-forward)
2020 ;; (assert (imap-parse-nil) t "In imap-parse-address-list")
2021 (imap-parse-nil)))
2032 (defsubst imap-parse-mailbox ()
2033 (let ((mailbox (imap-parse-astring)))
2045 (defun imap-parse-greeting ()
2048 (setq imap-state 'nonauth))
2050 (setq imap-state 'auth))
2052 (setq imap-state 'closed))))
2090 (defun imap-parse-response ()
2094 (+ (setq imap-continuation
2099 (imap-forward))
2100 (OK (imap-parse-resp-text))
2101 (NO (imap-parse-resp-text))
2102 (BAD (imap-parse-resp-text))
2103 (BYE (imap-parse-resp-text))
2104 (FLAGS (imap-mailbox-put 'flags (imap-parse-flag-list)))
2105 (LIST (imap-parse-data-list 'list))
2106 (LSUB (imap-parse-data-list 'lsub))
2107 (SEARCH (imap-mailbox-put
2110 (STATUS (imap-parse-status))
2111 (CAPABILITY (setq imap-capability
2115 (ACL (imap-parse-acl))
2117 (imap-forward))
2118 (EXISTS (imap-mailbox-put 'exists token))
2119 (RECENT (imap-mailbox-put 'recent token))
2121 (FETCH (imap-parse-fetch token))
2127 (imap-forward))
2129 (setq imap-reached-tag (max imap-reached-tag token))
2130 (imap-parse-resp-text)))
2132 (setq imap-reached-tag (max imap-reached-tag token))
2134 (imap-parse-resp-text))
2139 (imap-forward))
2142 imap-failed-tags))))
2144 (setq imap-reached-tag (max imap-reached-tag token))
2146 (imap-parse-resp-text))
2151 (imap-forward))
2153 (push (list token status code text) imap-failed-tags)
2157 (when (assq token imap-callbacks)
2158 (funcall (cdr (assq token imap-callbacks)) token status)
2159 (setq imap-callbacks
2160 (imap-remassoc token imap-callbacks)))))))))
2168 (defun imap-parse-resp-text ()
2169 (imap-parse-resp-text-code))
2225 (defun imap-parse-resp-text-code ()
2228 (imap-forward))
2230 (imap-forward)
2232 (imap-mailbox-put 'permanentflags (imap-parse-flag-list)))
2234 (imap-mailbox-put 'uidnext (match-string 1)))
2236 (imap-mailbox-put 'first-unseen (read (current-buffer))))
2238 (imap-mailbox-put 'uidvalidity (match-string 1)))
2240 (imap-mailbox-put 'read-only t))
2243 (setq oldname (imap-parse-string))
2244 (imap-forward)
2245 (setq newname (imap-parse-string))
2246 (imap-mailbox-put 'newname newname oldname)))
2248 (imap-mailbox-put 'trycreate t imap-current-target-mailbox))
2250 (imap-mailbox-put 'appenduid
2253 imap-current-target-mailbox))
2255 (imap-mailbox-put 'copyuid (list (match-string 1)
2258 imap-current-target-mailbox))
2260 (message "Imap server %s information: %s" imap-server
2281 (defun imap-parse-data-list (type)
2283 (setq flags (imap-parse-flag-list))
2287 (when (setq mailbox (imap-parse-mailbox))
2288 (imap-mailbox-put type t mailbox)
2289 (imap-mailbox-put 'list-flags flags mailbox)
2290 (imap-mailbox-put 'delimiter delimiter mailbox)))))
2314 (defsubst imap-parse-header-list ()
2318 (imap-forward)
2319 (push (imap-parse-astring) strlist))
2320 (imap-forward)
2323 (defsubst imap-parse-fetch-body-section ()
2328 (mapconcat 'identity (cons section (imap-parse-header-list)) " ")
2332 (defun imap-parse-fetch (response)
2337 (imap-forward)
2339 (imap-forward)
2345 (setq flags (imap-parse-flag-list))
2349 (setq envelope (imap-parse-envelope)))
2351 (setq internaldate (imap-parse-string)))
2353 (setq rfc822 (imap-parse-nstring)))
2355 (setq rfc822header (imap-parse-nstring)))
2357 (setq rfc822text (imap-parse-nstring)))
2363 (upcase (imap-parse-fetch-body-section))
2367 (progn (imap-forward)
2368 (imap-parse-nstring)))
2370 (setq body (imap-parse-body))))
2372 (setq bodystructure (imap-parse-body))))))
2374 (setq imap-current-message uid)
2375 (imap-message-put uid 'UID uid)
2376 (and (or flags flags-empty) (imap-message-put uid 'FLAGS flags))
2377 (and envelope (imap-message-put uid 'ENVELOPE envelope))
2378 (and internaldate (imap-message-put uid 'INTERNALDATE internaldate))
2379 (and rfc822 (imap-message-put uid 'RFC822 rfc822))
2380 (and rfc822header (imap-message-put uid 'RFC822.HEADER rfc822header))
2381 (and rfc822text (imap-message-put uid 'RFC822.TEXT rfc822text))
2382 (and rfc822size (imap-message-put uid 'RFC822.SIZE rfc822size))
2383 (and body (imap-message-put uid 'BODY body))
2384 (and bodydetail (imap-message-put uid 'BODYDETAIL bodydetail))
2385 (and bodystructure (imap-message-put uid 'BODYSTRUCTURE bodystructure))
2386 (run-hooks 'imap-fetch-data-hook)))))
2397 (defun imap-parse-status ()
2398 (let ((mailbox (imap-parse-mailbox)))
2408 (imap-mailbox-put 'messages (read (current-buffer)) mailbox))
2410 (imap-mailbox-put 'recent (read (current-buffer)) mailbox))
2413 (imap-mailbox-put 'uidnext (match-string 0) mailbox)
2417 (imap-mailbox-put 'uidvalidity (match-string 0) mailbox)
2420 (imap-mailbox-put 'unseen (read (current-buffer)) mailbox))
2433 (defun imap-parse-acl ()
2434 (let ((mailbox (imap-parse-mailbox))
2437 (imap-forward)
2438 (setq identifier (imap-parse-astring))
2439 (imap-forward)
2440 (setq rights (imap-parse-astring))
2442 (imap-mailbox-put 'acl acl mailbox)))
2460 (defun imap-parse-flag-list ()
2462 (assert (eq (char-after) ?\() nil "In imap-parse-flag-list")
2465 (imap-forward)
2469 (> (skip-chars-forward "^ )" (imap-point-at-eol)) 0))
2471 (assert (eq (char-after) ?\)) nil "In imap-parse-flag-list")
2472 (imap-forward)
2499 (defun imap-parse-envelope ()
2501 (imap-forward)
2502 (vector (prog1 (imap-parse-nstring) ;; date
2503 (imap-forward))
2504 (prog1 (imap-parse-nstring) ;; subject
2505 (imap-forward))
2506 (prog1 (imap-parse-address-list) ;; from
2507 (imap-forward))
2508 (prog1 (imap-parse-address-list) ;; sender
2509 (imap-forward))
2510 (prog1 (imap-parse-address-list) ;; reply-to
2511 (imap-forward))
2512 (prog1 (imap-parse-address-list) ;; to
2513 (imap-forward))
2514 (prog1 (imap-parse-address-list) ;; cc
2515 (imap-forward))
2516 (prog1 (imap-parse-address-list) ;; bcc
2517 (imap-forward))
2518 (prog1 (imap-parse-nstring) ;; in-reply-to
2519 (imap-forward))
2520 (prog1 (imap-parse-nstring) ;; message-id
2521 (imap-forward)))))
2525 (defsubst imap-parse-string-list ()
2528 (imap-forward)
2529 (while (setq str (imap-parse-string))
2534 (imap-forward)))
2536 ((imap-parse-nil)
2548 (defun imap-parse-body-extension ()
2551 (imap-forward)
2552 (push (imap-parse-body-extension) b-e)
2554 (imap-forward)
2555 (push (imap-parse-body-extension) b-e))
2556 (assert (eq (char-after) ?\)) nil "In imap-parse-body-extension")
2557 (imap-forward)
2559 (or (imap-parse-number)
2560 (imap-parse-nstring))))
2572 (defsubst imap-parse-body-ext ()
2575 (imap-forward)
2579 (imap-forward)
2580 (push (imap-parse-string) dsp)
2581 (imap-forward)
2582 (push (imap-parse-string-list) dsp)
2583 (imap-forward))
2585 ;; (assert (imap-parse-nil) t "In imap-parse-body-ext")
2586 (imap-parse-nil))
2589 (imap-forward)
2591 (push (imap-parse-string-list) ext)
2592 (push (imap-parse-nstring) ext))
2594 (imap-forward)
2595 (setq ext (append (imap-parse-body-extension) ext)))))
2659 (defun imap-parse-body ()
2662 (imap-forward)
2666 (setq subbody (imap-parse-body)))
2671 (imap-forward))
2673 (imap-forward)
2674 (push (imap-parse-string) body) ;; media-subtype
2676 (imap-forward)
2678 (push (imap-parse-string-list) body)
2679 (push (and (imap-parse-nil) nil) body))
2681 (append (imap-parse-body-ext) body))) ;; body-ext-...
2682 (assert (eq (char-after) ?\)) nil "In imap-parse-body")
2683 (imap-forward)
2686 (push (imap-parse-string) body) ;; media-type
2687 (imap-forward)
2688 (push (imap-parse-string) body) ;; media-subtype
2689 (imap-forward)
2691 (and (eq (char-after) ? ) (imap-forward))
2693 (push (imap-parse-string-list) body)
2694 (push (and (imap-parse-nil) nil) body))
2695 (imap-forward)
2696 (push (imap-parse-nstring) body) ;; body-fld-id
2697 (imap-forward)
2698 (push (imap-parse-nstring) body) ;; body-fld-desc
2699 (imap-forward)
2703 (push (or (imap-parse-nstring) "7BIT") body) ;; body-fld-enc
2704 (imap-forward)
2705 (push (imap-parse-number) body) ;; body-fld-octets
2718 (imap-forward)
2721 (push (imap-parse-envelope) body) ;; envelope
2722 (imap-forward)
2723 (push (imap-parse-body) body) ;; body
2728 (imap-forward)
2729 (push (imap-parse-number) body))) ;; body-fld-lines
2730 ((setq lines (imap-parse-number)) ;; body-type-text:
2738 (imap-forward)
2739 (push (imap-parse-nstring) body) ;; body-fld-md5
2740 (setq body (append (imap-parse-body-ext) body))) ;; body-ext-1part..
2742 (assert (eq (char-after) ?\)) nil "In imap-parse-body 2")
2743 (imap-forward)
2746 (when imap-debug ; (untrace-all)
2748 (buffer-disable-undo (get-buffer-create imap-debug-buffer))
2749 (mapcar (lambda (f) (trace-function-background f imap-debug-buffer))
2751 imap-utf7-encode
2752 imap-utf7-decode
2753 imap-error-text
2754 imap-kerberos4s-p
2755 imap-kerberos4-open
2756 imap-ssl-p
2757 imap-ssl-open
2758 imap-network-p
2759 imap-network-open
2760 imap-interactive-login
2761 imap-kerberos4a-p
2762 imap-kerberos4-auth
2763 imap-cram-md5-p
2764 imap-cram-md5-auth
2765 imap-login-p
2766 imap-login-auth
2767 imap-anonymous-p
2768 imap-anonymous-auth
2769 imap-open-1
2770 imap-open
2771 imap-opened
2772 imap-authenticate
2773 imap-close
2774 imap-capability
2775 imap-namespace
2776 imap-send-command-wait
2777 imap-mailbox-put
2778 imap-mailbox-get
2779 imap-mailbox-map-1
2780 imap-mailbox-map
2781 imap-current-mailbox
2782 imap-current-mailbox-p-1
2783 imap-current-mailbox-p
2784 imap-mailbox-select-1
2785 imap-mailbox-select
2786 imap-mailbox-examine-1
2787 imap-mailbox-examine
2788 imap-mailbox-unselect
2789 imap-mailbox-expunge
2790 imap-mailbox-close
2791 imap-mailbox-create-1
2792 imap-mailbox-create
2793 imap-mailbox-delete
2794 imap-mailbox-rename
2795 imap-mailbox-lsub
2796 imap-mailbox-list
2797 imap-mailbox-subscribe
2798 imap-mailbox-unsubscribe
2799 imap-mailbox-status
2800 imap-mailbox-acl-get
2801 imap-mailbox-acl-set
2802 imap-mailbox-acl-delete
2803 imap-current-message
2804 imap-list-to-message-set
2805 imap-fetch-asynch
2806 imap-fetch
2807 imap-message-put
2808 imap-message-get
2809 imap-message-map
2810 imap-search
2811 imap-message-flag-permanent-p
2812 imap-message-flags-set
2813 imap-message-flags-del
2814 imap-message-flags-add
2815 imap-message-copyuid-1
2816 imap-message-copyuid
2817 imap-message-copy
2818 imap-message-appenduid-1
2819 imap-message-appenduid
2820 imap-message-append
2821 imap-body-lines
2822 imap-envelope-from
2823 imap-send-command-1
2824 imap-send-command
2825 imap-wait-for-tag
2826 imap-sentinel
2827 imap-find-next-line
2828 imap-arrival-filter
2829 imap-parse-greeting
2830 imap-parse-response
2831 imap-parse-resp-text
2832 imap-parse-resp-text-code
2833 imap-parse-data-list
2834 imap-parse-fetch
2835 imap-parse-status
2836 imap-parse-acl
2837 imap-parse-flag-list
2838 imap-parse-envelope
2839 imap-parse-body-extension
2840 imap-parse-body
2843 (provide 'imap)
2846 ;;; imap.el ends here