This code was entered in a template not a script. I was trying Kevin’s suggestion with doing it all in one go. I figure that if I can capture the CustomField in the template code and test on that value to return my $to_address, then I am pretty much set to create my outgoing e-mail at the same time.
Kurt Engle
Network Engineer
Eugene 4J SchoolsFrom: “Kenneth Crocker” kfcrocker@lbl.gov
To: rt-users@lists.bestpractical.com
Sent: Monday, December 13, 2010 12:12:50 PM
Subject: Re: [rt-users] notification
Kurt,
Not sure why you start the scrip with a “{” and end with one. Just start with the “my $trans=”.
Your code should be in the “Prep Action” and you should add this at the end of the code you’ve got:
else {
$to_address= “rubble”;
after the above line, the code should look like this:
copy value of “To_Address” to Custom Field “Whatever you named it”
my $cf_name = “Whatever it is”;
$cf_obj->LoadByName( Name => $cf_name );
$RT::Logger->debug( “Loaded $cf_obj->Name = “. $cf_obj->Name() .”\n” );
$ticket->AddCustomFieldValue(Field=>$cf_obj, Value=>$to_address, RecordTransaction=>0);
return 1;
Then make sure the “Cleanup Action” ends with a “return 1;” or the scrip doesn’t finish.
Also, not sure why you start the scrip with a “{” and end with one. Just start with the “my $trans=”.
The Template should refer to the value in the CF you created for the “To Address”, like this:
To: {$Ticket->FirstCustomFieldValue(‘To Address Value’)}@ 4j.lane.edu
Subject: Request Titled: “{$Ticket->Subject}” is ready to Migrate or whatever
That should do it.
Kenn
LBNL
So here is the code that I am working with inside my template:
Script:
Condition: On Create
Action: Notify Other Recipients
Template: My Notify
Stage: TransactionBatch
‘My Notify’ code
{
my $trans = $self->TransactionObj;
my $ticket = $self->TicketObj;
my $cf = new RT::CustomField($RT::SystemUser);
$cf->LoadByName(Queue => $ticket->QueueObj->id,Name => “Building”);
return 0 unless $cf->id;
my $cfvalue = $ticket->FirstCustomFieldValue(‘Building’);
my $to_address = “”;
if ($cfvalue =~ /Sheldon/) {
$to_address = “sheldonhd”;
}
elsif ($cfvalue =~ /North/) {
$to_address = “northhd”;
}
elsif ($cfvalue =~ /South/) {
$to_address = “southhd”;
}
elsif ($cfvalue =~ /Churchill/) {
$to_address = “churchillhd”;
}
elsif ($cfvalue =~ /Kennedy/) {
$to_address = “kennedyhd”;
}
elsif ($cfvalue =~ /Kelly/) {
$to_address = “kellyhd”;
}
elsif ($cfvalue =~ /Computer/) {
$to_address = “engle”;
else {
$to_address= “rubble”;
}
return 1;
}
To: {$ to_address}@4j.lane.edu "}
Subject: New Ticket #{ $Ticket->Id() } has been created
Time to go to work
In my debug log, I am not even seeing the script being called that contains this template. If I strip everything above the ‘To:’ field, the scrip and template gets called but the e-mail is not sent even when I hard code the e-mail address.
Kurt Engle
From: “Kevin Falcone” < falcone@bestpractical.com >
To: rt-users@lists.bestpractical.com
Sent: Friday, December 10, 2010 12:23:28 PM
Subject: Re: [rt-users] notification
Kevin,
The template would look like this:
Kenn
I’m perfectly able to write the scrip and template in question, but
since Kurt has a half-working template I was curious what he was
doing. Involving a CustomField seems like a bit of overkill.
-kevin
To: {$Ticket->FirstCustomFieldValue(‘ToOverride’)}@[1] lbl.gov
Subject: Request Titled: “{$Ticket->Subject}” is ready to Migrate!
A scrip based on whatever condition would do this:
my $trans = $self->TransactionObj;
my $ticket = $self->TicketObj;
my $cf_obj = new RT::CustomField($RT::SystemUser);
my $cf_name = “ToOverride”;
if condition is “A”
$my $cf_value = “the To address you want for “A” condition”;
elsif condition is “B”
$my $cf_value = “the To address you want for “B” condition”;
and on and on till you’re thru.
then, set the Custom Field as the last piece of action code:
$cf_obj->LoadByName(Name=>$cf_name);
$RT::Logger->debug(“Loaded$cf_obj->Name = “. $cf_obj->Name() .”\n” );
$ticket->AddCustomFieldValue( Field=>$cf_obj, Value=>$cf_value, RecordTransaction=>0 );
return 1;
Then write a notification scrip to use the new template based on your conditions.
Use “TransactioBatch” for both scrips.
Hope this helps.
Kenn
LBNL
Actually found a nice example of creating a template to send out an e-mail. RTFM…
However, I am having a bit of a problem constructing the To: field. Basically, I have a
varialble ‘$toAddress’ that is set to an e-mail address by some prior code.
Where in the code is it set. It would really need to be in that
template
Here is my template code to construct the To: field:
To: { $toAddress }
Subject: Ticket #{ $Ticket->Id()} {$Ticket->Subject()}
A new ticket has been created for you in the HelpDesk Queue.
{ $RT::WebURL } Ticket/Display.html?id={ $Ticket->Id() }
However, I keep getting ‘recipient not found’.
In debug logging mode, RT will actually dump copies of the email being
processed into the logs, which would show you the To:
Please note that if To: is your email address and you’re the actor on
this ticket while testing, you may have told RT not to send you email
in that case using $NotifyActor
-kevin
From: “Kevin Falcone” <[3] falcone@bestpractical.com >
To: [4] rt-users@lists.bestpractical.com
Sent: Friday, December 10, 2010 10:03:04 AM
Subject: Re: [rt-users] notification
That is correct. But how do I make use of the RT::Action::SendEmail module to send the
notification incorporating my To: field. Or is there a better way to send out a custom
notification?
You use one of the standard Notify actions and a custom template. You
don’t write any code in the action and you don’t call the action
directly.
-kevin
From: “Kevin Falcone” <[5] falcone@bestpractical.com >
To: [6] rt-users@lists.bestpractical.com
Sent: Friday, December 10, 2010 8:59:25 AM
Subject: Re: [rt-users] notification
I am looking for a way to send an email from RT to a specified e-mail address that
is not
an
account in RT or associated with the ticket as a requestor, watcher, CC:,
BCC:…etc…
I have the logic down to specify the e-mail address and have some nasty perl code to
actually
send the e-mail. But, it seems that RT has some internal module(s) that handle what
the
nasty
perl code is doing.
I can see the RT::Action:SendEmail module, but how do I incorporate that into a
script
that
allows me to do what I am looking to do?
Sounds like you actually just want to use a normal Notify action, but
have the template contain your ugly logic that sets up the To: line
based on your perl code
-kevin
References
Visible links
- http://lbl.gov/
- mailto: falcone@bestpractical.com
- mailto: falcone@bestpractical.com
- mailto: rt-users@lists.bestpractical.com
- mailto: falcone@bestpractical.com
- mailto: rt-users@lists.bestpractical.com