Mailhandler

Aus wiki
Wechseln zu: Navigation, Suche

[Bearbeiten] Kurzbeschreibung

Das Skript mailhandler.pl verarbeitet Mails, erstellt daraus toodledo-Tasks und schickt eine entsprechende Mail an die persönliche toodledo-Email-Adresse. Das Skript ist nur ein Beispiel und kann/muss beliebig erweitert werden. Das Beispiel setzt zudem voraus, dass man einen Serverbereich wie beispielsweise bei uberspace.de zur Verfügung hat.

Grundprinzip:

  1. Mails, die nicht im Mailfolder landen sollen, sondern aus denen direkt Tasks generiert werden sollen, müssen zunächst automatisch an eine eigens dafür eingerichtete E-Mail-Adresse bei uberspace.de weitergeleitet werden, beispielsweise an ACCOUNT-toodledo@SERVER.uberspace.de
  2. Die Mailadresse wird durch das Anlegen der Datei .qmail-toodledo generiert. In dieser Datei muss eine Weiterleitung an das Skript eingetragen werden, z.B. |/home/ACCOUNT/bin/mailhandler.pl
  3. Im Skript wird dann die E-Mail "interpretiert" und eine entsprechende task zusammengebastelt, die per Mail an toodledo geschickt wird.
  4. Die Idee dazu hab ich auch mal im Blog beschrieben: Lieber Tasks als Mails


[Bearbeiten] Inhalt von .qmail-toodledo

|/home/ACCOUNT/bin/mailhandler.pl

[Bearbeiten] Skript mailhandler.pl

#!/usr/bin/perl

$tomail="<PERSONALTOODLEDOMAIL>";
   
#-----------------------------------------------------------------
# BUILD DATE
#-----------------------------------------------------------------
my (undef,undef,undef,$mday,$mon,$year) = localtime;
$year += 1900;
$mon += 1;
$date = "$mday.$mon.$year";

#-----------------------------------------------------------------
# READ MAIL
#-----------------------------------------------------------------
$isHeader = 1;
$isSignature = 0;
$from="";
$subject="";
$body="";

while (<STDIN>) {
  if ( $isHeader ) {
     if ( $_ =~ m/^From:\s*([^<]*<|)([^>]+)(>|)$/) {  $from=$2; }
     if ( $_ =~ m/^Subject:\s*(.*)/) { $subject=$1; }
     if ( $_ =~ m/^\s+$/) { $isHeader = 0; }
  } else {
     if ( $_ =~ m/^--\s/) { $isSignature = 1; }
	 if ( ! $isSignature ) { $body .= $_; }
  }
}

chomp ($from);
chomp ($subject);
chomp ($body);

#-----------------------------------------------------------------
# INTERPRETE DATA
#-----------------------------------------------------------------

$task = "";
$duedate = "";
$priority = ""; # ! = 1, !! = 2, !!! = 3
$folder = "";
$tags = "";
$content = "";


# Activate phpBB forum account
if ( $subject eq 'Activate user account' ) {

  $task = "activate forum account";
  if ( $body =~ m/The account owned by "([^"]*)/ ) {
	    $task .= ": " . $1;		
  }   
  $duedate = $date;
  $tags = "forum";
  $content = $body;
}

# Yahoo group mailing list: new member
if ( $subject =~ m/Zur Genehmigung anstehende/) {

  $task = "accept new yahoogroup member";
  if ( $body =~ m/E-Mail-Adresse: (\S*)/ ) {
	    $task .= ": " . $1;		
  }   
  $duedate = $date;
  $tags = "yahoo";
  $content = $body;
}



#-----------------------------------------------------------------
# SEND MAIL
#-----------------------------------------------------------------

$sendsubject = "";

if ( $task ) {
   $sendsubject = $task;
   if ( $priority ) { $sendsubject .= " ".$priority; }
   if ( $duedate ) { $sendsubject .= " #".$date; }
   if ( $folder ) { $sendsubject .= " *".$folder; }
   if ( $tags ) { $sendsubject .= " %".$tags; }
   
 
   open(MAIL, "|/usr/sbin/sendmail -t");
   print MAIL "To: $tomail\n";
   print MAIL "From: <FROMMAIL>\n";
   print MAIL "Subject: $sendsubject\n\n";
   print MAIL "$content";
   close(MAIL);
}