Function: feedmail-run-the-queue
feedmail-run-the-queue is an autoloaded, interactive and byte-compiled
function defined in feedmail.el.gz.
Signature
(feedmail-run-the-queue &optional ARG)
Documentation
Visit each message in the feedmail queue directory and send it out.
Return value is a list of three things: number of messages sent, number of messages skipped, and number of non-message things in the queue (commonly backup file names and the like).
Key Bindings
Source Code
;; Defined in /usr/src/emacs/lisp/mail/feedmail.el.gz
;;;###autoload
(defun feedmail-run-the-queue (&optional arg)
"Visit each message in the feedmail queue directory and send it out.
Return value is a list of three things: number of messages sent, number of
messages skipped, and number of non-message things in the queue (commonly
backup file names and the like)."
(interactive "p")
(feedmail-say-debug ">in-> feedmail-run-the-queue")
;; avoid matching trouble over slash vs backslash by getting canonical
(if feedmail-queue-directory
(setq feedmail-queue-directory (expand-file-name feedmail-queue-directory)))
(if feedmail-queue-draft-directory
(setq feedmail-queue-draft-directory (expand-file-name feedmail-queue-draft-directory)))
(let* ((maybe-file)
(qlist (feedmail-look-at-queue-directory feedmail-queue-directory))
(dlist (feedmail-look-at-queue-directory feedmail-queue-draft-directory))
(q-cnt (nth 0 qlist))
(q-oth (nth 1 qlist))
(d-cnt (nth 0 dlist))
(d-oth (nth 1 dlist))
(messages-sent 0)
(messages-skipped 0)
(blobby-buffer)
(already-buffer)
(do-the-run t)
(list-of-possible-fqms))
(if (and (> q-cnt 0) feedmail-queue-runner-confirm-global)
(setq do-the-run
(y-or-n-p-with-timeout (format "FQM: Draft: %dm+%d, Queue: %dm+%d; run the queue? "
d-cnt d-oth q-cnt q-oth)
5 nil)))
(if (not do-the-run)
(setq messages-skipped q-cnt)
(save-window-excursion
(setq list-of-possible-fqms (directory-files feedmail-queue-directory t))
(if feedmail-queue-run-orderer
(setq list-of-possible-fqms (funcall feedmail-queue-run-orderer list-of-possible-fqms)))
(mapc
(lambda (blobby)
(setq maybe-file (expand-file-name blobby feedmail-queue-directory))
(cond
((file-directory-p maybe-file) nil) ; don't care about subdirs
((feedmail-fqm-p blobby)
(setq blobby-buffer (generate-new-buffer (concat "FQM " blobby)))
(setq already-buffer
(find-buffer-visiting maybe-file))
(if (and already-buffer (buffer-modified-p already-buffer))
(save-window-excursion
(display-buffer (set-buffer already-buffer))
;; make a guess that the user just forgot to save
(if (y-or-n-p-with-timeout (format "FQM: Visiting %s; save before send? " blobby) 10 t)
(save-buffer))))
(set-buffer blobby-buffer)
(setq buffer-offer-save nil)
(buffer-disable-undo blobby-buffer)
(insert-file-contents-literally maybe-file)
(goto-char (point-min))
;; if at least two line-endings with CRLF, translate the file
(if (looking-at ".*\r\n.*\r\n")
(while (search-forward "\r\n" nil t)
(replace-match "\n" nil t)))
(funcall feedmail-queue-runner-mode-setter arg)
(condition-case signal-stuff ; don't give up the loop if user skips some
(let ((feedmail-enable-queue nil)
(feedmail-queue-runner-is-active maybe-file))
;; if can't find EOH, this is no message!
(unless (feedmail-find-eoh t)
(feedmail-say-chatter "Skipping %s; no mail-header-separator" maybe-file)
(error "FQM: You should never see this message"))
(feedmail-say-debug "Prepping %s" maybe-file)
;; the catch is a way out for users to voluntarily skip sending a message
(catch 'skip-me-q (funcall feedmail-queue-runner-message-sender arg))
(set-buffer blobby-buffer)
(if (buffer-modified-p) ; still modified, means wasn't sent
(progn
(setq messages-skipped (1+ messages-skipped))
(feedmail-say-chatter "%s wasn't sent by %s" maybe-file feedmail-buffer-eating-function))
(setq messages-sent (1+ messages-sent))
(funcall feedmail-queue-runner-cleaner-upper maybe-file arg)
(if (and already-buffer (not (file-exists-p maybe-file)))
;; we have gotten rid of the file associated with the
;; buffer, so update the buffer's notion of that
(with-current-buffer already-buffer
(setq buffer-file-name nil)))))
;; the handler for the condition-case
(error (setq messages-skipped (1+ messages-skipped))
(ding t)
(message "FQM: Trapped `%s', message left in queue." (car signal-stuff))
(sit-for 3)
(message "FQM: Trap details: \"%s\""
(mapconcat #'identity (cdr signal-stuff) "\" \""))
(sit-for 3)))
(kill-buffer blobby-buffer)
(feedmail-say-chatter
"%d to go, %d sent, %d skipped (%d other files ignored)"
(- q-cnt messages-sent messages-skipped)
messages-sent messages-skipped q-oth)
)))
list-of-possible-fqms)))
(if feedmail-queue-chatty
(progn
(feedmail-say-chatter "%d sent, %d skipped (%d other files ignored)"
messages-sent messages-skipped q-oth)
(feedmail-queue-reminder 'after-run)
(sit-for feedmail-queue-chatty-sit-for)))
(list messages-sent messages-skipped q-oth)))