lunedì , dicembre 11 2017
Ultime Notizie
Home / Programmazione / OTRS Filter email by attachment

OTRS Filter email by attachment

Hi Guys,

this is in English cause OTRS is a global ticket system used in all world.

Today i’ll show you how to filter incoming email by attachment and put them in a specified queue.

I’m doing this because even if my antispam filter rulez, sometimes some email are not marked as spam so i cannot use the X-SPAM-FLAG option.

In this tutorial i’m assuming that you’ve a working OTRS system and that the email account to receive ticket is fully configured and working well.

Let’s start.

I’ve tried to build a custom Filter but i don’t want to play too much with Perl so i’m going where everything start:

otrs/Kernel/System/PostMaster

In this folder there’s the file named NewTicket.pm which is the perl module called when an email has been fetched from otrs system.

First of all: BACKUP this file cause it’s easy to damage the entire otrs system!

In this file you need to find the definition of $QueueID comment the original line and edit like this:

my $QueueID = "";
    for my $Attachment ( $Self->{ParserObject}->GetAttachments() ) {
    	if ( $Attachment->{Filename} =~ m{(?:\.zip|\.doc|\.docm|\.js)\z}i ) {
		$QueueID = "your_queue_id";
	}
	else {
		$QueueID = $Param{QueueID} || die "need QueueID!";
	}
    }
    my $Queue = $Kernel::OM->Get('Kernel::System::Queue')->QueueLookup(
                        QueueID => $QueueID,
                );

 

Let’s see what this code do.

I’m defining the $QueueID as empty variable then i’m checking for every attachment in the email, get the file name and parse if it has an extension like .zip, .doc, .js etc.

If it’s true, i’m assign to $QueueID the ID of my Junk queue otherwise i’ll take the right queue ID.

Yes it’s done and working! (Maybe you need to restart the scheduler or entire machine because perl doesn’t like live modifications!)

Then i’m going to create a Generic Agent to delete all ticket in Junk queue on a specified date.

Let’s see how can we do that!

First of all we need to create a Generic Agent from System Administration section:

GenericAgent

Assign a Name to this Agent:

GenericAgentName

Set the Scheduler:

GenericAgentScheduler

Under Ticket Filter let’s choose the Junk Queue:

GenericAgentQueue

Do not touch anything else!

Under Ticket Commands set YES under Delete Ticket section:

GenericAgentAction

Then dump your db (it’s always a good thing) and test it:

GenericAgentRunJob

If you click on Run Job all ticket will be permanently deleted (of course they’ll be deleted every time you schedule the agent!)

Enjoy!

Info Paolo Daniele

Ingegnere delle Telecomunicazioni, appassionato di informatica fin da piccolo ho trasformato la passione in lavoro. Con il PHP faccio tutto (o quasi…) ma non disprezzo altri linguaggi all’occorrenza. Se vi piace il mio sito, o vi è utile, o vi sto simpatico, offritemi una birra!

Ti potrebbe interessare

Windows Server: Risolvere Errore “Licensing mode for the Remote Desktop Session Host is not configured”

Ciao Ragazzi, Oggi ho litigato con Microsoft. Ho acquistato 5 licenze Terminal Server per collegamento …

2 Commenti

  1. Hey.
    Great article, but:
    * you should consider to either edit a copy in Custom/Kernel/System/Postmaster/, or
    * (better) create a Postmaster Filter that looks for the Attachment name.

    • Paolo Daniele

      Your point is right, i’ve tried to build a Postmaster filter for the Attachments but without success. So i really haven’t no time to spend to study the full documentation so i’ve taken the fast way. I’m sure i’ll take the documentation to improve this modification in the next future! Thanks for your suggestions!

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *