<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://rt-wiki.bestpractical.com/index.php?action=history&amp;feed=atom&amp;title=RtUnifiedreminder</id>
	<title>RtUnifiedreminder - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://rt-wiki.bestpractical.com/index.php?action=history&amp;feed=atom&amp;title=RtUnifiedreminder"/>
	<link rel="alternate" type="text/html" href="https://rt-wiki.bestpractical.com/index.php?title=RtUnifiedreminder&amp;action=history"/>
	<updated>2026-08-22T22:57:37Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.41.1</generator>
	<entry>
		<id>https://rt-wiki.bestpractical.com/index.php?title=RtUnifiedreminder&amp;diff=3298&amp;oldid=prev</id>
		<title>Admin: 2 revisions imported</title>
		<link rel="alternate" type="text/html" href="https://rt-wiki.bestpractical.com/index.php?title=RtUnifiedreminder&amp;diff=3298&amp;oldid=prev"/>
		<updated>2016-04-06T20:36:21Z</updated>

		<summary type="html">&lt;p&gt;2 revisions imported&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt; &amp;lt;nowiki&amp;gt;#!/usr/bin/perl -w&lt;br /&gt;
 &lt;br /&gt;
 # RT3 reminder script&lt;br /&gt;
 # One big reminder report about ALL tickets that are getting to be too long since LastUpdated&lt;br /&gt;
 # Sends multipart HTML + plaintext email, so HTML capable mail readers can click links&lt;br /&gt;
 # Many pieces cannibalized from the other reminder scripts in the wiki.&lt;br /&gt;
 &lt;br /&gt;
 # You will run this script from cron as a user with perms to read the RT_SiteConfig.pm config file&lt;br /&gt;
 # Crontab would look like this to run twice a day, at 10:15am and 3:15pm&lt;br /&gt;
 ## send unified remind email twice per day&lt;br /&gt;
 #15 10 * * * /home/crystalfontz/scripts/rt-unifiedreminders&lt;br /&gt;
 #15 15 * * * /home/crystalfontz/scripts/rt-unifiedreminders&lt;br /&gt;
 &lt;br /&gt;
 ### Configuration&lt;br /&gt;
 &lt;br /&gt;
 # Location of RT3&amp;#039;s libs -- Change this to where yours are&lt;br /&gt;
 use lib (&amp;quot;/usr/share/request-tracker3.8/lib&amp;quot;, &amp;quot;/usr/local/share/request-tracker3.8/lib&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
 # list of email addresses who will receive this report&lt;br /&gt;
 my(@sendto) = qw[you@yours.com someone@somewhere.com];&lt;br /&gt;
 &lt;br /&gt;
 # Address emails should originate from&lt;br /&gt;
 my($from) = &amp;#039;RT Reminder &amp;amp;lt;your@returnaddress.com&amp;amp;gt;&amp;#039;;&lt;br /&gt;
 &lt;br /&gt;
 # maximum number of seconds since LastUpdated, beyond which the ticket will be reported&lt;br /&gt;
 my %max_untouched_ages = (&amp;quot;new&amp;quot;     =&amp;amp;gt; 60 * 60 * 21,       # 21 hrs before warn about new&lt;br /&gt;
                           &amp;quot;open&amp;quot;    =&amp;amp;gt; 60 * 60 * 45,       # 45 hrs before warn about open&lt;br /&gt;
                           &amp;quot;stalled&amp;quot; =&amp;amp;gt; 60 * 60 * 24 * 10,  # 10 days before warn about stalled&lt;br /&gt;
                          );&lt;br /&gt;
 &lt;br /&gt;
 my $tickets_per_status = 15; # how many tickets should be included for each status. bigger number = longer email&lt;br /&gt;
 &lt;br /&gt;
 my $timezone_offset = 7; # how many hours difference is your timezone from GMT? US-Pacific = 7&lt;br /&gt;
 &lt;br /&gt;
 # Queues to operate on. Default is all&lt;br /&gt;
 # my @goodqueues = qw[ThisQueue ThatQueue]; # to look only in specific queues, uncomment this line and comment the next one&lt;br /&gt;
 my @goodqueues = (); # leave like this to look in all queues&lt;br /&gt;
 &lt;br /&gt;
 # Queues to skip. Default is none. Use either @goodqueues or @badqueues, not both.&lt;br /&gt;
 my @badqueues = (); # If you have no queues to exclude, uncomment this line and comment the next one&lt;br /&gt;
 #my @badqueues = qw[Ignoreme IgnoreAnother]; # To exclude certain queues, list them here and comment line above&lt;br /&gt;
 &lt;br /&gt;
 my($debug) = 0; # nonzero will print plaintext report to STOUT instead of emailing it&lt;br /&gt;
 &lt;br /&gt;
 # The length at which lines for plaintext mail will be truncated. 78, or thereabouts looks&lt;br /&gt;
 # best for most people. Setting to 0 will stop lines being truncated.&lt;br /&gt;
 my($linelen) = 78; # has no effect on HTML mail&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 ### Code&lt;br /&gt;
 &lt;br /&gt;
 use strict;&lt;br /&gt;
 use Carp;&lt;br /&gt;
 use MIME::Lite;&lt;br /&gt;
 use URI::Escape;&lt;br /&gt;
 &lt;br /&gt;
 my $msg = MIME::Lite-&amp;amp;gt;new(From    =&amp;amp;gt; $from,&lt;br /&gt;
                           To      =&amp;amp;gt;  join(&amp;#039;,&amp;#039;, @sendto),&lt;br /&gt;
                           Subject =&amp;amp;gt; &amp;#039;Outstanding Tickets Report&amp;#039;,&lt;br /&gt;
                           Type    =&amp;amp;gt; &amp;#039;multipart/alternative&amp;#039;);&lt;br /&gt;
 &lt;br /&gt;
 # Pull in the RT stuff&lt;br /&gt;
 package RT;&lt;br /&gt;
 use RT::Interface::CLI qw(CleanEnv GetCurrentUser GetMessageContent loc);&lt;br /&gt;
 &lt;br /&gt;
 CleanEnv();       # Clean our the environment&lt;br /&gt;
 RT::LoadConfig(); # Load the RT configuration&lt;br /&gt;
 RT::Init();       # Initialise RT&lt;br /&gt;
 &lt;br /&gt;
 use RT::Date;&lt;br /&gt;
 use RT::Queue;&lt;br /&gt;
 use RT::Queues;&lt;br /&gt;
 use RT::Tickets;&lt;br /&gt;
 &lt;br /&gt;
 my $max_age = 0;&lt;br /&gt;
 my $plainbody = &amp;quot;&amp;quot;;&lt;br /&gt;
 my $htmlbody = &amp;quot;&amp;amp;lt;body&amp;amp;gt;&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
 my $user = new RT::User($RT::SystemUser); # Define an RT User variable&lt;br /&gt;
 my $tickets = new RT::Tickets($RT::SystemUser); # Used to store Ticket search results&lt;br /&gt;
 my $date = new RT::Date($RT::SystemUser); # Define a date variable (used for comparisions)&lt;br /&gt;
 my $now = new RT::Date($RT::SystemUser); # get current time&lt;br /&gt;
 $now-&amp;amp;gt;SetToNow();&lt;br /&gt;
 &lt;br /&gt;
 # Limit the ticket search to new and open only.&lt;br /&gt;
 $tickets-&amp;amp;gt;LimitStatus(VALUE =&amp;amp;gt; &amp;#039;new&amp;#039;);&lt;br /&gt;
 $tickets-&amp;amp;gt;LimitStatus(VALUE =&amp;amp;gt; &amp;#039;open&amp;#039;);&lt;br /&gt;
 $tickets-&amp;amp;gt;LimitStatus(VALUE =&amp;amp;gt; &amp;#039;stalled&amp;#039;);&lt;br /&gt;
 &lt;br /&gt;
 my $searchqueue = &amp;#039;&amp;#039;;&lt;br /&gt;
 &lt;br /&gt;
 if($#goodqueues != -1)&lt;br /&gt;
 {&lt;br /&gt;
     $tickets-&amp;amp;gt;_OpenParen();&lt;br /&gt;
     foreach my $queue (@goodqueues)&lt;br /&gt;
     {&lt;br /&gt;
         $tickets-&amp;amp;gt;LimitQueue(VALUE =&amp;amp;gt; $queue, OPERATOR =&amp;amp;gt; &amp;#039;=&amp;#039;);&lt;br /&gt;
     }&lt;br /&gt;
     $tickets-&amp;amp;gt;_CloseParen();&lt;br /&gt;
     $searchqueue = &amp;quot; AND (Queue = &amp;#039;&amp;quot;. join(&amp;quot;&amp;#039; OR Queue = &amp;#039;&amp;quot;, @goodqueues) .&amp;quot;&amp;#039;)&amp;quot;;&lt;br /&gt;
 }&lt;br /&gt;
 elsif($#badqueues != -1)&lt;br /&gt;
 {&lt;br /&gt;
     foreach my $queue (@badqueues)&lt;br /&gt;
     {&lt;br /&gt;
         $tickets-&amp;amp;gt;LimitQueue(VALUE =&amp;amp;gt; $queue, OPERATOR =&amp;amp;gt; &amp;#039;!=&amp;#039;);&lt;br /&gt;
     }&lt;br /&gt;
     $searchqueue = &amp;quot; AND Queue != &amp;#039;&amp;quot;. join(&amp;quot;&amp;#039; AND Queue != &amp;#039;&amp;quot;, @badqueues) .&amp;quot;&amp;#039;&amp;quot;;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 $tickets-&amp;amp;gt;OrderByCols( {FIELD =&amp;amp;gt; &amp;#039;Status&amp;#039;, ORDER =&amp;amp;gt; &amp;#039;ASC&amp;#039;},&lt;br /&gt;
                        {FIELD =&amp;amp;gt; &amp;#039;queue&amp;#039;, ORDER =&amp;amp;gt; &amp;#039;ASC&amp;#039;},&lt;br /&gt;
                        {FIELD =&amp;amp;gt; &amp;#039;Priority&amp;#039;, ORDER =&amp;amp;gt; &amp;#039;DESC&amp;#039;},&lt;br /&gt;
                        {FIELD =&amp;amp;gt; &amp;#039;LastUpdated&amp;#039;, ORDER =&amp;amp;gt; &amp;#039;ASC&amp;#039;},&lt;br /&gt;
                       );&lt;br /&gt;
 &lt;br /&gt;
 # We might not want to print the message if there are no tickets&lt;br /&gt;
 my($printmsg) = 0;&lt;br /&gt;
 &lt;br /&gt;
 my $j = 0;&lt;br /&gt;
 my $bgcolor = &amp;#039;&amp;#039;;&lt;br /&gt;
 my $last_status = &amp;#039;&amp;#039;;&lt;br /&gt;
 my $status_title = &amp;#039;&amp;#039;;&lt;br /&gt;
 my $count_by_status = 0;&lt;br /&gt;
 my $searchURL = &amp;#039;&amp;#039;;&lt;br /&gt;
 &lt;br /&gt;
 # Loop through tickets&lt;br /&gt;
 while (my $Ticket = $tickets-&amp;amp;gt;Next)&lt;br /&gt;
 {&lt;br /&gt;
     # Compare Dates to see if LastUpdated date is old enough to report&lt;br /&gt;
     $max_age = $max_untouched_ages{$Ticket-&amp;amp;gt;Status} || 0;&lt;br /&gt;
 &lt;br /&gt;
     $date-&amp;amp;gt;Set(Format =&amp;amp;gt; &amp;quot;ISO&amp;quot;, Value =&amp;amp;gt; $Ticket-&amp;amp;gt;LastUpdated);&lt;br /&gt;
     if ($now-&amp;amp;gt;Unix - $date-&amp;amp;gt;Unix &amp;amp;lt; $max_age) { next; } # skip it if too young&lt;br /&gt;
 &lt;br /&gt;
     $j++;&lt;br /&gt;
     if($j % 2) { $bgcolor = &amp;quot;#e8e8e8&amp;quot;; }&lt;br /&gt;
     else { $bgcolor = &amp;quot;#fff&amp;quot;; }&lt;br /&gt;
 &lt;br /&gt;
     $user-&amp;amp;gt;Load($Ticket-&amp;amp;gt;Owner);&lt;br /&gt;
     if($printmsg == 0)&lt;br /&gt;
     {&lt;br /&gt;
         # Put heading on top&lt;br /&gt;
         $plainbody .= sprintf &amp;quot;%5s %-7s %3s %-13s %-7s %-6s %-30s\n&amp;quot;,&lt;br /&gt;
                               &amp;quot;Id&amp;quot;, &amp;quot;Status&amp;quot;, &amp;quot;Pri&amp;quot;, &amp;quot;Updated&amp;quot;, &amp;quot;Queue&amp;quot;, &amp;quot;Owner&amp;quot;, &amp;quot;Subject&amp;quot;;&lt;br /&gt;
         $htmlbody .= &amp;quot;&amp;amp;lt;table style=&amp;#039;width: 900px; white-space: nowrap; border-collapse: collapse;&amp;#039;&amp;amp;gt;&lt;br /&gt;
                           &amp;amp;lt;tr&amp;amp;gt;&lt;br /&gt;
                               &amp;amp;lt;th&amp;amp;gt;Id&amp;amp;lt;/th&amp;amp;gt;&lt;br /&gt;
                               &amp;amp;lt;th&amp;amp;gt;Status&amp;amp;lt;/th&amp;amp;gt;&lt;br /&gt;
                               &amp;amp;lt;th&amp;amp;gt;Pri&amp;amp;lt;/th&amp;amp;gt;&lt;br /&gt;
                               &amp;amp;lt;th&amp;amp;gt;Updated&amp;amp;lt;/th&amp;amp;gt;&lt;br /&gt;
                               &amp;amp;lt;th&amp;amp;gt;Queue&amp;amp;lt;/th&amp;amp;gt;&lt;br /&gt;
                               &amp;amp;lt;th&amp;amp;gt;Owner&amp;amp;lt;/th&amp;amp;gt;&lt;br /&gt;
                               &amp;amp;lt;th&amp;amp;gt;Subject&amp;amp;lt;/th&amp;amp;gt;&lt;br /&gt;
                           &amp;amp;lt;/tr&amp;amp;gt;\n&amp;quot;;&lt;br /&gt;
         $printmsg = 1;&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
     if($Ticket-&amp;amp;gt;Status ne $last_status)&lt;br /&gt;
     {&lt;br /&gt;
         if($count_by_status &amp;amp;gt; $tickets_per_status)&lt;br /&gt;
         {&lt;br /&gt;
             ($htmlbody, $plainbody) = &amp;amp;amp;see_more_link($searchURL, $count_by_status, $htmlbody, $plainbody);&lt;br /&gt;
         }&lt;br /&gt;
 &lt;br /&gt;
         $last_status = $Ticket-&amp;amp;gt;Status;&lt;br /&gt;
 &lt;br /&gt;
         $count_by_status = 0; # reset on every difft status&lt;br /&gt;
 &lt;br /&gt;
         $status_title = uc($last_status). &amp;quot; and last updated more than &amp;quot;;&lt;br /&gt;
         if($max_age/(60 * 60) &amp;amp;lt;= 48) { $status_title .= ($max_age/(60 * 60)).&amp;quot; hours ago&amp;quot;; }&lt;br /&gt;
         else { $status_title .= ($max_age/(60 * 60 * 24)).&amp;quot; days ago&amp;quot;; }&lt;br /&gt;
 &lt;br /&gt;
         # get a date object that can give us the datetime cutoff for this query&lt;br /&gt;
         $date-&amp;amp;gt;SetToNow();&lt;br /&gt;
         $date-&amp;amp;gt;AddSeconds( -($max_age + (3600 * $timezone_offset)) ); # add GMT hours offset cos timezone not implemented in RT date object&lt;br /&gt;
 &lt;br /&gt;
         $searchURL = RT-&amp;amp;gt;Config-&amp;amp;gt;Get(&amp;#039;WebURL&amp;#039;) . &amp;quot;Search/Results.html?Query=&amp;quot;.&lt;br /&gt;
                      URI::Escape::uri_escape(&amp;quot;LastUpdated &amp;amp;lt; &amp;#039;&amp;quot;. $date-&amp;amp;gt;ISO. &amp;quot;&amp;#039; AND Status = &amp;#039;$last_status&amp;#039;$searchqueue&amp;quot;).&lt;br /&gt;
                      &amp;quot;&amp;amp;amp;amp;Order=&amp;quot;.&lt;br /&gt;
                      URI::Escape::uri_escape(&amp;quot;ASC|ASC|DESC|ASC&amp;quot;).&lt;br /&gt;
                      &amp;quot;&amp;amp;amp;amp;OrderBy=&amp;quot;.&lt;br /&gt;
                      URI::Escape::uri_escape(&amp;quot;Status|queue|Priority|LastUpdated&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
         $htmlbody .= &amp;quot;    &amp;amp;lt;tr style=&amp;#039;background-color: #F5DEB3;&amp;#039;&amp;amp;gt;&lt;br /&gt;
                               &amp;amp;lt;td colspan=&amp;#039;7&amp;#039; style=&amp;#039;padding: 5px; text-align: center;&amp;#039;&amp;amp;gt;&amp;amp;lt;b&amp;amp;gt;&amp;quot;.&lt;br /&gt;
                      &amp;quot;&amp;amp;lt;a href=\&amp;quot;$searchURL\&amp;quot;&amp;amp;gt;$status_title&amp;amp;lt;/a&amp;amp;gt;&amp;amp;lt;/b&amp;amp;gt;&amp;amp;lt;/td&amp;amp;gt;&amp;amp;lt;/tr&amp;amp;gt;\n&amp;quot;;&lt;br /&gt;
         $plainbody .= &amp;quot;\n$status_title since &amp;quot;. $date-&amp;amp;gt;ISO .&amp;quot;\n&amp;quot;;&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
     $count_by_status++;&lt;br /&gt;
 &lt;br /&gt;
     if($count_by_status &amp;amp;gt; $tickets_per_status)&lt;br /&gt;
     {&lt;br /&gt;
         next;&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
     # Use our own date formatting routine&lt;br /&gt;
     my($updated) = &amp;amp;amp;formatDate($Ticket-&amp;amp;gt;LastUpdatedObj-&amp;amp;gt;Unix);&lt;br /&gt;
     my($subject) = $Ticket-&amp;amp;gt;Subject ? $Ticket-&amp;amp;gt;Subject : &amp;quot;(No subject)&amp;quot;;&lt;br /&gt;
     my($queue) = substr($Ticket-&amp;amp;gt;QueueObj-&amp;amp;gt;Name, 0, 7);&lt;br /&gt;
 &lt;br /&gt;
     my($line) = sprintf &amp;quot;%5d  %-7s %3d  %-13s %-7s %-6s %-30s&amp;quot;,&lt;br /&gt;
                          $Ticket-&amp;amp;gt;Id, $Ticket-&amp;amp;gt;Status, $Ticket-&amp;amp;gt;Priority, $updated, $queue, $user-&amp;amp;gt;Name, $subject;&lt;br /&gt;
 &lt;br /&gt;
     # Truncate lines if required&lt;br /&gt;
     if($linelen)&lt;br /&gt;
     {&lt;br /&gt;
         $line = substr($line, 0, $linelen);&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
     $plainbody .= $line .&amp;quot;\n&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
     $htmlbody .= &amp;quot;   &amp;amp;lt;tr style=&amp;#039;background-color: $bgcolor;&amp;#039;&amp;amp;gt;&lt;br /&gt;
                          &amp;amp;lt;td style=&amp;#039;text-align: right; padding: 2px;&amp;#039;&amp;amp;gt;&amp;amp;lt;a href=&amp;#039;&amp;quot;.&lt;br /&gt;
                  RT-&amp;amp;gt;Config-&amp;amp;gt;Get(&amp;#039;WebURL&amp;#039;) . &amp;quot;Ticket/Display.html?id=&amp;quot;. $Ticket-&amp;amp;gt;Id .&amp;quot;&amp;#039;&amp;amp;gt;&amp;quot;.&lt;br /&gt;
                  $Ticket-&amp;amp;gt;Id .&amp;quot;&amp;amp;lt;/a&amp;amp;gt;&amp;amp;lt;/td&amp;amp;gt;&lt;br /&gt;
                          &amp;amp;lt;td style=&amp;#039;text-align: center; padding: 2px;&amp;#039;&amp;amp;gt;&amp;quot;. $Ticket-&amp;amp;gt;Status .&amp;quot;&amp;amp;lt;/td&amp;amp;gt;&lt;br /&gt;
                          &amp;amp;lt;td style=&amp;#039;text-align: right; padding: 2px;&amp;#039;&amp;amp;gt;&amp;quot;. $Ticket-&amp;amp;gt;Priority .&amp;quot;&amp;amp;lt;/td&amp;amp;gt;&lt;br /&gt;
                          &amp;amp;lt;td style=&amp;#039;padding: 2px;&amp;#039;&amp;amp;gt;&amp;quot;. $updated .&amp;quot;&amp;amp;lt;/td&amp;amp;gt;&lt;br /&gt;
                          &amp;amp;lt;td style=&amp;#039;padding: 2px;&amp;#039;&amp;amp;gt;&amp;quot;. $queue .&amp;quot;&amp;amp;lt;/td&amp;amp;gt;&lt;br /&gt;
                          &amp;amp;lt;td style=&amp;#039;padding: 2px;&amp;#039;&amp;amp;gt;&amp;quot;. $user-&amp;amp;gt;Name .&amp;quot;&amp;amp;lt;/td&amp;amp;gt;&lt;br /&gt;
                          &amp;amp;lt;td style=&amp;#039;padding: 2px;&amp;#039;&amp;amp;gt;&amp;amp;lt;div style=&amp;#039;width: 550px; overflow: hidden;&amp;#039;&amp;amp;gt;&amp;quot;. $subject .&amp;quot;&amp;amp;lt;/div&amp;amp;gt;&amp;amp;lt;/td&amp;amp;gt;&lt;br /&gt;
                      &amp;amp;lt;/tr&amp;amp;gt;\n&amp;quot;;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 # finish up last status group&lt;br /&gt;
 if($count_by_status &amp;amp;gt; $tickets_per_status)&lt;br /&gt;
 {&lt;br /&gt;
     ($htmlbody, $plainbody) = &amp;amp;amp;see_more_link($searchURL, $count_by_status, $htmlbody, $plainbody);&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 $htmlbody .= &amp;quot;&amp;amp;lt;/table&amp;amp;gt;&amp;amp;lt;/body&amp;amp;gt;\n&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 # Send the message&lt;br /&gt;
 if($printmsg)&lt;br /&gt;
 {&lt;br /&gt;
     ### Alternative #1 is the plain text:&lt;br /&gt;
     my $plain = $msg-&amp;amp;gt;attach(Type =&amp;amp;gt; &amp;#039;text/plain&amp;#039;,&lt;br /&gt;
                              Data =&amp;amp;gt; [$plainbody]);&lt;br /&gt;
 &lt;br /&gt;
     ### Alternative #2 is the HTML-with-content:&lt;br /&gt;
     my $fancy = $msg-&amp;amp;gt;attach(Type =&amp;amp;gt; &amp;#039;multipart/related&amp;#039;);&lt;br /&gt;
     $fancy-&amp;amp;gt;attach(Type =&amp;amp;gt; &amp;#039;text/html; charset=UTF-8&amp;#039;, # utf8 charset to avoid MIME::Lite wide character error&lt;br /&gt;
                    Data =&amp;amp;gt; [$htmlbody]);&lt;br /&gt;
 &lt;br /&gt;
     if ($debug)&lt;br /&gt;
     {&lt;br /&gt;
         # print &amp;quot;====== Would email this report:\n&amp;quot;;&lt;br /&gt;
         print &amp;quot;$plainbody\n\n&amp;quot;;&lt;br /&gt;
         # $msg-&amp;amp;gt;print;&lt;br /&gt;
         # print $msg-&amp;amp;gt;as_string;&lt;br /&gt;
         # print $msg-&amp;amp;gt;body_as_string;&lt;br /&gt;
     }&lt;br /&gt;
     else&lt;br /&gt;
     {&lt;br /&gt;
          $msg-&amp;amp;gt;send;&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
 else&lt;br /&gt;
 {&lt;br /&gt;
     print &amp;quot;No message to print.\n\n&amp;quot;;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 # Disconnect before we finish off&lt;br /&gt;
 $RT::Handle-&amp;amp;gt;Disconnect();&lt;br /&gt;
 exit 0;&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 sub see_more_link() {&lt;br /&gt;
     my ($searchURL, $count_by_status, $htmlbody, $plainbody) = @_;&lt;br /&gt;
     $htmlbody .= &amp;quot;    &amp;amp;lt;tr&amp;amp;gt;&lt;br /&gt;
                          &amp;amp;lt;td colspan=&amp;#039;7&amp;#039; style=&amp;#039;padding: 7px; text-align: center;&amp;#039;&amp;amp;gt;&lt;br /&gt;
                             &amp;amp;lt;a href=\&amp;quot;$searchURL\&amp;quot;&amp;amp;gt;See all $count_by_status getting stale in &amp;quot;.&lt;br /&gt;
                  uc($last_status) .&amp;quot; status&amp;amp;lt;/a&amp;amp;gt;&amp;amp;lt;/td&amp;amp;gt;&lt;br /&gt;
                       &amp;amp;lt;/tr&amp;amp;gt;\n&amp;quot;;&lt;br /&gt;
     $plainbody .= &amp;quot;$searchURL\n&amp;quot;;&lt;br /&gt;
     return ($htmlbody, $plainbody);&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 # Formats a date like: Thu 10-07-03&lt;br /&gt;
 # Designed to be consice yet useful&lt;br /&gt;
 sub formatDate() {&lt;br /&gt;
     my($unixtime) = @_;&lt;br /&gt;
     my(@days) = ( &amp;quot;Sun&amp;quot;, &amp;quot;Mon&amp;quot;, &amp;quot;Tue&amp;quot;, &amp;quot;Wed&amp;quot;, &amp;quot;Thu&amp;quot;, &amp;quot;Fri&amp;quot;, &amp;quot;Sat&amp;quot; );&lt;br /&gt;
     # Return an empty string if we haven&amp;#039;t been given a time&lt;br /&gt;
     return &amp;quot;&amp;quot; if $unixtime &amp;amp;lt;= 0;&lt;br /&gt;
     my($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime($unixtime);&lt;br /&gt;
     return sprintf &amp;quot;%s %02d-%02d-%02d&amp;quot;, $days[$wday], $mon+1, $mday, $year%100;&lt;br /&gt;
 }&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
</feed>