[rt-users] Controlling email submissions

Bruce Campbell bruce_campbell at ripe.net
Tue May 14 16:49:02 EDT 2002


On Wed, 15 May 2002, Deon George wrote:

> Is there a way I can enforce email ticket correspondence so that:

Right there you've got an easy solution.  You can run RT through a
pre-filter (procmail), to catch:

> * All ticket correspondence (either new ticket creations or additional
> correspondence to existing tickets) can only have a subject line of say 5
> chars to max 60 characters (I have some users who right an essay on the
> subject line, and no body in the mail),

non-good subject lines.  For instance, checking that you can quote a valid
membership name before it hits the ticketing system.

( And whilst on the subject of poor problem descriptions,
  http://chroniclesofgeorge.nanc.com/ )

> * All ticket correspondence must have content in the body of the email (say
> a minimum of 5 characters and no enforced maximum).

Oooh, now this is harder with procmail.  But, you can do it, with avid
reference to the procmailsc man page:

	# Match (hopefully) a subject line between 5 and 60 characters,
	# not including leading space, but including space afterwards.
	:0
	* ! ^Subject:\s+\S.{4,59}
	! autoresponder-invalid-subject at example.com

	# Decrease the score to -2, then add 1 each time we encounter
	# a line with 5 or more characters in it, but not quoting
	# characters ('>').
	# Run mailgate if our score is over 2 (3 valid lines).
	:0 Bh
	* -2^0
	* 1^1 ^\s*[^>]+\s*\S.{4,}
	| rt-mailgate

	# Still here?
	:0
	! autoresponder-nocontent at example.com

Note that I've treated this mail as an intellectual exercise, and haven't
tested the above.

> I would like to do one of two things when correspondence doesnt match the
> above:
>
> * Send rejection message back, saying the ticket has not created or the
> correspondence has not been accepted becuase (and the reason),

See procmailex man page on how to create autoresponders.

> * truncate the subject line, and repeat it in full in the body of the
> message, (probably less harmful to users) and accept it, generating the
> normal replies/actions, using the truncated subject line, etc.

Hrm.. Tricky.  Truncating the subject is not hard, eg:

	ORIGSUBJECT=`formail -xSubject:`
	SUBJECT=`formail -xSubject: | cut -c 1-60`

	# Trim the subject to 60 chars if its over 60 chars
	# Original subject gets left in header as Old-Subject:
	:0 fhw
	* ^Subject:\s+\S.{60,}
	| formail -i"Subject: $SUBJECT"

But inserting it into the body of the message is somewhat harder... in
fact (after a few minutes of actually reading the procmail/formail man
pages), you'd be better writing a perl snippet to do this for you instead:

	# Filter through a one-line perl snippet to trim the subject
	# line if its over 60 chars (we don't bother running if its not
	# over 60 chars), and to insert the subject in the body of the
	# message.
	:0 fhw
	* ^Subject:\s+\S.{60,}
	| perl -e '$inhead=1;prebod=undef; while(<>){ chomp; if(m/^$/){
$inhead=0; if(defined($prebod)){ print "\n\nOriginal Subject (>60 chars):
$prebod \n";} } if($inhead && m/^Subject:\s+(\S.{0,59})(.*)$/ ){ print
"Subject:  $1\n"; $prebod=$1 . $2; }else{ print "$_\n"; } }'

	# Apply other checks, run rt-mailgate

> Would these be easy to patch into RT? I'm currently on 2.0.8, but planning
> on going to 2.0.13 when I get the chance to update it.

In the RT 2.0.x series, I'd say that you wouldn't want to do this
pre-acceptance activity in RT itself.  In RT 2.1+, where Jesse is looking
at Scrips that run before assiging a ticket number (and thus rejecting a
message then would make sense), doing it in RT would be a sinch.

-- 
                             Bruce Campbell                            RIPE
                   Systems/Network Engineer                             NCC
                 www.ripe.net - PGP562C8B1B                      Operations






More information about the rt-users mailing list