|
|
1.1 ! root 1: ;; ! 2: ;; P O S T . E L ! 3: ;; ! 4: ;; Yet another mail interface. this for the rmail system to provide ! 5: ;; the missing sendmail interface on systems without /usr/lib/sendmail, ! 6: ;; but with /usr/uci/post. ! 7: ;; ! 8: ;; created by: Gary Delp <delp at huey.Udel.Edu> ! 9: ;; Mon Jan 13 14:45:12 1986 ! 10: ;; ! 11: ;; ! 12: ! 13: ;; (setq send-mail-function 'post-mail-send-it) ! 14: ! 15: (defun post-mail-send-it () ! 16: "\ ! 17: the MH -post interface for rmail-mail to call. ! 18: to use it, include (setq send-mail-function 'post-mail-send-it) in site-init." ! 19: (let ((errbuf (if mail-interactive ! 20: (generate-new-buffer " post-mail errors") ! 21: 0)) ! 22: (temfile "/tmp/,rpost") ! 23: (tembuf (generate-new-buffer " post-mail temp")) ! 24: (case-fold-search nil) ! 25: delimline ! 26: (mailbuf (current-buffer))) ! 27: (unwind-protect ! 28: (save-excursion ! 29: (set-buffer tembuf) ! 30: (erase-buffer) ! 31: (insert-buffer-substring mailbuf) ! 32: (goto-char (point-max)) ! 33: ;; require one newline at the end. ! 34: (or (= (preceding-char) ?\n) ! 35: (insert ?\n)) ! 36: ;; Change header-delimiter to be what post-mail expects. ! 37: (goto-char (point-min)) ! 38: (search-forward (concat "\n" mail-header-separator "\n")) ! 39: (replace-match "\n\n") ! 40: (backward-char 1) ! 41: (setq delimline (point-marker)) ! 42: (if mail-aliases ! 43: (expand-mail-aliases (point-min) delimline)) ! 44: (goto-char (point-min)) ! 45: ;; ignore any blank lines in the header ! 46: (while (and (re-search-forward "\n\n\n*" delimline t) ! 47: (< (point) delimline)) ! 48: (replace-match "\n")) ! 49: ;; Find and handle any FCC fields. ! 50: (let ((case-fold-search t)) ! 51: (goto-char (point-min)) ! 52: (if (re-search-forward "^FCC:" delimline t) ! 53: (mail-do-fcc delimline)) ! 54: ;; If there is a From and no Sender, put it a Sender. ! 55: (goto-char (point-min)) ! 56: (and (re-search-forward "^From:" delimline t) ! 57: (not (save-excursion ! 58: (goto-char (point-min)) ! 59: (re-search-forward "^Sender:" delimline t))) ! 60: (progn ! 61: (forward-line 1) ! 62: (insert "Sender: " (user-login-name) "\n"))) ! 63: ;; don't send out a blank subject line ! 64: (goto-char (point-min)) ! 65: (if (re-search-forward "^Subject:[ \t]*\n" delimline t) ! 66: (replace-match "")) ! 67: (if mail-interactive ! 68: (save-excursion ! 69: (set-buffer errbuf) ! 70: (erase-buffer)))) ! 71: (write-file (setq temfile (make-temp-name temfile))) ! 72: (set-file-modes temfile 384) ! 73: (apply 'call-process ! 74: (append (list (if (boundp 'post-mail-program) ! 75: post-mail-program ! 76: "/usr/uci/lib/mh/post") ! 77: nil errbuf nil ! 78: "-nofilter" "-msgid") ! 79: (if mail-interactive '("-watch") '("-nowatch")) ! 80: (list temfile))) ! 81: (if mail-interactive ! 82: (save-excursion ! 83: (set-buffer errbuf) ! 84: (goto-char (point-min)) ! 85: (while (re-search-forward "\n\n* *" nil t) ! 86: (replace-match "; ")) ! 87: (if (not (zerop (buffer-size))) ! 88: (error "Sending...failed to %s" ! 89: (buffer-substring (point-min) (point-max))))))) ! 90: (kill-buffer tembuf) ! 91: (if (bufferp errbuf) ! 92: (switch-to-buffer errbuf)))))
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.