[rt-users] Running Cron jobs
Oluwatomisin Ilori
tomisilori at yahoo.co.uk
Sun Jan 16 14:30:25 EST 2005
I'm running rt 3.0.11 on linux, with perl 5.8.3, mySQL and apache with mod_perl. There is nothing new in the rt.log file.
I am running rt-crontool with the following parameters.
30 * * * * /opt/rt3/bin/rt-crontool --search RT::Search::ActiveTicketsInQueue --search-arg VSATFaults --condition RT::Condition::UntouchedInHours --condition-arg 2 --action RT::Action::SystemNotify --action-arg Owner,AdminCc --template-id 20
I got the SytemNotify and LightWeightSendEmail.pm module from the mailing list and I have copied it to RT/Action directory. However, I don't get any mails sent to the owner and AdminCC of the VSATFaults queue after creating a ticket in the queue and making sure it was untouched for 2hours. Please, what am I doing wrong? Is there a module I'm missing out.
PLEASE, can someone help out. Thanks.
The SystemNotify.pm module I'm using is:
RT::Action::SystemNotify>
package RT::Action::SystemNotify;
require RT::Action::LightWeightSendMail;
@ISA = qw(RT::Action::LightWeightSendMail);
# {{{ sub SetRecipients
=head2 SetRecipients
Sets the recipients of this meesage to Owner, Requestor, AdminCc, Cc or All.
Explicitly B<does not> notify the creator of the transaction.
=cut
sub SetRecipients {
my $self = shift;
my $arg = $self->Argument;
$arg =~ s/\bAll\b/Owner,Requestor,AdminCc,Cc/;
my ( @To, @PseudoTo, @Cc, @Bcc );
if ( $arg =~ /\bRequestor\b/ ) {
push ( @To, $self->TicketObj->Requestors->MemberEmailAddresses );
}
if ( $arg =~ /\bCc\b/ ) {
#If we have a To, make the Ccs, Ccs, otherwise, promote them to To
if (@To) {
push ( @Cc, $self->TicketObj->Cc->MemberEmailAddresses );
push ( @Cc, $self->TicketObj->QueueObj->Cc->MemberEmailAddresses );
}
else {
push ( @Cc, $self->TicketObj->Cc->MemberEmailAddresses );
push ( @To, $self->TicketObj->QueueObj->Cc->MemberEmailAddresses );
}
}
if ( ( $arg =~ /\bOwner\b/ )
&& ( $self->TicketObj->OwnerObj->id != $RT::Nobody->id ) )
{
# If we're not sending to Ccs or requestors,
# then the Owner can be the To.
if (@To) {
push ( @Bcc, $self->TicketObj->OwnerObj->EmailAddress );
}
else {
push ( @To, $self->TicketObj->OwnerObj->EmailAddress );
}
}
if ( $arg =~ /\bAdminCc\b/ ) {
push ( @Bcc, $self->TicketObj->AdminCc->MemberEmailAddresses );
push ( @Bcc, $self->TicketObj->QueueObj->AdminCc->MemberEmailAddresses );
}
if ($RT::UseFriendlyToLine) {
unless (@To) {
push ( @PseudoTo,
"'$arg of $RT::rtname Ticket #"
. $self->TicketObj->id . "':;" );
}
}
#Strip the sender out of the To, Cc and AdminCc and set the
# recipients fields used to build the message by the superclass.
$RT::Logger->debug("$self: To is ".join(",", at To));
$RT::Logger->debug("$self: Cc is ".join(",", at Cc));
$RT::Logger->debug("$self: Bcc is ".join(",", at Bcc));
@{ $self->{'To'} } = @To;
@{ $self->{'Cc'} } = @Cc;
@{ $self->{'Bcc'} } = @Bcc;
@{ $self->{'PseudoTo'} } = @PseudoTo;
return (1);
}
# }}}
1;
</RT::Action::SystemNotify>
and the LightWeightSendEmail module is:
<RT::Action::LightWeightSendEmail>
package RT::Action::LightWeightSendMail;
require RT::Action::SendEmail;
@ISA = qw(RT::Action::SendEmail);
=head1 NAME
RT::Action::LightWeightSendmail - An action which users can use to
send mail out of RT (ex., in rt-crontool) without a RT::Transaction
object. It can be subclassed for more specialized mail sending
behavior.
You can pass it with an RT::Template object, but you can not use
$Transaction in it because it's alwasy undef.
=cut
# {{{ sub Describe
sub Describe {
my $self = shift;
return (ref $self . " will send an email to ticket's owner.\n");
}
# }}}
# {{{ sub Prepare
sub Prepare {
my $self = shift;
# This actually populates the MIME::Entity fields in the Template Object
unless ($self->TemplateObj) {
$RT::Logger->warning("No template object handed to $self\n");
}
unless ($self->TicketObj) {
$RT::Logger->warning("No ticket object handed to $self\n");
}
$self->TemplateObj->Parse(Argument => $self->Argument,
TicketObj => $self->TicketObj);
# Header
$self->SetSubject();
$self->SetSubjectToken();
$self->SetRecipients();
$self->SetReturnAddress();
$self->SetRTSpecialHeaders();
return 1;
}
# }}}
# {{{ sub Commit
#Do what we need to do and send it out.
sub Commit {
my $self = shift;
# Go add all the Tos, Ccs and Bccs that we need to to the message to
# make it happy, but only if we actually have values in those arrays.
$self->SetHeader('To', join(',', @{$self->{'To'}}))
if (@{$self->{'To'}});
$self->SetHeader('Cc', join(',' , @{$self->{'Cc'}}))
if (@{$self->{'Cc'}});
$self->SetHeader('Bcc', join(',', @{$self->{'Bcc'}}))
if (@{$self->{'Bcc'}});;
my $MIMEObj = $self->TemplateObj->MIMEObj;
$MIMEObj->make_singlepart;
#If we don't have any recipients to send to, don't send a message;
unless ($MIMEObj->head->get('To') ||
$MIMEObj->head->get('Cc') ||
$MIMEObj->head->get('Bcc') ) {
$RT::Logger->debug("$self: No recipients found. Not sending.\n");
return(1);
}
# PseudoTo (fake to headers) shouldn't get matched for message recipients.
# If we don't have any 'To' header, drop in the pseudo-to header.
$self->SetHeader('To', join(',', @{$self->{'PseudoTo'}}))
if ( (@{$self->{'PseudoTo'}}) and (! $MIMEObj->head->get('To')));
if ($RT::MailCommand eq 'sendmailpipe') {
open (MAIL, "|$RT::SendmailPath $RT::SendmailArguments") || return(0);
print MAIL $MIMEObj->as_string;
close(MAIL);
}
else {
unless ($MIMEObj->send($RT::MailCommand, $RT::MailParams)) {
$RT::Logger->crit("$self: Could not send mail for ".$self->TransactionObj."\n");
return(0);
}
}
return (1);
}
# }}}
# {{{ Deal with message headers (Set* subs, designed for easy overriding)
# {{{ sub SetRTSpecialHeaders
# This routine adds all the random headers that RT wants in a mail message
# that don't matter much to anybody else.
sub SetRTSpecialHeaders {
my $self = shift;
$self->SetReferences();
$self->SetPrecedence();
$self->SetHeader('X-RT-Loop-Prevention', $RT::rtname);
$self->SetHeader('RT-Ticket', $RT::rtname. " #".$self->TicketObj->id());
$self->SetHeader
('Managed-by',"Request Tracker $RT::VERSION (http://www.fsck.com/projects/rt/)");
return();
}
# }}}
# {{{ sub SetReturnAddress
sub SetReturnAddress {
my $self = shift;
my %args = ( is_comment => 0,
@_ );
# From and Reply-To
# $args{is_comment} should be set if the comment address is to be used.
my $replyto;
if ($args{'is_comment'}) {
$replyto = $self->TicketObj->QueueObj->CommentAddress ||
$RT::CommentAddress;
}
else {
$replyto = $self->TicketObj->QueueObj->CorrespondAddress ||
$RT::CorrespondAddress;
}
unless ($self->TemplateObj->MIMEObj->head->get('Reply-To')) {
$self->SetHeader('Reply-To', "$replyto");
}
}
# }}}
# {{{ sub SetSubject
sub SetSubject {
my $self = shift;
my $subject = $self->{'Subject'} || "An email from RT";
$self->SetHeader('Subject', $subject);
return $subject;
}
# }}}
1;
</RT::Action::LightWeightSendEmail>
---------------------------------
ALL-NEW Yahoo! Messenger - all new features - even more fun!
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.bestpractical.com/pipermail/rt-users/attachments/20050116/59aa45de/attachment.htm>
More information about the rt-users
mailing list