[rt-users] Remove RT signature from subject line
Gene LeDuc
gleduc at mail.sdsu.edu
Mon Aug 20 16:23:23 EDT 2007
Hi All,
I solved my own problem and thought it might be useful to someone else.
I needed to be able to forward certain mail to an address so that it didn't
look like it came from RT, so I needed to remove the ticket info from the
subject line. After poking around in the code I figured out that this
requires customization to the SetSubjectToken method in SendEmail.pm (I
chose to create SendEmail_Local.pm to do this). I didn't want to make
changes that were likely to affect other modules, so I chose to stick a
character sequence at the front of the subject line to signal special
handling. If the flag is not found, the subject line is handled normally
(RT sticks ticket info on the front of the subject). If the flag is found,
the ticket info is not put on the front of the subject line. An optional
second flag if brackets immediately following the first will be put on the
front of the subject line instead (like Fwd: ). For my signal I chose a
sequence of characters that are unlikely to appear at the front of a normal
subject line, like "[__><##]". The code for my SendEmail_Local.pm is at
the end of this message. Remember to restart apache after creating the
_Local file.
Assumptions for the following template examples:
Ticket Id is 1234
Ticket subject is "How can I change my password?"
Special $no_rt_flag is "[__><##]"
Example 1.
Send an e-mail with the original subject line only, no ticket info:
my $Subject = $Ticket->Transactions->First->Subject();
$Subject = $no_rt_flag . $Subject; # signal to leave off the ticket id
Subject line will be "How can I change my password?"
Example 2.
Send an e-mail with the normal RT-modified subject line:
my $Subject = $Ticket->Transactions->First->Subject();
Subject line will be "[RT #1234] How can I change my password?"
Example 3.
Send an e-mail that looks like a "forwarded" e-mail:
my $Subject = $Ticket->Transactions->First->Subject();
$Subject = $no_rt_flag . "[Fwd: ]" . $Subject; # signal to leave off
ticket id and replace with something else
Subject line will be "Fwd: How can I change my password?"
Example 4.
Send an urgent e-mail to admin alert address:
my $ToAddress = 'admin_alert at mycompany.com';
my $Subject = $Ticket->Transactions->First->Subject();
$Subject = $no_rt_flag . "[Urgent: ]" . $Subject; # signal to leave
off ticket id and replace with something else
Subject line will be "Urgent: How can I change my password?"
This isn't a terribly sophisticated hack and I'm sure it can be
improved. For instance, as coded, you probably can't embed brackets in the
special tag to get a subject like "[Yowza!] How can..." It suffices for
me, but feel free to fix it up if you want.
Enjoy!
Gene
====== Begin SendEmail_Local.pm =====
use strict;
no warnings qw(redefine);
sub SetSubjectToken {
my $self = shift;
my $tag = "[$RT::rtname #" . $self->TicketObj->id . "] ";
my $sub = $self->TemplateObj->MIMEObj->head->get('Subject');
my $no_rt_flag = "[__><##_]";
unless ( $sub =~ /\Q$tag\E/ ) {
$sub =~ s/(\r\n|\n|\s)/ /gi;
chomp $sub;
if ( $sub =~ /^\Q$no_rt_flag\E/ ) {
$sub =~ s/(\Q$no_rt_flag\E)//;
if ( $sub =~ /^\[.*\]/ ) {
($tag) = $sub =~ /^\[(.*)\]/;
$sub =~ s/^(\[.*\])//;
} else {
$tag = '';
}
}
$self->TemplateObj->MIMEObj->head->replace( 'Subject', "$tag$sub" );
}
}
1;
======= End SendEmail_Local.pm =====
--
Gene LeDuc, GSEC
Security Analyst
San Diego State University
More information about the rt-users
mailing list