On August 10, 2002 at 19:23, Alan Burlison wrote:
I'm trying to munge the subject and body of a message using the
CBMessageBodyRead callback, to convert bugids into hrefs. The callback
looks like this:
sub msg_body_read
{
my ($fields, $html, $files) = @_;
# Convert any bugids in the subject to links.
$fields->{'x-mha-subject'} =~ s/\b([134]\d{6})\b/bugid($1)/ge;
# Convert any bugids in thebody to links.
$$html =~ s/\b([134]\d{6})\b/bugid($1)/ge;
}
This works fine for the body of the message - bugids are nicely converted
into URLs, but in the case of the subject, although x-mha-subject is
modified OK, it doesn't appear to be the subject that is _actually_ printed
out in the mail header, as the resulting html is missing the link. How do I
munge the *real* subject line?
The "x-mha-..." fields are only copies of what MHonArc stores.
So changing the value has no permanent effect (should it?).
To get what you want you will need to use the
$mhonarc::CBMessageHeadRead callback since the message header is
"htmlized" right afterwords.
What you will need to do is the following:
* In CBMessageHeadRead:
Change $fields->{'subject'} directly. Remember, that the values
of the $fields hash are array references (excluding the special
x-mha-... values). Something like the following should do:
$fields->{'subject'}[0] =~ s/\b([134]\d{6})\b/bugid($1)/ge;
To be cleaner, you may want to check that $fields->{'subject'} is
defined in case a message comes in without a Subject.
The x-mha- fields are not used when converting the message
header to HTML, so you have to modify $fields directly.
The x-mha- fields represent what MHonArc will store and use
for other things.
* In CBMessageBodyRead:
Now this part is ugly, which gives a good reason that modifying
$fields->{'x-mha-subject'} in CBMessageHeadRead should changes the
Subject used by MHonArc. You will need to modifying an "internal"
hash so your modified subject will be used for index page listing:
$mhonarc::Subject{$fields->{'x-mha-index'}} =~
s/\b([134]\d{6})\b/bugid($1)/ge;
I wonder if having a CBRawMessageHeadRead may be worth adding.
The callback would be called after a message header is parsed, but
before MHonArc extracts in data from it. Of course, you would not
have the x-mha-... fields defined at this stage since it would
be before MHonArc processes the header.
--ewh
---------------------------------------------------------------------
To sign-off this list, send email to majordomo(_at_)mhonarc(_dot_)org with the
message text UNSUBSCRIBE MHONARC-USERS