Mailmanagement mit osTicket

Seit lan­gem nervt es mich, dass ich kei­ne kla­re Tren­nung zwi­schen der Bear­bei­tung von E-Mails und sons­ti­gen Auf­ga­ben  hin­be­kom­me. Mir schrei­ben vie­le Men­schen E-Mails: Mei­ne Kol­le­gin­nen und Kol­le­gen bei Pro­ble­men mit unse­rer Schul­ser­ver­lö­sung, Men­schen, mit denen ich im Rah­men der Medi­en­be­ra­tung zu tun habe. Oft geht es dabei um Ter­min­ver­ein­ba­run­gen, tech­ni­sche Pro­ble­me, Erstel­lung von Aus­stat­tungs­vor­schlä­gen, also klas­si­sche The­men, die man dem „Sup­port­be­reich” zuord­nen kann. Da geht viel durch­ein­an­der, sodass ich das eine oder ande­re auch schon ein­mal ver­ges­se. Zum Glück gibt es ein Stück Tech­nik, wel­ches genau für die­se Anfor­de­rung erschaf­fen wur­de, denn Fir­men haben im Sup­port genau die glei­chen Her­aus­for­de­run­gen: Das Ticket­sys­tem. Ich set­ze dafür das kos­ten­lo­se Open­sour­ce-Sys­tem  osTi­cket ein (hier gibt es eine Demo — Log­in: demo / Pass­wort: anmel­den ).

logo

osTi­cket soll­te auf fast jedem Webs­pace pro­blem­los lau­fen, der fol­gen­de Bedin­gun­gen erfüllt:

  • MyS­QL-Unter­stüt­zung
  • PHP ab Ver­si­on 5.3
  • PHP IMAP — Modul
  • imap-fähi­ger E-Mail­ac­count mit der Berech­ti­gung, eige­ne Ord­ner anzu­le­gen

Was ändert sich?

osTi­cket macht eigent­lich tech­nisch genau das, was ein belie­bi­ges E-Mail­pro­gramm wie Out­look oder Thun­der­bird tut: Es holt die Mails eines Kon­tos per imap ab, schreibt die­se jedoch in eine Daten­bank. Jede neue Mail erhält eine Ticket-ID, die auto­ma­tisch mit in die Sub­ject-Zei­le geschrie­ben wird, wenn ich jeman­dem ant­wor­te. Ant­wor­tet mir mein Gegen­über auf die­se Mail, erkennt osTi­cket anhand der Ticket-ID, zu wel­chem Kom­mu­ni­ka­ti­ons­vor­gang die Ant­wort gehört und weist die­sen auto­ma­tisch zu. Ein Kom­mu­ni­ka­ti­ons­vor­gang heißt „Ticket”. Das ist erst­mal alles.

Hä? Und wo ist da jetzt der Unter­schied zu vor­her?

Bleibt ein Ticket zu lan­ge lie­gen (bei mir sind es drei Tage), schreibt osTi­cket Jam­mer­mails und prio­ri­siert das jewei­li­ge Ticket, indem es den Kom­mu­ni­ka­ti­ons­pro­zess in einer Lis­te nach oben schiebt. Erst wenn ich ant­wor­te, ist wie­der für drei Tage Ruhe — ich brau­che das.

Wenn ein Pro­zess abge­schlos­sen ist, kann ich das Ticket „schlie­ßen”. Natür­lich wird eine Sta­tis­tik erstellt (mein Dienst­herr mag Sta­tis­ti­ken als „Arbeits­nach­weis” und ich habe kei­nen Bock, die selbst zu erstel­len) und ich kann geschlos­se­ne Tickets ganz ein­fach fin­den, z.B. mit einer Suche nach einem Namen oder einer E-Mail­adres­se. Damit weiß ich, was ich wie oft mit wel­cher Per­son ver­hack­stückt habe.

Und sonst?

Ich kann vor­de­fi­nier­te Ant­wor­ten anle­gen — wenn eine Schu­le z.B. über unse­re Medi­en­zen­trum eine Home­page hos­ten und betreu­en las­sen möch­te, ähneln sich die Pro­zes­se doch sehr. Die Ant­wor­ten kli­cke ich ein­fach in die Mail hin­ein.

Auch für tele­fo­ni­sche oder münd­li­che Anfra­gen kann ich selbst Tickets eröff­nen. Da alle Pro­zes­se in osTi­cket mehr­be­nut­zer­fä­hig sind, wüss­ten z.B. auch Kol­le­gin­nen und Kol­le­gen von mir, wo ich gera­de ste­he.

Wer es mag, kann osTi­cket auch mit Andro­id und Co. über eine App mana­gen. Das ist für mich und mei­nen Work­flow aber eher ein Nach­teil. Ich set­ze mich lie­ber gezielt 1–2x am Tag an einen Rech­ner und arbei­te den Kram dann kon­zen­triert ab.

