📄 sendmail.el
字号:
;; Mail sending commands for Emacs.;; Copyright (C) 1985, 1986 Free Software Foundation, Inc.;; This file is part of GNU Emacs.;; GNU Emacs is free software; you can redistribute it and/or modify;; it under the terms of the GNU General Public License as published by;; the Free Software Foundation; either version 1, or (at your option);; any later version.;; GNU Emacs is distributed in the hope that it will be useful,;; but WITHOUT ANY WARRANTY; without even the implied warranty of;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the;; GNU General Public License for more details.;; You should have received a copy of the GNU General Public License;; along with GNU Emacs; see the file COPYING. If not, write to;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.(provide 'sendmail);(defconst mail-self-blind nil; "Non-nil means insert BCC to self in messages to be sent.;This is done when the message is initialized,;so you can remove or alter the BCC field to override the default.");(defconst mail-interactive nil; "Non-nil means when sending a message wait for and display errors.;nil means let mailer mail back a message to report errors.");(defconst mail-yank-ignored-headers; "^via:\\|^mail-from:\\|^origin:\\|^status:\\|^remailed\\|^received:\\|^message-id:\\|^summary-line:\\|^to:\\|^subject:\\|^in-reply-to:\\|^return-path:"; "Delete these headers from old message when it's inserted in a reply.");(defvar send-mail-function 'sendmail-send-it; "Function to call to send the current buffer as mail.;The headers are be delimited by a line which is mail-header-separator""); really defined in loaddefs for emacs 17.17+;(defvar mail-header-separator "--text follows this line--"; "*Line used to separate headers from text in messages being composed."); really defined in loaddefs for emacs 17.17+;(defvar mail-archive-file-name nil; "*Name of file to write all outgoing messages in, or nil for none."); really defined in loaddefs for emacs 17.17+(defvar mail-aliases t "Alias of mail address aliases,or t meaning should be initialized from .mailrc.")(defvar mail-default-reply-to nil "*Address to insert as default Reply-to field of outgoing messages.")(defvar mail-abbrevs-loaded nil)(defvar mail-mode-map nil)(autoload 'build-mail-aliases "mailalias" "Read mail aliases from ~/.mailrc and set mail-aliases." nil)(autoload 'expand-mail-aliases "mailalias" "Expand all mail aliases in suitable header fields found between BEG and END.Suitable header fields are To, CC and BCC." nil)(defun mail-setup (to subject in-reply-to cc replybuffer) (if (eq mail-aliases t) (progn (setq mail-aliases nil) (if (file-exists-p "~/.mailrc") (build-mail-aliases)))) (setq mail-reply-buffer replybuffer) (goto-char (point-min)) (insert "To: ") (save-excursion (if to (progn (insert to "\n") ;;; Here removed code to extract names from within <...> ;;; on the assumption that mail-strip-quoted-names ;;; has been called and has done so. (let ((fill-prefix "\t")) (fill-region (point-min) (point-max)))) (newline)) (if cc (let ((opos (point)) (fill-prefix "\t")) (insert "CC: " cc "\n") (fill-region-as-paragraph opos (point-max)))) (if in-reply-to (insert "In-reply-to: " in-reply-to "\n")) (insert "Subject: " (or subject "") "\n") (if mail-default-reply-to (insert "Reply-to: " mail-default-reply-to "\n")) (if mail-self-blind (insert "BCC: " (user-login-name) "\n")) (if mail-archive-file-name (insert "FCC: " mail-archive-file-name "\n")) (insert mail-header-separator "\n")) (if to (goto-char (point-max))) (or to subject in-reply-to (set-buffer-modified-p nil)) (run-hooks 'mail-setup-hook))(defun mail-mode () "Major mode for editing mail to be sent.Separate names of recipients (in To: and Cc: fields) with commas.Like Text Mode but with these additional commands:C-c C-s mail-send (send the message) C-c C-c mail-send-and-exitC-c C-f move to a header field (and create it if there isn't): C-c C-f C-t move to To: C-c C-f C-s move to Subj: C-c C-f C-b move to BCC: C-c C-f C-c move to CC:C-c C-w mail-signature (insert ~/.signature at end).C-c C-y mail-yank-original (insert current message, in Rmail).C-c C-q mail-fill-yanked-message (fill what was yanked)." (interactive) (kill-all-local-variables) (make-local-variable 'mail-reply-buffer) (setq mail-reply-buffer nil) (set-syntax-table text-mode-syntax-table) (use-local-map mail-mode-map) (setq local-abbrev-table text-mode-abbrev-table) (setq major-mode 'mail-mode) (setq mode-name "Mail") (setq buffer-offer-save t) (make-local-variable 'paragraph-separate) (make-local-variable 'paragraph-start) (setq paragraph-start (concat "^" mail-header-separator "$\\|^[ \t]*[-_][-_][-_]+$\\|" paragraph-start)) (setq paragraph-separate (concat "^" mail-header-separator "$\\|^[ \t]*[-_][-_][-_]+$\\|" paragraph-separate)) (run-hooks 'text-mode-hook 'mail-mode-hook))(if mail-mode-map nil (setq mail-mode-map (make-sparse-keymap)) (define-key mail-mode-map "\C-c?" 'describe-mode) (define-key mail-mode-map "\C-c\C-f\C-t" 'mail-to) (define-key mail-mode-map "\C-c\C-f\C-b" 'mail-bcc) (define-key mail-mode-map "\C-c\C-f\C-c" 'mail-cc) (define-key mail-mode-map "\C-c\C-f\C-s" 'mail-subject) (define-key mail-mode-map "\C-c\C-w" 'mail-signature) ; who (define-key mail-mode-map "\C-c\C-y" 'mail-yank-original) (define-key mail-mode-map "\C-c\C-q" 'mail-fill-yanked-message) (define-key mail-mode-map "\C-c\C-c" 'mail-send-and-exit) (define-key mail-mode-map "\C-c\C-s" 'mail-send))(defun mail-send-and-exit (arg) "Send message like mail-send, then, if no errors, exit from mail buffer.Prefix arg means don't delete this window." (interactive "P") (mail-send) (bury-buffer (current-buffer)) (if (and (not arg) (not (one-window-p)) (save-excursion (set-buffer (window-buffer (next-window (selected-window) 'not))) (eq major-mode 'rmail-mode))) (delete-window) (switch-to-buffer (other-buffer (current-buffer)))))(defun mail-send () "Send the message in the current buffer.If mail-interactive is non-nil, wait for success indicationor error messages, and inform user.Otherwise any failure is reported in a message back tothe user from the mailer." (interactive) (message "Sending...") (funcall send-mail-function) (set-buffer-modified-p nil) (delete-auto-save-file-if-necessary) (message "Sending...done"))(defun sendmail-send-it () (let ((errbuf (if mail-interactive (generate-new-buffer " sendmail errors") 0)) (tembuf (generate-new-buffer " sendmail 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 sendmail expects. (goto-char (point-min)) (re-search-forward (concat "^" (regexp-quote mail-header-separator) "\n")) (replace-match "\n") (backward-char 1) (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")) (let ((case-fold-search t)) ;; Find and handle any FCC fields. (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))))
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -