I warn you now - this is more than you asked for.
On 2000.06.17, in <[EMAIL PROTECTED]>,
"Andrew Eichmann" <[EMAIL PROTECTED]> wrote:
> the subject line. For example, if the original message's Subject:
> line is ``[BOB] What's the frequency, Kenneth?''where ``[BOB]'' is
> the mailing list name that gets prepended to the subject, the replies
> ...
> Is there a built-in solution to this? Does anybody else have this
> problem? I imagine something stripping out all variations of ``Re:''
I have this problem, too -- it's one of the reasons I can't stand lists
that alter your postings' subject: lines.
My .procmailrc loads a file named "classaction". This file sets some
operational defaults, then loads a bunch of matching rules from another
file called "classes". It then alters messages as documented in
"classaction".
"classaction" and a stripped-down copy of "classes" are attached. In
reality, I process about 120 different lists and other categories of
like mail from this setup. It's fast, but that doesn't actually matter
since it's asynch with my mail-reading.
"$ ${XFROM}" is a procmail macro I use for matching sender addresses.
You can substitute the built-in "^FROM" (or whatever).
You'll note that this setup only marks messages by removing [LISTNAME]
stuff from the subject (if STRIPLAB is set in the list's config), and
adds the X-Label: header. I have mutt set up to do all its list
matching on "~y listname" instead of duplicating all the patterns, so
procmail and mutt are VERY intertwined here.
(X-Label: and "~y" are a 1.3.x thing. This makes it easy to move a
message from one category to another in Mutt's eyes. Once a message is
archived and delivered, it's all about Mutt, and I don't worry about
saving anything that has an X-Label: because I know it's already
archived.)
Anyway, maybe you don't want all that, but it shows how I'm using
procmail to match the expressions. :)
--
-D. [EMAIL PROTECTED] NSIT University of Chicago
###########################################################################
###
### Handle all mail classes properly, phase 1.
###
### These DEFAULTS hinge archival, labelling, and inbox display on whether
### ${CLASS} is defined. For these options, you need only define ${CLASS}
### to a shorthand for the mail class a message should belong to.
###
### Nullify the class name. If CLASS is undefined, mail will pass through
### the class-action package untouched and unarchived. (Auto-forwarding
### will still occur, though.) ${CLASS} implies a few things:
### 1. Name of the archival folder
### 2. Name for class labelling (X-Label header field or Subject: rewrite)
### If ${CLASS} is literally "null", mail in a given class will be killed off
### after matching.
CLASS=
### If ${CLASS} is set to someting besides "null", and ${ARCHIVE} is set,
### messages will be archived. If ${ARCHIVE} is "yes", the archival folder's
### name will be copied from ${CLASS}. If ${ARCHIVE} is anything else, mail
### will be archived to that folder name.
###
### The archived copy will be unadulterated.
ARCHIVE=yes
### If ${CLASS} is set to someting besides "null", and ${LABEL} is set,
### messages will have an "X-Label:" header field inserted. If ${LABEL}
### is "yes", the X-Label will be set to ${CLASS}. If ${LABEL} is set
### to any other value, the X-Label will be set to that value.
LABEL=yes
### If ${HARDLABEL} is "yes", rewrite
### Subject: Re: foo
### as
### Subject: [$LABEL] Re: foo
### instead of inserting an X-Label: header.
HARDLABEL=no
### If ${STRIPLAB} is set to "yes", remove anything enclosed in square
### brackets from the beginning, or following a leading "Re: ", of the
### Subject: header. If ${STRIPLAB} is set to anything else, remove
### only such tags if they match ${STRIPLAB}. This is for removing
### the tags generated by some mailing-list managers so that we can
### prefer X-Label:s.
STRIPLAB=
### If ${HIDE} is set to "yes", the class-action package will not
### store messages in a class to the default folder (inbox). If ${HIDE}
### is unset, or set to anything besides "yes" , messages will be stored
### to the default folder IN ADDITION to any archival. The copy in the
### default folder will be marked with "Status: O".
HIDE=no
###########################################################################
### Try to match mail to a list or class. Multiple matches are multiply
### acted upon.
INCLUDERC=$PMDIR/classes
### If CLASS was set to "null", just ditch it and end
:0
* CLASS ?? null
/dev/null
### If CLASS was set and ARCHIVE is set, prepare to archive
:0
* CLASS ?? .+
{
## Check the cache for this dropbox; drop if a repeat.
## Rewriting the value of IDCACHE here allows each list to
## maintain internal uniqueness, but doesn't prevent duplicate
## refiles of messages aimed at two or more separate lists.
IDCACHE=lists/`dirname $CLASS`/.`basename $CLASS`.idcache
INCLUDERC=$PMDIR/idcheck
## Archive, with lock
:0 c:
lists/${CLASS}
## If hidden, bail out.
:0
* HIDE ?? yes
/dev/null
## Mark "Old" to indicate archival, if no status was already set.
:0 f
| ${FORMAIL} -a "Status: O"
## If STRIPLAB is set and is not "yes", wipe out "[$STRIPLAB]"
## in the Subject:.
## If STRIPLAB is "yes", wipe out any "[.+]" in the Subject:.
:0
* STRIPLAB ?? .+
{
RE=""
:0
* SUBJECT ?? ^ *\/[rR][eE]:
{ RE="${MATCH} " }
:0 E
* STRIPLAB ?? yes
* SUBJECT ?? ^ *\[[^]]+\] *\/[^ ].*
{ NEW_SUBJECT="${RE}${MATCH}" }
:0
* STRIPLAB ?? yes
* SUBJECT ?? ^ *[rR][eE]: *\[[^]]+\] *\/[^ ].*
{ NEW_SUBJECT="${RE}${MATCH}" }
:0 E
* $ SUBJECT ?? ^ *\[${STRIPLAB}\] *[rR][eE]: *\[${STRIPLAB}\] *\/[^ ].*
{ NEW_SUBJECT="${RE}${MATCH}" }
:0 E
* $ SUBJECT ?? ^ *\[${STRIPLAB}\] *\/[^ ].*
{ NEW_SUBJECT="${RE}${MATCH}" }
:0 E
* $ SUBJECT ?? ^ *[rR][eE]: *\[${STRIPLAB}\] *\/[^ ].*
{ NEW_SUBJECT="${RE}${MATCH}" }
}
## Determine the value of the label.
:0
* LABEL ?? yes
{ NEW_LABEL="${CLASS}" }
:0 E
* LABEL ?? .+
{ NEW_LABEL="${LABEL}" }
## If ${HARDLABEL} is "yes", rewrite the Subject: line.
:0
* HARDLABEL ?? yes
{
:0 f
* NEW_LABEL ?? .
* NEW_SUBJECT ?? .
| ${FORMAIL} -i "Subject: [${NEW_LABEL}] ${NEW_SUBJECT}"
:0 Ef
* NEW_LABEL ?? .
| ${FORMAIL} -i "Subject: [${NEW_LABEL}] ${SUBJECT}"
:0 Ef
* NEW_SUBJECT ?? .
| ${FORMAIL} -i "Subject: ${NEW_SUBJECT}"
}
## Else, no hardlabel
:0 E
{
:0 f
* NEW_LABEL ?? .
* NEW_SUBJECT ?? .
| ${FORMAIL} -i "Subject: ${NEW_SUBJECT}" -i "X-Label: ${NEW_LABEL}"
:0 Ef
* NEW_LABEL ?? .
| ${FORMAIL} -i "X-Label: ${NEW_LABEL}"
:0 Ef
* NEW_SUBJECT ?? .
| ${FORMAIL} -i "Subject: ${NEW_SUBJECT}"
}
}
# If hidden, toss it.
:0
* HIDE ?? yes
/dev/null
###############################################################################
###
### Mail class management
###
### $Id: classes,v 1.1 2000/05/10 17:11:08 dgc Exp dgc $
###
### Try to match a class, then set some parameters for handling it.
:0
{
###
### AIX security list
###
:0
* ^Subject: (Re: )?Security
* $ ${XFROM}aixserv@
{
CLASS=aix/security
}
###
### kerberos list - not enough time to read regularly
###
:0
* $ ${XADDR}(kerberos|usenet-incoming-kerberos)@
{
CLASS=kerb
HIDE=yes
}
###
### SSH list
###
:0
* $(${XFROM}(ssh-owner|owner-ssh)[-@])|(${XTO}[^a-z]ssh@)
{
CLASS=ssh
HIDE=yes
}
###
### axp-list: yada yada
###
#* ^Resent-From: [EMAIL PROTECTED]
:0
* $ ${XFROM}axp-list.*@redhat.com
{
CLASS=axp
HIDE=yes
}
###
### All other linux lists: sort and dump unread
###
:0
* $ ${XADDR}linux-\/[^@]@vger.rutgers.edu
{
CLASS=lx-$MATCH
ARCHIVE=linux/linux-$MATCH
}
###
### Postmaster
###
:0
* $ ${XADDR}postmaster@
* $ ${XADDR}[EMAIL PROTECTED]
{
CLASS=postmaster
}
###
### Network security
###
:0
* $ ${XADDR}(netsec|(network-)?security)@
{
CLASS=netsec
}
###
### crypto-gram
###
:0
* $ ${XADDR}crypto-gram.*@chaparraltree.com
{
CLASS=cryptogram
}
###
### abuse
###
:0
* $ ${XADDR}abuse@(.*.)?uchicago.edu
{
CLASS=abuse
}
###
### Mutt announcements
###
:0
* $ ${XADDR}.*mutt-announce[-@]
{
CLASS=mutt-an
STRIPLAB=Announce
}
###
### Mutt users
###
:0
* $ ${XADDR}.*mutt-users[-@]
{
CLASS=mutt-usr
}
###
### Mutt developers
###
:0
* $ ${XADDR}.*mutt-dev[-@]
{
CLASS=mutt-dev
}
###
### Mailman users
###
:0
* $ ${XADDR}.*mailman-users[-@]
{
CLASS=mm-users
STRIPLAB=Mailman-Users
}
###
### Mailman announce
###
:0
* $ ${XADDR}.*mailman-announce[-@]
{
CLASS=mm-announce
STRIPLAB=Mailman-Announce
}
}