Außer­halb mei­ner Arbeits­zeit gibt es eine höf­li­che, aber bestimm­te Mail, die den Emp­fang bestä­tigt, aber dann auf z.B. Mon­tag ver­trös­tet.

Und nicht zuletzt: Das Back­up einer MyS­QL-Daten­bank ist auch viel per­for­man­ter als das­je­ni­ge tau­sen­der Fit­zel­da­tei­en auf der Fest­plat­te.

Und der E-Mail­cli­ent zu Hau­se?

osTi­cket löscht nor­ma­ler­wei­se emp­fan­gen­de Mails auf dem Ser­ver, kann aber die­se auch in einen imap-Unter­ord­ner ver­schie­ben. Wenn sich eine wirk­lich pri­va­te Mail auf einen Dienstac­count ver­irrt, kann ich sie immer noch aus dem Archiv­ord­ner her­aus ganz nor­mal ohne Ticket-ID per­sön­lich mit der pri­va­ten Mail­adres­se beant­wor­ten.

 

Owncloud an bestehende Authentifizierungsysteme anbinden

Own­cloud bie­tet ab der Ver­si­on 6 neben den übli­chen inter­es­san­ten Fea­tures eine kol­la­bo­ra­ti­ve Text­ver­ar­bei­tung an, d.h. meh­re­re Benut­zer kön­nen genau wie bei Ether­pad oder Ether­pad lite gleich­zei­tig an einem Doku­ment arbei­ten. Die For­ma­tie­rungs­mög­lich­kei­ten sind dabei umfang­rei­cher als bei der Ether­pad­de­ri­va­ten, jedoch gegen­über Lösun­gen wir Goog­le­Docs noch recht rudi­men­tär. Für vie­le Anwen­dungs­fäl­le reicht es jedoch voll­auf. Wer möch­te, darf das hier nach Ein­ga­be eines Spitz­na­mens ger­ne ein­mal aus­pro­bie­ren. Own­cloud nutzt ODT als nati­ves For­mat.

Vie­le Schu­len möch­ten ger­ne Own­cloud nut­zen und ver­fü­gen oft schon über eine Schul­ser­ver­lö­sung. Idea­ler­wei­se bie­tet die­se bereits E-Mail­adres­sen für alle Schul­an­ge­hö­ri­gen über das IMAP-Pro­to­koll an. Das ist z.B. bei IServ der Fall — einer in Nie­der­sach­sen sehr ver­brei­te­ten Lösung. Durch zwei klei­ne Ände­run­gen muss kei­ne sepa­ra­te Nut­zer­ver­wal­tung in Own­cloud mehr betrie­ben wer­den, wenn bereits ein IMAP-Ser­ver im Schul­netz vor­han­den ist.

Es kann eine Grund­in­stal­la­ti­on von Own­cloud als Basis genom­men wer­den. Bei den Apps muss „Exter­nal user sup­port” zuvor akti­viert wer­den. Eine Datei ist danach zu ändern, eine hin­zu­zu­fü­gen.

Zu ändern­de Datei

Name: config/config.php

Quell­code:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php
require_once(dirname(__FILE__).'/../apps/user_external/lib/imap_new.php');
 
$CONFIG = array (
  'instanceid' => '<hier_steht_schon_etwas>',
  'passwordsalt' => '<hier_steht_schon_etwas>',
  'datadirectory' => '<hier_steht_schon_etwas>',
  'dbtype' => 'mysql',
  'version' => '6.0.0.14',
  'dbname' => '<hier_steht_schon_etwas>',
  'dbhost' => 'localhost',
  'dbtableprefix' => 'oc_',
  'dbuser' => '<hier_steht_schon_etwas>',
  'dbpassword' => '<hier_steht_schon_etwas>',
  'installed' => true,
  'forcessl' => true,
  'user_backends'=>array(
   array(
      'class'=>'OC_User_IMAP',
      'arguments'=>array('{<server>:<port>/imap/ssl/novalidate-cert}')
   )
  ),
);

Kom­men­tar:
In Zei­le 2 wird der neu zu erstel­len­de Code (s.u.) ein­ge­bun­den, ab Zei­le 17 wird es inter­es­sant, vor allem in der Zei­le, die mit „argu­ments” beginnt. Die Anga­ben für Ser­ver und Port sind mit den eige­nen Anga­ben zu fül­len. Ich brau­che für den IServ die Anga­be „nova­li­da­te-cert”, da es sich um ein selbst­si­gnier­tes Cert han­delt — daher zicken auch Apple­ge­rä­te ger­ne mit dem IServ, weil sie sich in der Feh­ler­mel­dung nicht klar aus­drü­cken. Nutzt man eine unver­schlüs­sel­te Ver­bin­dung, was allen­falls zu Test­zwe­cken dien­lich ist, sieht das z.B. so aus:

      'arguments'=>array('{meinserver.xy:143/imap}')

