[gnu.emacs] mail logging with Emacs

davis@scr.slb.com (Paul Davis) (04/25/89)

Another piece of code I find useful: I really do not have a need for
an archive of complete mail messages I send to others, but I do find
it a help to have a log of when I send mail and to whom. The following
function performs this, writing the date, and the visible mail header
to a file. Its a bit naughty in that it inserts and then deletes the
date into your *mail* buffer without telling you, but then I didn't
want to have to set up a new buffer, farm off the header, add the
date, write the buffer to a file and then kill the new buffer.

I load this as part of my mail-mode-hook:

(setq mail-mode-hook '(lambda ()
			(require 'mail-log)
			(setq mail-log-outgoing t))


Here's a sample of my mail log file:

----------------------
Date: Mon Apr 24 08:32:01 1989
To: info-gnu-emacs@prep.ai.mit.edu
Subject: generic completion functions/function expansion
----------------------
Date: Mon Apr 24 08:35:59 1989
To: mansfiel
Subject: see Blair in FIN re: travellers cheques
----------------------
Date: Mon Apr 24 08:42:23 1989
To: dingwall%sifvx3%sifvx7.psi@prsrtr.psi
In-reply-to: Schlumberger Technologies Instruments, Farnborough, 
	Computer Systems Department.'s message of 
	Mon, 24 Apr 89 16:35:58 PDT <8904242335.AA07489@indigo.scr.slb.com>
Subject: RE: "UKnet"
----------------------

enjoy

Paul
                             Paul Davis at Schlumberger Cambridge Research
                                <davis%scrsu1%sdr.slb.com@relay.cs.net>

                              "to shatter tradition makes us feel free ..."

---- cut here ----
;;; mail-logging
;;; Paul Davis <davis%scr.slb.com@relay.cs.net> April 1989
;;;
;;; this code is subject to the terms of the GNU Emacs general public license

;;; provide logging of outgoing mail messages

;;; if mail-log-outgoing is non-nil, then each call to
;;; mail-send will append the date and header of the outgoing
;;; mail message to mail-log-file (~/.mail-log by default).

(defvar mail-log-outgoing nil
  "*If non-nil, write the addressee and date of each outgoing mail
message to mail-log-file")
(defvar mail-log-file "~/.mail-log")

(defun mail-send ()
  "Send the message in the current buffer.
If  mail-interactive  is non-nil, wait for success indication
or error messages, and inform user.
Otherwise any failure is reported in a message back to
the user from the mailer.

If mail-log-outgoing is non-nil, write a summary of the outgoing mail
to mail-log-file."
  (interactive)
  (if mail-log-outgoing
      (mail-write-log))
  (message "Sending...")
  (funcall send-mail-function)
  (set-buffer-modified-p nil)
  (delete-auto-save-file-if-necessary)
  (message "Sending...done"))

(defun mail-write-log ()
  (save-excursion
    (save-restriction
      (goto-char (point-min))
      (insert (concat "----------------------\nDate: " 
		      (current-time-string) "\n"))
      (re-search-forward
       (concat "^" (regexp-quote mail-header-separator)))
      (beginning-of-line)
      (write-region (point-min) (point) mail-log-file t 1)
      (delete-region (point-min) 
		     (save-excursion 
		       (goto-char (point-min))
		       (end-of-line 2) 
		       (1+ (point)))))))
    
(provide 'mail-log)