blueman <nos...@nospam.com> writes: > I would like to filter my *outgoing* mail composed in 'vm'. > I want to do this from Emacs at the last possible moment before the > email leaves emacs/vm... > > Specifically, I have a perl filter that I would like to run on each > email. > > What is the best way to hook into vm here. I know I could use > vm-mail-send-hook but that is a bit klugey in that I would have to first > read and that write back the region itself. I was curious whether there > are any hooks and/or functions more amenable to filtering.
Well, I wasn't able to find any hooks, but I solved my problem for now by putting 'before' advice on the function smtpmail-via-smtp. That is where the final changes are made to the email (including adding on mime & content headers and stripping off the on RFC standard headers) before it is actually sent. The function I wrote is of the following form -- it can be adapted as needed... (defvar smtpmail-filter-email-command "" "Command to run as filter in smtpmail-via-smtp function advice. Note: the command must return 0 on success. (JJK).") (defadvice smtpmail-via-smtp (before smtpmail-via-smtp-filter-email nil activate) "Run filter function 'smtpmail-filter-email-command' on outgoing email if an only if the header 'X-JJKFILTER' is present in the header. Note that header field is removed in the sent email.(JJK - advice)" (save-excursion (with-current-buffer smtpmail-text-buffer (and (re-search-forward "\n\n" nil t) (re-search-backward "^X-JJKFILTER:" nil t) (progn (delete-region (bol-point) (1+(eol-point))) (unless (= (shell-command-on-region (point-min) (point-max) smtp-filter-email-command nil t) 0) (error "ERROR: Failed to run smtpmail filter... sending aborted!")))))))