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)))