Function: uce-reply-to-uce
uce-reply-to-uce is an interactive and byte-compiled function defined
in uce.el.gz.
Signature
(uce-reply-to-uce &optional IGNORED)
Documentation
Compose a reply to unsolicited commercial email (UCE).
Sets up a reply buffer addressed to: the sender, his postmaster,
his abuse@ address, and the postmaster of the mail relay used.
You might need to set uce-mail-reader before using this.
Key Bindings
Source Code
;; Defined in /usr/src/emacs/lisp/obsolete/uce.el.gz
;;;###autoload
(defun uce-reply-to-uce (&optional _ignored)
"Compose a reply to unsolicited commercial email (UCE).
Sets up a reply buffer addressed to: the sender, his postmaster,
his abuse@ address, and the postmaster of the mail relay used.
You might need to set `uce-mail-reader' before using this."
(interactive)
;; Start of mail-client dependent section.
(let ((message-buffer
(cond ((eq uce-mail-reader 'gnus) gnus-original-article-buffer)
((eq uce-mail-reader 'rmail) (bound-and-true-p rmail-buffer))
(t (error
"Variable uce-mail-reader set to unrecognized value"))))
pruned)
(or (and message-buffer (get-buffer message-buffer))
(error "No mail buffer, cannot find UCE"))
(switch-to-buffer message-buffer)
;; We need the message with headers pruned.
;; Why? All we do is get the from and reply-to headers. ?
(and (eq uce-mail-reader 'rmail)
(not (setq pruned (rmail-msg-is-pruned)))
(rmail-toggle-header 1))
(let ((to (mail-strip-quoted-names (mail-fetch-field "from" t)))
(reply-to (mail-fetch-field "reply-to"))
temp)
;; Initial setting of the list of recipients of our message; that's
;; what they are pretending to be.
(setq to (if to
(format "%s" (mail-strip-quoted-names to))
""))
(if reply-to
(setq to (format "%s, %s" to (mail-strip-quoted-names reply-to))))
(let (first-at-sign end-of-hostname sender-host)
(setq first-at-sign (string-search "@" to)
end-of-hostname (string-match "[ ,>]" to first-at-sign)
sender-host (substring to first-at-sign end-of-hostname))
(if (string-search "." sender-host)
(setq to (format "%s, postmaster%s, abuse%s"
to sender-host sender-host))))
(setq mail-send-actions nil)
(setq mail-reply-buffer nil)
(when (eq uce-mail-reader 'rmail)
(rmail-toggle-header 0)
(rmail-maybe-set-message-counters)) ; why?
(copy-region-as-kill (point-min) (point-max))
;; Restore the initial header state we found.
(and pruned (rmail-toggle-header 1))
(switch-to-buffer "*mail*")
(erase-buffer)
(yank)
(goto-char (point-min))
;; Delete any internal Rmail headers.
(when (eq uce-mail-reader 'rmail)
(search-forward "\n\n")
(while (re-search-backward "^X-RMAIL" nil t)
(delete-region (point) (line-beginning-position 2)))
(goto-char (point-min)))
;; Now find the mail hub that first accepted this message.
;; This should try to find the last Received: header.
;; Sometimes there may be other headers in between Received: headers.
(cond ((eq uce-mail-reader 'gnus)
;; Does Gnus always have Lines: in the end?
(re-search-forward "^Lines:")
(beginning-of-line))
((eq uce-mail-reader 'rmail)
(search-forward "\n\n")))
(re-search-backward "^Received:")
;; Is this always good? It's the only thing I saw when I checked
;; a few messages.
;;(if (not (re-search-forward ": \\(from\\|by\\) " eol t))
(unless (re-search-forward "\\(from\\|by\\) " (line-end-position) 'move)
(if (looking-at "[ \t\n]+\\(from\\|by\\) ")
(goto-char (match-end 0))
(error "Failed to extract hub address")))
(setq temp (point))
(search-forward " ")
(forward-char -1)
;; And add its postmaster to the list of addresses.
(if (string-search "." (buffer-substring temp (point)))
(setq to (format "%s, postmaster@%s"
to (buffer-substring temp (point)))))
;; Also look at the message-id, it helps *very* often.
(and (search-forward "\nMessage-Id: " nil t)
;; Not all Message-Id:'s have an `@' sign.
(search-forward "@" (line-end-position) t)
(progn
(setq temp (point))
(search-forward ">")
(forward-char -1)
(if (string-search "." (buffer-substring temp (point)))
(setq to (format "%s, postmaster@%s"
to (buffer-substring temp (point)))))))
(when (eq uce-mail-reader 'gnus)
;; Does Gnus always have Lines: in the end?
(re-search-forward "^Lines:")
(beginning-of-line)
(setq temp (point))
(search-forward "\n\n" nil t)
(forward-line -1)
(delete-region temp (point)))
;; End of mail-client dependent section.
(auto-save-mode auto-save-default)
(mail-mode)
(goto-char (point-min))
(insert "To: ")
(save-excursion
(if to
(let ((fill-prefix "\t")
(address-start (point)))
(insert to "\n")
(fill-region-as-paragraph address-start (point)))
(newline))
(insert "Subject: " uce-subject-line "\n")
(if uce-default-headers
(insert uce-default-headers))
(if mail-default-headers
(insert mail-default-headers))
(if mail-default-reply-to
(insert "Reply-To: " mail-default-reply-to "\n"))
(insert mail-header-separator "\n")
;; Insert all our text. Then go back to the place where we started.
(if to (setq to (point)))
;; Text of ranting.
(if uce-message-text
(insert uce-message-text))
;; Signature.
(cond ((eq uce-signature t)
(if (file-exists-p "~/.signature")
(progn
(insert "\n\n-- \n")
(forward-char (cadr (insert-file-contents "~/.signature"))))))
(uce-signature
(insert "\n\n-- \n" uce-signature)))
;; And text of the original message.
(if uce-uce-separator
(insert "\n\n" uce-uce-separator "\n"))
;; If message doesn't end with a newline, insert it.
(goto-char (point-max))
(or (bolp) (newline)))
;; And go back to the beginning of text.
(if to (goto-char to))
(or to (set-buffer-modified-p nil))
;; Run hooks before we leave buffer for editing. Reasonable usage
;; might be to set up special key bindings, replace standard
;; functions in mail-mode, etc.
(run-hooks 'mail-setup-hook 'uce-setup-hook)))
(unless uce--usage-warning-displayed
(setq uce--usage-warning-displayed t)
(pop-to-buffer (get-buffer-create "uce-reply-to-uce warning"))
(insert "\
-- !!! NOTE !!! ---------------------------------------------
Replying to spam is at best pointless, but most likely actively
harmful.
- You will confirm that your email address is valid, thus ensuring
you get more spam.
- You will leak information and open yourself up for further
attack. For example, they could use your \"geolocation\" to find
your home address and phone number.
- The sender address is likely fake.
- You help them refine their methods of spamming.
Therefore, we strongly recommend that you do not use this package.
Use a spam filter instead, or just delete the spam.
-------------------------------------------------------------
")))