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!")))))))

Reply via email to