Hin­zu­zu­fü­gen­de Datei:

Name: apps/user_external/lib/imap_new.php

Quell­code:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
<?php
/**
 * Copyright (c) 2012 Robin Appelman <icewind@owncloud.com>
 * This file is licensed under the Affero General Public License version 3 or
 * later.
 * See the COPYING-README file.
 */
 
class OC_User_IMAP extends OC_User_Backend{
        private $mailbox;
 
        public function __construct($mailbox) {
                $this->mailbox=$mailbox;
        }
 
        /**
         * @brief Check if the password is correct
         * @param $uid The username
         * @param $password The password
         * @returns true/false
         *
         * Check if the password is correct without logging in the user
         */
        public function checkPassword($uid, $password) {
 
                $mbox = @imap_open($this->mailbox, $uid, $password);
                imap_errors();
                imap_alerts();
 
 
                if($mbox) {
                        imap_close($mbox);
 
                        if(OC_User::userExists($uid)) {
                                  OC_User::setPassword($uid, $password);
                        } else {
                                  OC_User::createUser($uid, $password);
                                  $uida=explode('@',$uid,2);
                                  if(($uida[1] || '') !== '') {
                                        OC_Group::createGroup($uida[1]);
                                        OC_Group::addToGroup($uid, $uida[1]);
                       }
 
                }
                        return $uid;
                } else {
                        return false;
                }
        }
 
}

Kom­men­tar:
Die­ses Code­stück sorgt dafür, dass beim ers­ten Log­in eines Benut­zers ein Ein­trag in die User-Daten­bank von Own­cloud erfolgt. Dabei wird auch das Pass­wort ver­schlüs­selt gespei­chert, da ansons­ten kei­ne Nut­zung über die Apps von Own­cloud mög­lich ist. Der Nut­zer muss sich mit den glei­chen Daten wie am E-Mail­ser­ver anmel­den. Ändert der Nut­zer sein Pass­wort im IServ oder auf dem E-Mail­ser­ver, wird die­se Ände­rung bei bestehen­dem Log­in in Own­cloud über­nom­men.

Update:
Mit dem Hack funk­tio­niert auch die Nut­zung mit der Own­cloud-App pro­blem­los.

Das macht Facebook nicht

Bei Face­book hat man ja die Mög­lich­keit, sich Freun­de vor­schla­gen zu las­sen, indem man Zugangs­da­ten zu sei­nem E-Mail­ac­count dort angibt. Damit hat Face­book genau die Mög­lich­kei­ten des Zugriffs auf mei­ne Mails, die ich hier skiz­zie­re, wenn ich einen IMAP-Account ver­wen­de. IMAP ist  eine Tech­no­lo­gie zur Ver­wal­tung von Mails auf einem Ser­ver. Wenn Ihr von ver­schie­de­nen Orten auf ver­schie­de­nen End­ge­rä­ten Zugriff auf eure Mails habt und dazu kei­nen Brow­ser ver­wen­det, nutzt ihr zu 98% IMAP.

Was die meis­ten Men­schen ken­nen, sind Kli­ckibun­ti E-Cli­ents („IPho­ne-Apps”, Out­look, Thun­der­bird…),  die  man ein­mal ein­rich­tet und die dann alles für einen tun (z.B. Ord­ner anle­gen usw.). Man kann mit sei­nem Mail­ser­ver aber auch ganz „frea­kig” über die Kom­man­do­zei­le via tel­net reden, ver­schlüs­selt geht das auch, etwa über opens­sl. Dazu braucht es ledig­lich ein Log­in und ein Pass­wort für den E-Mail­ac­count (den hat Face­book ja dann). Dabei wan­dern die Daten rucki­zucki. Ich habe ein­mal Daten mar­kiert, die etwas über mei­ne Per­son aus­sa­gen. Fett sind die not­wen­di­gen Kom­man­dos in der Bash gedruckt.

Ich habe ein­mal mei­nen Ser­ver (riecken.de) genom­men — erst­mal sagen wir „Hal­lo!”:

tel­net riecken.de 143

Try­ing 217.79.182.34…                                                                                                                                                                                                                                                                                    Con­nec­ted to riecken.de.

Escape cha­rac­ter is ‚^]’.
* OK [ser­ver string]

Mit­tels GeoIP kann ich her­aus­be­kom­men, wo mein Mail­ser­ver steht, genau bei wel­chem Pro­vi­der in in wel­chem Rechen­zen­trum. Mit den Zugangs­da­ten kön­nen wir uns ein­log­gen — lt. Pro­to­koll braucht es dafür einen Iden­ti­fier, hier A00001 —  und dann nach­schau­en, wel­che Ord­ner es gibt:

Wei­ter­le­sen