annotate lisp/packages/feedmail.el @ 147:e186c2b7192d xemacs-20-2

Added tag r20-2p1 for changeset 2af401a6ecca
author cvs
date Mon, 13 Aug 2007 09:34:48 +0200
parents 34a5b81f86ba
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1 ;;; feedmail.el --- outbound mail handling
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3 ;; Keywords: mail
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5 ;;; Synched up with: Not in FSF.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
6
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
7 ;;; From: William.J.Carpenter@hos1cad.att.com (Bill C)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
8 ;;; Subject: feedmail.el, patchlevel 2 [repost]
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
9 ;;; Date: 8 Jun 91 22:23:00 GMT
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
10 ;;; Organization: AT&T Bell Laboratories
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
11 ;;;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
12 ;;; 5-may-92 jwz Conditionalized calling expand-mail-aliases, since that
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
13 ;;; function doesn't exist in Lucid GNU Emacs or when using
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
14 ;;; mail-abbrevs.el.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
15 ;;;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
16 ;;; Here's the latest version of feedmail.el, a replacement for parts of
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
17 ;;; GNUemacs' sendmail.el (specifically, it's what handles your outgoing
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
18 ;;; mail after you type C-c C-c in mail mode). (Sorry if you're seeing
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
19 ;;; this a second time. Looks like my earlier attempt to post it didn't
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
20 ;;; get off the local machine.)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
21 ;;;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
22 ;;; This version contains the following new things:
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
23 ;;;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
24 ;;; * fix for handling default-case-fold-search
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
25 ;;; * involve user-full-name in default from line
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
26 ;;; * fix for my improper use of mail-strip-quoted-names when
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
27 ;;; addresses contain a mix of "<>" and "()" styles
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
28 ;;; * new feature allowing optional generation of Message-ID
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
29
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
30 ;;; feedmail.el
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
31 ;;; LCD record:
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
32 ;;; feedmail|Bill Carpenter|william.j.carpenter@att.com|Outbound mail handling|91-05-24|2|feedmail.el
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
33 ;;;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
34 ;;; Written by Bill Carpenter <william.j.carpenter@att.com>
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
35 ;;; original, 31 March 1991
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
36 ;;; patchlevel 1, 5 April 1991
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
37 ;;; patchlevel 2, 24 May 1991
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
38 ;;;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
39 ;;; As far as I'm concerned, anyone can do anything they want with
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
40 ;;; this specific piece of code. No warranty or promise of support is
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
41 ;;; offered.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
42 ;;;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
43 ;;; This stuff does in elisp the stuff that used to be done
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
44 ;;; by the separate program "fakemail" for processing outbound email.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
45 ;;; In other words, it takes over after you hit "C-c C-c" in mail mode.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
46 ;;; By appropriate setting of options, you can still use "fakemail",
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
47 ;;; or you can even revert to sendmail (which is not too popular
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
48 ;;; locally). See the variables at the top of the elisp for how to
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
49 ;;; achieve these effects:
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
50 ;;;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
51 ;;; --- you can get one last look at the prepped outbound message and
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
52 ;;; be prompted for confirmation
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
53 ;;;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
54 ;;; --- removes BCC: headers after getting address info
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
55 ;;;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
56 ;;; --- does smart filling of TO: and CC: headers
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
57 ;;;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
58 ;;; --- processes FCC: lines and removes them
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
59 ;;;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
60 ;;; --- empty headers are removed
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
61 ;;;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
62 ;;; --- can force FROM: or SENDER: line
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
63 ;;;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
64 ;;; --- can generate a Message-ID line
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
65 ;;;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
66 ;;; --- strips comments from address info (both "()" and "<>" are
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
67 ;;; handled via a call to mail-strip-quoted-names); the
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
68 ;;; comments are stripped in the simplified address list given
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
69 ;;; to a subprocess, not in the headers in the mail itself
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
70 ;;; (they are left unchanged, modulo smart filling)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
71 ;;;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
72 ;;; --- error info is pumped into a normal buffer instead of the
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
73 ;;; minibuffer
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
74 ;;;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
75 ;;; --- just before the optional prompt for confirmation, lets you
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
76 ;;; run a hook on the prepped message and simplified address
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
77 ;;; list
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
78 ;;;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
79 ;;; --- you can specify something other than /bin/mail for the
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
80 ;;; subprocess
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
81 ;;;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
82 ;;; After a few options below, you will find the function
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
83 ;;; feedmail-send-it. Everything after that function is just local
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
84 ;;; stuff for this file. There are two ways you can use the stuff in
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
85 ;;; this file:
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
86 ;;;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
87 ;;; (1) Put the contents of this file into sendmail.el and change the
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
88 ;;; name of feedmail-send-it to sendmail-send-it, replacing that
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
89 ;;; function in sendmail.el.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
90 ;;;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
91 ;;; or
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
92 ;;;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
93 ;;; (2) Save this file as feedmail.el somewhere on your elisp
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
94 ;;; loadpath; byte-compile it. Put the following lines somewhere in
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
95 ;;; your ~/.emacs stuff:
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
96 ;;;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
97 ;;; (setq send-mail-function 'feedmail-send-it)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
98 ;;; (autoload 'feedmail-send-it "feedmail")
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
99 ;;;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
100
134
34a5b81f86ba Import from CVS: tag r20-2b1
cvs
parents: 0
diff changeset
101 (defgroup feedmail nil
34a5b81f86ba Import from CVS: tag r20-2b1
cvs
parents: 0
diff changeset
102 "Outbound mail handling."
34a5b81f86ba Import from CVS: tag r20-2b1
cvs
parents: 0
diff changeset
103 :group 'mail)
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
104
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
105
134
34a5b81f86ba Import from CVS: tag r20-2b1
cvs
parents: 0
diff changeset
106 (defcustom feedmail-confirm-outgoing nil
34a5b81f86ba Import from CVS: tag r20-2b1
cvs
parents: 0
diff changeset
107 "*If non-nil, gives a y-or-n confirmation prompt after prepping,
34a5b81f86ba Import from CVS: tag r20-2b1
cvs
parents: 0
diff changeset
108 before sending mail."
34a5b81f86ba Import from CVS: tag r20-2b1
cvs
parents: 0
diff changeset
109 :type 'boolean
34a5b81f86ba Import from CVS: tag r20-2b1
cvs
parents: 0
diff changeset
110 :group 'feedmail)
34a5b81f86ba Import from CVS: tag r20-2b1
cvs
parents: 0
diff changeset
111
34a5b81f86ba Import from CVS: tag r20-2b1
cvs
parents: 0
diff changeset
112
34a5b81f86ba Import from CVS: tag r20-2b1
cvs
parents: 0
diff changeset
113 (defcustom feedmail-nuke-bcc t
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
114 "*Non-nil means get rid of the BCC: lines from the message header
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
115 text before sending the mail. In any case, the BCC: lines do
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
116 participate in the composed address list. You probably want to keep
134
34a5b81f86ba Import from CVS: tag r20-2b1
cvs
parents: 0
diff changeset
117 them if you're using sendmail (see feedmail-buffer-eating-function)."
34a5b81f86ba Import from CVS: tag r20-2b1
cvs
parents: 0
diff changeset
118 :type 'boolean
34a5b81f86ba Import from CVS: tag r20-2b1
cvs
parents: 0
diff changeset
119 :group 'feedmail)
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
120
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
121
134
34a5b81f86ba Import from CVS: tag r20-2b1
cvs
parents: 0
diff changeset
122 (defcustom feedmail-fill-to-cc t
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
123 "*Non-nil means do smart filling (line-wrapping) of TO: and CC: header
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
124 lines. If nil, the lines are left as-is. The filling is done after
134
34a5b81f86ba Import from CVS: tag r20-2b1
cvs
parents: 0
diff changeset
125 mail address alias expansion."
34a5b81f86ba Import from CVS: tag r20-2b1
cvs
parents: 0
diff changeset
126 :type 'boolean
34a5b81f86ba Import from CVS: tag r20-2b1
cvs
parents: 0
diff changeset
127 :group 'feedmail)
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
128
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
129
134
34a5b81f86ba Import from CVS: tag r20-2b1
cvs
parents: 0
diff changeset
130 (defcustom feedmail-fill-to-cc-fill-column default-fill-column
34a5b81f86ba Import from CVS: tag r20-2b1
cvs
parents: 0
diff changeset
131 "*Fill column used when wrapping mail TO: and CC: lines."
34a5b81f86ba Import from CVS: tag r20-2b1
cvs
parents: 0
diff changeset
132 :type 'integer
34a5b81f86ba Import from CVS: tag r20-2b1
cvs
parents: 0
diff changeset
133 :group 'feedmail)
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
134
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
135
134
34a5b81f86ba Import from CVS: tag r20-2b1
cvs
parents: 0
diff changeset
136 (defcustom feedmail-nuke-empty-headers t
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
137 "*If non-nil, headers with no contents are removed from the outgoing
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
138 email. A completely empty SUBJECT: header is always removed,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
139 regardless of the setting of this variable. The only time you would
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
140 want them left in would be if you used some headers whose presence
134
34a5b81f86ba Import from CVS: tag r20-2b1
cvs
parents: 0
diff changeset
141 indicated something rather than their contents."
34a5b81f86ba Import from CVS: tag r20-2b1
cvs
parents: 0
diff changeset
142 :type 'boolean
34a5b81f86ba Import from CVS: tag r20-2b1
cvs
parents: 0
diff changeset
143 :group 'feedmail)
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
144
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
145 ;;; wjc sez: I think the use of the SENDER: line is pretty pointless,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
146 ;;; but I left it in to be compatible with sendmail.el and because
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
147 ;;; maybe some distant mail system needs it. Really, though, if you
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
148 ;;; want a sender line in your mail, just put one in there and don't
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
149 ;;; wait for feedmail to do it for you.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
150
134
34a5b81f86ba Import from CVS: tag r20-2b1
cvs
parents: 0
diff changeset
151 (defcustom feedmail-sender-line nil
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
152 "*If nil, no SENDER: header is forced. If non-nil and the email
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
153 already has a FROM: header, a SENDER: header is forced with this as
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
154 its contents. You can probably leave this nil, but if you feel like
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
155 using it, a good value would be a fully-qualified domain name form of
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
156 your address. For example, william.j.carpenter@att.com. Don't
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
157 include a trailing newline or the keyword SENDER:. They're
134
34a5b81f86ba Import from CVS: tag r20-2b1
cvs
parents: 0
diff changeset
158 automatically provided."
34a5b81f86ba Import from CVS: tag r20-2b1
cvs
parents: 0
diff changeset
159 :type 'boolean
34a5b81f86ba Import from CVS: tag r20-2b1
cvs
parents: 0
diff changeset
160 :group 'feedmail)
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
161
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
162
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
163 ;; user-full-name suggested by kpc@ptolemy.arc.nasa.gov (=Kimball Collins)
134
34a5b81f86ba Import from CVS: tag r20-2b1
cvs
parents: 0
diff changeset
164 (defcustom feedmail-from-line
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
165 (concat (user-login-name) "@" (system-name) " (" (user-full-name) ")")
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
166 "*If non-nil and the email has no FROM: header, one will be forced
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
167 with this as its contents. A good value would be a fully-qualified
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
168 domain name form of your address. For example, william.j.carpenter@att.com.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
169 (The default value of this variable is probably not very good, since
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
170 it doesn't have a domain part.) Don't include a trailing newline or
134
34a5b81f86ba Import from CVS: tag r20-2b1
cvs
parents: 0
diff changeset
171 the keyword FROM:. They're automatically provided."
34a5b81f86ba Import from CVS: tag r20-2b1
cvs
parents: 0
diff changeset
172 :type '(choice (const nil) string)
34a5b81f86ba Import from CVS: tag r20-2b1
cvs
parents: 0
diff changeset
173 :group 'feedmail)
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
174
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
175
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
176 ;;; Here's how I use the GNUS Message-ID generator for mail but not
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
177 ;;; for news postings:
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
178 ;;;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
179 ;;; (setq feedmail-message-id-generator 'wjc:gnusish-message-id)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
180 ;;; (setq gnus-your-domain "hos1cad.ATT.COM")
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
181 ;;;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
182 ;;; (defun wjc:gnusish-message-id ()
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
183 ;;; (require 'gnuspost)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
184 ;;; (if (fboundp 'wjc:gnus-inews-message-id)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
185 ;;; (wjc:gnus-inews-message-id)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
186 ;;; (gnus-inews-message-id)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
187 ;;;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
188 ;;; (setq news-inews-hook
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
189 ;;; '(lambda ()
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
190 ;;; (defun gnus-inews-date () nil)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
191 ;;; (fset 'wjc:gnus-inews-message-id (symbol-function 'gnus-inews-message-id))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
192 ;;; (defun gnus-inews-message-id () nil)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
193 ;;; ))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
194 ;;;
134
34a5b81f86ba Import from CVS: tag r20-2b1
cvs
parents: 0
diff changeset
195 (defcustom feedmail-message-id-generator nil
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
196 "*If non-nil, should be a function (called with no arguments) which
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
197 will generate a unique message ID which will be inserted on a
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
198 Message-ID: header. The message ID should be the return value of the
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
199 function. Don't include trailing newline, leading space, or the
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
200 keyword MESSAGE-ID. They're automatically provided. Do include
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
201 surrounding <> brackets. For an example of a message ID generating
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
202 function, you could look at the GNUS function gnus-inews-message-id.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
203 When called, the current buffer is the prepped outgoing mail buffer
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
204 (the function may inspect it, but shouldn't modify it). If the returned
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
205 value doesn't contain any non-whitespace characters, no message ID
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
206 header is generated, so you could generate them conditionally,
134
34a5b81f86ba Import from CVS: tag r20-2b1
cvs
parents: 0
diff changeset
207 based on the contents of the mail."
34a5b81f86ba Import from CVS: tag r20-2b1
cvs
parents: 0
diff changeset
208 :type 'boolean
34a5b81f86ba Import from CVS: tag r20-2b1
cvs
parents: 0
diff changeset
209 :group 'feedmail)
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
210
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
211
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
212 (defun feedmail-confirm-addresses-hook-example ()
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
213 "An example of a last chance hook that shows the simple addresses
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
214 and gets a confirmation. Use as (setq feedmail-last-chance-hook
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
215 'feedmail-confirm-addresses-hook-example)."
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
216 (save-window-excursion
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
217 (display-buffer feedmail-address-buffer)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
218 (if (not (y-or-n-p "How do you like them apples? "))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
219 (error "Sending...gave up in last chance hook"))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
220
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
221
134
34a5b81f86ba Import from CVS: tag r20-2b1
cvs
parents: 0
diff changeset
222 (defcustom feedmail-last-chance-hook nil
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
223 "*User's last opportunity to modify the message on its way out. It
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
224 has already had all the header prepping from the standard package.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
225 The next step after running the hook will be to push the buffer into a
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
226 subprocess that mails the mail. The hook might be interested in these
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
227 buffers: (1) feedmail-prepped-text-buffer contains the header and body
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
228 of the message, ready to go; (2) feedmail-address-buffer contains the
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
229 space-separated, simplified list of addresses which is to be given to
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
230 the subprocess (the hook may change them). feedmail-error-buffer is
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
231 an empty buffer intended to soak up errors for display to the user.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
232 If the hook allows interactive activity, the user should not send more
134
34a5b81f86ba Import from CVS: tag r20-2b1
cvs
parents: 0
diff changeset
233 mail while in the hook since some of the internal buffers will be reused."
34a5b81f86ba Import from CVS: tag r20-2b1
cvs
parents: 0
diff changeset
234 :type 'hook
34a5b81f86ba Import from CVS: tag r20-2b1
cvs
parents: 0
diff changeset
235 :group 'feedmail)
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
236
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
237 ;; XEmacs change: make the default more sensible.
134
34a5b81f86ba Import from CVS: tag r20-2b1
cvs
parents: 0
diff changeset
238 (defcustom feedmail-buffer-eating-function
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
239 (if (and (boundp 'sendmail-program)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
240 (string-match "sendmail" sendmail-program))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
241 'feedmail-buffer-to-sendmail
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
242 'feedmail-buffer-to-binmail)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
243 "*Function used to send the prepped buffer to a subprocess. The
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
244 function's three (mandatory) arguments are: (1) the buffer containing
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
245 the prepped message; (2) a buffer where errors should be directed; and
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
246 (3) a string containing the space-separated list of simplified
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
247 addresses. Two popular choices for this are 'feedmail-buffer-to-binmail
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
248 and 'feedmail-buffer-to-sendmail. If you use the sendmail form, you
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
249 probably want to set feedmail-nuke-bcc to nil. If you use the binmail
134
34a5b81f86ba Import from CVS: tag r20-2b1
cvs
parents: 0
diff changeset
250 form, check the value of feedmail-binmail-template."
34a5b81f86ba Import from CVS: tag r20-2b1
cvs
parents: 0
diff changeset
251 :type 'function
34a5b81f86ba Import from CVS: tag r20-2b1
cvs
parents: 0
diff changeset
252 :group 'feedmail)
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
253
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
254
134
34a5b81f86ba Import from CVS: tag r20-2b1
cvs
parents: 0
diff changeset
255 (defcustom feedmail-binmail-template (if mail-interactive "/bin/mail %s" "/bin/rmail %s")
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
256 "*Command template for the subprocess which will get rid of the
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
257 mail. It can result in any command understandable by /bin/sh. The
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
258 single '%s', if present, gets replaced by the space-separated,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
259 simplified list of addressees. Used in feedmail-buffer-to-binmail to
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
260 form the shell command which will receive the contents of the prepped
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
261 buffer as stdin. If you'd like your errors to come back as mail
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
262 instead of immediately in a buffer, try /bin/rmail instead of
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
263 /bin/mail (this can be accomplished by keeping the default nil setting
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
264 of mail-interactive). You might also like to consult local mail
134
34a5b81f86ba Import from CVS: tag r20-2b1
cvs
parents: 0
diff changeset
265 experts for any other interesting command line possibilities."
34a5b81f86ba Import from CVS: tag r20-2b1
cvs
parents: 0
diff changeset
266 :type 'string
34a5b81f86ba Import from CVS: tag r20-2b1
cvs
parents: 0
diff changeset
267 :group 'feedmail)
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
268
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
269
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
270 ;; feedmail-buffer-to-binmail and feedmail-buffer-to-sendmail are the
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
271 ;; only things provided for values for the variable
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
272 ;; feedmail-buffer-eating-function. It's pretty easy to write your
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
273 ;; own, though.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
274
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
275 (defun feedmail-buffer-to-binmail (prepped-mail-buffer mail-error-buffer simple-address-list)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
276 "Function which actually calls /bin/mail as a subprocess and feeds the buffer to it."
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
277 (save-excursion
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
278 (set-buffer prepped-mail-buffer)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
279 (apply 'call-process-region
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
280 (append (list (point-min) (point-max)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
281 "/bin/sh" nil mail-error-buffer nil "-c"
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
282 (format feedmail-binmail-template simple-address-list ))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
283 ) ;; save-excursion
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
284 )
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
285
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
286
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
287 (defun feedmail-buffer-to-sendmail (prepped-mail-buffer feedmail-error-buffer simple-address-list)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
288 "Function which actually calls sendmail as a subprocess and feeds the buffer to it."
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
289 (save-excursion
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
290 (set-buffer prepped-mail-buffer)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
291 (apply 'call-process-region
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
292 (append (list (point-min) (point-max)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
293 (if (boundp 'sendmail-program)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
294 sendmail-program
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
295 "/usr/lib/sendmail")
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
296 nil feedmail-error-buffer nil
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
297 "-oi" "-t")
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
298 ;; Don't say "from root" if running under su.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
299 (and (equal (user-real-login-name) "root")
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
300 (list "-f" (user-login-name)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
301 ;; These mean "report errors by mail"
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
302 ;; and "deliver in background".
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
303 (if (null mail-interactive) '("-oem" "-odb"))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
304 ))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
305
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
306
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
307 ;; feedmail-send-it is the only "public" function is this file.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
308 ;; All of the others are just little helpers.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
309 ;;;###autoload
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
310 (defun feedmail-send-it ()
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
311 (let* ((default-case-fold-search t)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
312 (feedmail-error-buffer (get-buffer-create " *Outgoing Email Errors*"))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
313 (feedmail-prepped-text-buffer (get-buffer-create " *Outgoing Email Text*"))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
314 (feedmail-address-buffer (get-buffer-create " *Outgoing Email Address List*"))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
315 (feedmail-raw-text-buffer (current-buffer))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
316 (case-fold-search nil)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
317 end-of-headers-marker)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
318
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
319 (unwind-protect (save-excursion
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
320 (set-buffer feedmail-prepped-text-buffer) (erase-buffer)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
321
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
322 ;; jam contents of user-supplied mail buffer into our scratch buffer
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
323 (insert-buffer-substring feedmail-raw-text-buffer)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
324
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
325 ;; require one newline at the end.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
326 (goto-char (point-max))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
327 (or (= (preceding-char) ?\n) (insert ?\n))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
328
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
329 ;; Change header-delimiter to be what mailers expect (empty line).
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
330 (goto-char (point-min))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
331 (re-search-forward (concat "^" (regexp-quote mail-header-separator) "\n"))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
332 (replace-match "\n")
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
333 ;; why was this backward-char here?
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
334 ;;(backward-char 1)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
335 (setq end-of-headers-marker (point-marker))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
336
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
337 (if (and (fboundp 'expand-mail-aliases) ; nil = mail-abbrevs.el
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
338 mail-aliases)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
339 (expand-mail-aliases (point-min) end-of-headers-marker))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
340
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
341 ;; make it pretty
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
342 (if feedmail-fill-to-cc (feedmail-fill-to-cc-function end-of-headers-marker))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
343 ;; ignore any blank lines in the header
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
344 (goto-char (point-min))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
345 (while (and (re-search-forward "\n\n\n*" end-of-headers-marker t) (< (point) end-of-headers-marker))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
346 (replace-match "\n"))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
347
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
348 (let ((case-fold-search t))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
349 (feedmail-deduce-address-list feedmail-prepped-text-buffer (point-min) end-of-headers-marker)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
350 (save-excursion (set-buffer feedmail-address-buffer)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
351 (goto-char (point-min))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
352 (if (not (re-search-forward "\\S-" (point-max) t))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
353 (error "Sending...abandoned, no addressees!")))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
354
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
355 ;; Find and handle any BCC fields.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
356 (if feedmail-nuke-bcc (feedmail-do-bcc end-of-headers-marker))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
357
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
358 ;; Find and handle any FCC fields.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
359 (goto-char (point-min))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
360 (if (re-search-forward "^FCC:" end-of-headers-marker t)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
361 (mail-do-fcc end-of-headers-marker))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
362
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
363 (goto-char (point-min))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
364 (if (re-search-forward "^FROM:" end-of-headers-marker t)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
365
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
366 ;; If there is a FROM: and no SENDER:, put in a SENDER:
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
367 ;; if requested by user
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
368 (if (and feedmail-sender-line
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
369 (not (save-excursion (goto-char (point-min))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
370 (re-search-forward "^SENDER:" end-of-headers-marker t))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
371 (progn (forward-line 1) (insert "Sender: " feedmail-sender-line "\n")))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
372
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
373 ;; no FROM: ... force one?
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
374 (if feedmail-from-line
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
375 (progn (goto-char (point-min)) (insert "From: " feedmail-from-line "\n")))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
376 )
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
377
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
378 ;; don't send out a blank subject line
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
379 (goto-char (point-min))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
380 (if (re-search-forward "^Subject:[ \t]*\n" end-of-headers-marker t)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
381 (replace-match ""))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
382
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
383 ;; don't send out a blank headers of various sorts
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
384 (goto-char (point-min))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
385 (and feedmail-nuke-empty-headers ;; hey, who's an empty-header?
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
386 (while (re-search-forward "^[A-Za-z0-9-]+:[ \t]*\n" end-of-headers-marker t)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
387 (replace-match ""))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
388
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
389 ;; message ID generation
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
390 (if feedmail-message-id-generator
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
391 (progn
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
392 (goto-char (point-min))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
393 (if (re-search-forward "^MESSAGE-ID:[ \t]*\n" end-of-headers-marker t)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
394 (replace-match ""))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
395 (setq feedmail-msgid-part (funcall feedmail-message-id-generator))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
396 (goto-char (point-min))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
397 (and feedmail-msgid-part (string-match "[^ \t]" feedmail-msgid-part)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
398 (insert "Message-ID: " feedmail-msgid-part "\n"))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
399
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
400
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
401 (save-excursion (set-buffer feedmail-error-buffer) (erase-buffer))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
402
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
403 (run-hooks 'feedmail-last-chance-hook)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
404
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
405 (if (or (not feedmail-confirm-outgoing) (feedmail-one-last-look feedmail-prepped-text-buffer))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
406 (funcall feedmail-buffer-eating-function feedmail-prepped-text-buffer feedmail-error-buffer
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
407 (save-excursion (set-buffer feedmail-address-buffer) (buffer-string)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
408 (error "Sending...abandoned")
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
409 )
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
410 ) ;; unwind-protect body (save-excursion)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
411
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
412 ;; unwind-protect cleanup forms
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
413 (kill-buffer feedmail-prepped-text-buffer)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
414 (kill-buffer feedmail-address-buffer)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
415 (set-buffer feedmail-error-buffer)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
416 (if (zerop (buffer-size))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
417 (kill-buffer feedmail-error-buffer)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
418 (progn (display-buffer feedmail-error-buffer)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
419 (error "Sending...failed")))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
420 (set-buffer feedmail-raw-text-buffer))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
421 ) ;; let
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
422 )
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
423
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
424
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
425 (defun feedmail-do-bcc (header-end)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
426 "Delete BCC: and their continuation lines from the header area.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
427 There may be multiple BCC: lines, and each may have arbitrarily
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
428 many continuation lines."
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
429 (let ((case-fold-search t))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
430 (save-excursion (goto-char (point-min))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
431 ;; iterate over all BCC: lines
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
432 (while (re-search-forward "^BCC:" header-end t)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
433 (delete-region (match-beginning 0) (progn (forward-line 1) (point)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
434 ;; get rid of any continuation lines
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
435 (while (and (looking-at "^[ \t].*\n") (< (point) header-end))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
436 (replace-match ""))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
437 )
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
438 ) ;; save-excursion
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
439 ) ;; let
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
440 )
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
441
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
442 (defun feedmail-fill-to-cc-function (header-end)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
443 "Smart filling of TO: and CC: headers. The filling tries to avoid
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
444 splitting lines except at commas. This avoids, in particular,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
445 splitting within parenthesized comments in addresses."
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
446 (let ((case-fold-search t)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
447 (fill-prefix "\t")
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
448 (fill-column feedmail-fill-to-cc-fill-column)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
449 this-line
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
450 this-line-end)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
451 (save-excursion (goto-char (point-min))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
452 ;; iterate over all TO:/CC: lines
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
453 (while (re-search-forward "^\\(TO:\\|CC:\\)" header-end t)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
454 (setq this-line (match-beginning 0))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
455 (forward-line 1)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
456 ;; get any continuation lines
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
457 (while (and (looking-at "^[ \t]+") (< (point) header-end))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
458 (replace-match " ")
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
459 (forward-line 1))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
460 (setq this-line-end (point-marker))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
461
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
462 ;; The general idea is to break only on commas. Change
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
463 ;; all the blanks to something unprintable; change the
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
464 ;; commas to blanks; fill the region; change it back.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
465 (subst-char-in-region this-line this-line-end ? 2 t) ;; blank --> C-b
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
466 (subst-char-in-region this-line this-line-end ?, ? t) ;; comma --> blank
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
467 (fill-region-as-paragraph this-line this-line-end)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
468
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
469 (subst-char-in-region this-line this-line-end ? ?, t) ;; comma <-- blank
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
470 (subst-char-in-region this-line this-line-end 2 ? t) ;; blank <-- C-b
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
471
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
472 ;; look out for missing commas before continuation lines
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
473 (save-excursion
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
474 (goto-char this-line)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
475 (while (re-search-forward "\\([^,]\\)\n\t[ ]*" this-line-end t)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
476 (replace-match "\\1,\n\t")))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
477 )
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
478 ) ;; while
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
479 ) ;; save-excursion
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
480 )
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
481
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
482
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
483 (defun feedmail-deduce-address-list (feedmail-text-buffer header-start header-end)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
484 "Get address list suitable for command line use on simple /bin/mail."
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
485 (require 'mail-utils) ;; pick up mail-strip-quoted-names
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
486 (let
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
487 ((case-fold-search t)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
488 (simple-address-list "")
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
489 this-line
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
490 this-line-end)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
491 (unwind-protect
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
492 (save-excursion
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
493 (set-buffer feedmail-address-buffer) (erase-buffer)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
494 (insert-buffer-substring feedmail-text-buffer header-start header-end)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
495 (goto-char (point-min))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
496 (while (re-search-forward "^\\(TO:\\|CC:\\|BCC:\\)" header-end t)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
497 (replace-match "")
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
498 (setq this-line (match-beginning 0))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
499 (forward-line 1)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
500 ;; get any continuation lines
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
501 (while (and (looking-at "^[ \t]+") (< (point) header-end))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
502 (forward-line 1))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
503 (setq this-line-end (point-marker))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
504 (setq simple-address-list
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
505 (concat simple-address-list " "
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
506 (mail-strip-quoted-names (buffer-substring this-line this-line-end))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
507 )
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
508 (erase-buffer)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
509 (insert-string simple-address-list)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
510 (subst-char-in-region (point-min) (point-max) 10 ? t) ;; newline --> blank
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
511 (subst-char-in-region (point-min) (point-max) ?, ? t) ;; comma --> blank
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
512 (subst-char-in-region (point-min) (point-max) 9 ? t) ;; tab --> blank
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
513
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
514 (goto-char (point-min))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
515 ;; tidyness in case hook is not robust when it looks at this
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
516 (while (re-search-forward "[ \t]+" header-end t) (replace-match " "))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
517
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
518 )
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
519 )
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
520 )
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
521 )
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
522
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
523
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
524 (defun feedmail-one-last-look (feedmail-prepped-text-buffer)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
525 "Offer the user one last chance to give it up."
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
526 (save-excursion (save-window-excursion
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
527 (switch-to-buffer feedmail-prepped-text-buffer)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
528 (y-or-n-p "Send this email? "))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
529
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
530
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
531 (provide 'feedmail)