view lisp/mail/mailpost.el @ 30982:7e7ba448ad10

(widget-choose, widget-choice-mouse-down-action): Don't test x-popup-menu. (function) <complete-function>: Complete only fbound symbols. <validate, value>: New. (variable) <complete-function>: Complete only bound symbols. (coding-system): Add :base-only, :complete-function, :validate, :value, :prompt-match. (widget-coding-system-prompt-value): Use read-coding-system and act on :base-only. (editable-field): Add :help-echo. (widget-push-button-gui, widget-push-button-cache) (widget-gui-action, widget-editable-list-gui): COmment out, along with uses. (widget-at): Make arg optional. (widget-echo-help): Adjust for current help-echo calling sequence. (widget-specify-field, widget-specify-button) (widget-specify-insert, widget-get-sibling, widget-image-find) (widget-convert, widget-insert, widget-leave-text) (widget-beginning-of-line, widget-end-of-line, widget-kill-line) (widget-setup, widget-field-find, widget-before-change) (widget-after-change, widget-default-complete) (widget-default-create, widget-default-delete) (widget-push-button-value-create, editable-field) (widget-field-prompt-value, widget-field-validate) (widget-choice-value-create, widget-choice-action) (widget-choice-validate, widget-checklist-add-item) (widget-radio-add-item, widget-radio-chosen) (widget-radio-value-inline, widget-editable-list-value-create) (widget-editable-list-entry-create) (widget-documentation-link-add) (widget-documentation-string-value-create) (widget-regexp-validate, widget-file-complete) (widget-sexp-validate, widget-plist-convert-widget) (widget-plist-convert-widget, widget-alist-convert-widget) (widget-alist-convert-widget, widget-color-complete): Simplify, particularly to avoid bindings which aren't optimized out.
author Dave Love <fx@gnu.org>
date Sun, 20 Aug 2000 18:34:24 +0000
parents 3baeb77c0e39
children 253f761ad37b
line wrap: on
line source

;;; mailpost.el --- RMAIL coupler to /usr/uci/post mailer

;; This is in the public domain
;; since Delp distributed it without a copyright notice in 1986.

;; Author: Gary Delp <delp@huey.Udel.Edu>
;; Maintainer: FSF
;; Created: 13 Jan 1986
;; Keywords: mail

;;; Commentary:

;; Yet another mail interface.  this for the rmail system to provide
;;  the missing sendmail interface on systems without /usr/lib/sendmail,
;;   but with /usr/uci/post.

;;; Code:

(require 'mailalias)
(require 'sendmail)

;; (setq send-mail-function 'post-mail-send-it)

(defun post-mail-send-it ()
  "The MH -post interface for `rmail-mail' to call.
To use it, include \"(setq send-mail-function 'post-mail-send-it)\" in
site-init."
  (let ((errbuf (if mail-interactive
		    (generate-new-buffer " post-mail errors")
		  0))
	temfile
	(tembuf (generate-new-buffer " post-mail temp"))
	(case-fold-search nil)
	delimline
	(mailbuf (current-buffer)))
    (unwind-protect
	(save-excursion
	  (set-buffer tembuf)
	  (erase-buffer)
	  (insert-buffer-substring mailbuf)
	  (goto-char (point-max))
	  ;; require one newline at the end.
	  (or (= (preceding-char) ?\n)
	      (insert ?\n))
	  ;; Change header-delimiter to be what post-mail expects.
	  (mail-sendmail-undelimit-header)
	  (setq delimline (point-marker))
	  (if mail-aliases
	      (expand-mail-aliases (point-min) delimline))
	  (goto-char (point-min))
	  ;; ignore any blank lines in the header
	  (while (and (re-search-forward "\n\n\n*" delimline t)
		      (< (point) delimline))
	    (replace-match "\n"))
	  ;; Find and handle any FCC fields.
	  (let ((case-fold-search t))
	    (goto-char (point-min))
	    (if (re-search-forward "^FCC:" delimline t)
		(mail-do-fcc delimline))
	    ;; If there is a From and no Sender, put it a Sender.
	    (goto-char (point-min))
	    (and (re-search-forward "^From:"  delimline t)
		 (not (save-excursion
			(goto-char (point-min))
			(re-search-forward "^Sender:" delimline t)))
		 (progn
		   (forward-line 1)
		   (insert "Sender: " (user-login-name) "\n")))
	    ;; don't send out a blank subject line
	    (goto-char (point-min))
	    (if (re-search-forward "^Subject:[ \t]*\n" delimline t)
		(replace-match ""))
	    (if mail-interactive
		(save-excursion
		  (set-buffer errbuf)
		  (erase-buffer))))
	  (let ((m (default-file-modes)))
	    (unwind-protect
		(progn
		  (set-default-file-modes 384)
		  (setq temfile  (make-temp-file ",rpost")))
	      (set-default-file-modes m)))
	  (apply 'call-process
		 (append (list (if (boundp 'post-mail-program)
				   post-mail-program
				 "/usr/uci/lib/mh/post")
			       nil errbuf nil
			       "-nofilter" "-msgid")
			 (if mail-interactive '("-watch") '("-nowatch"))
			 (list temfile)))
	  (if mail-interactive
	      (save-excursion
		(set-buffer errbuf)
		(goto-char (point-min))
		(while (re-search-forward "\n\n* *" nil t)
		  (replace-match "; "))
		(if (not (zerop (buffer-size)))
		    (error "Sending...failed to %s"
			   (buffer-substring (point-min) (point-max)))))))
      (kill-buffer tembuf)
      (if (bufferp errbuf)
	  (switch-to-buffer errbuf)))))

(provide 'mailpost)

;;; mailpost.el ends here