[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