# Dovecot

# Anzahl der gleichzeitigen Verbindungen pro IP erhöhen

Im „protocol imap“-Teil der Config muss die Zeile mail\_max\_userip\_connections ergänzt werden (Dovecot Version 1.2)

<div id="bkmrk-%2Fetc%2Fdovecot%2Fdovecot"><dl class="code"><dt>/etc/dovecot/dovecot.conf</dt><dd>```
## IMAP specific settings
protocol imap {
  mail_executable = /usr/lib/dovecot/rawlog /usr/lib/dovecot/imap
  mail_plugins = quota imap_quota
  mail_max_userip_connections = 50
}
```

</dd></dl></div>

# Mails älter als X Tage aus dem Trash löschen

Normalerweise werden Mails, die in den Papierkorb (bei Dovecot üblicherweise .Trash) verschoben wurden, nicht automatisch gelöscht. Über die Zeit sammelt sich dort deshalb ziemlich viel Müll an.

Mit dem folgenden Job lässt sich dort bequem aufräumen:

<div id="bkmrk-%23-entweder-f%C3%BCr-alle%3A"><div>```
# entweder für alle:
doveadm expunge -A mailbox Trash savedbefore 30d

# oder nur für eine einzelne Mailbox:
doveadm expunge -u user@domain.de mailbox Trash savedbefore 30d
```

</div></div>Wenn man `expunge` durch `search` ersetzt lässt sich vorher testen, ob wirklich nur die Mails gelöscht werden, die gelöscht werden sollen.

Um es für bequem für mehrere User gleichzeitig zu erledigen habe ich dieses kleine Script gebaut:

<div id="bkmrk-%23%21%2Fbin%2Fbash-%C2%A0-days%3D3">```
<span class="co0">#!/bin/bash</span>
 
<span class="re2">DAYS</span>=<span class="nu0">30</span>
<span class="re2">USERLIST</span>=<span class="st0">"user1@domain.de user2@domain.de user3@domain.de"</span>
 
<span class="kw1">for</span> user <span class="kw1">in</span> <span class="co1">${USERLIST}</span>; <span class="kw1">do</span>
  <span class="co0">#doveadm search -u ${user} mailbox Trash savedbefore ${DAYS}d</span>
  doveadm expunge <span class="re5">-u</span> <span class="co1">${user}</span> mailbox Trash savedbefore <span class="co1">${DAYS}</span>d
<span class="kw1">done</span>
```

</div>

# Volltextsuche in Mails mit Solr

<p class="callout info">Diese Anleitung wurde für Debian 8 (Jessie) erstellt.</p>

Versionen:

<div id="bkmrk-dovecot-2.2.27-%28aus-">- <div>Dovecot 2.2.27 (aus den Debian Backports, da die im normalen Debian enthaltene Version ein Problem mit Solr 6.5 hat</div>
- <div>Solr 6.5.1 (Standalone Installation)</div>
- <div>OpenJDK 8 (ebenfalls aus den Backports aufgrund der neueren Version)</div>

</div>#### Installation/Upgrade Dovecot

[Debian Backports aktivieren](https://backports.debian.org/Instructions/ "https://backports.debian.org/Instructions/"):

<div id="bkmrk-%2Fetc%2Fapt%2Fsources.lis"><dl class="code"><dt>/etc/apt/sources.list.d/backports.list</dt><dd>```
deb http://ftp.de.debian.org/debian jessie-backports main contrib non-free
```

</dd></dl>```
aptitude -t jessie-backports install dovecot-core dovecot-solr (+ weitere Pakete, wenn nötig (z.B. mysql))
```

</div>#### Installation OpenJDK 8

<div id="bkmrk-aptitude--t-jessie-b">```
aptitude -t jessie-backports install openjdk-8-jdk-headless openjdk-8-jre-headless
```

</div>#### Installation Solr 6.5.1

Das aktuelle Solr .tgz von [apache.org](https://lucene.apache.org/solr/mirrors-solr-latest-redir.html "https://lucene.apache.org/solr/mirrors-solr-latest-redir.html") herunterladen und entpacken. Mit dem Installerscript läßt sich der Solr sehr einfach einrichten:

<div id="bkmrk-cd-%2Froot-wget-http%3A%2F"><div>```
cd /root
wget http://mirror.synyx.de/apache/lucene/solr/6.5.1/solr-6.5.1.tgz
tar xvzf solr-6.5.1.tgz
bin/install_solr_service.sh /root/solr-6.5.1.tgz
```

</div></div>Der Solr-Admin sollte nun über den Browser erreichbar sein: [http://localhost:8983](http://localhost:8983 "http://localhost:8983")

Auf dem Server nun die Datenverzeichnisse anlegen und die Config von Dovecot rüberkopieren:

<div id="bkmrk-sudo-su---solr--c-%22%2F"><div>```
sudo su - solr -c "/opt/solr/bin/solr create -c dovecot -n dovecot"
```

</div></div>Das Datenverzeichnis liegt in /var/solr/data/dovecot. Bei Solr 6.X kann das Schema über die WebGUI konfiguriert werden. Dovecot kommt aber mit einem eigenen Schema, daher wird beim Deploy dieser Konfiguration diese Möglichkeit deaktiviert.

Nun noch [schema.xml](https://wiki.magenbrot.net/_media/linux/mail/dovecot/schema.xml "linux:mail:dovecot:schema.xml (2.9 KB)") und [solrconfig.xml](https://wiki.magenbrot.net/_media/linux/mail/dovecot/solrconfig.xml "linux:mail:dovecot:solrconfig.xml (54 KB)") nach `/var/solr/data/dovecot/conf` kopieren und die Datei `managed-schema` löschen. Aufgrund der Übersichtlichkeit habe ich diese Dateien im Anhang hinterlegt.

<div id="bkmrk-cp-schema.xml-solrco"><div>```
cp schema.xml solrconfig.xml /var/solr/data/dovecot/conf
rm /var/solr/data/dovecot/conf/managed-schema
```

</div></div>Nach einem Neustart des Solr-Services kann Dovecot konfiguriert werden:

<div id="bkmrk-systemctl-restart-so">```
systemctl restart solr.service
```

</div>#### Konfiguration von Dovecot

Ich verwende auf dem Dovecot-Server ISPConfig. ISPConfig verwendet nicht das conf.d-Modell mit einzelnen Konfigurationsdateien, sondern packt alles direkt in die `/etc/dovecot/dovecot.conf`. Bitte ändere deine Dateien dort wo notwendig.

<div id="bkmrk-%2Fetc%2Fdovecot%2Fdovecot"><div><dl class="code"><dt>/etc/dovecot/dovecot.conf</dt><dd>```
[...]
mail_plugins = quota fts fts_solr
[...]
plugin {
  [...]
  fts = solr
  fts_solr = break-imap-search url=http://localhost:8983/solr/dovecot/
  fts_autoindex = yes
  [...]
}
```

</dd></dl></div></div>Selbstverständlich können Solr und Dovecot auch auf verschiedenen Servern gehostet werden. Dafür muss nur die IP-Adresse entsprechend angepasst werden. Der Solr-Port (8983) sollte nach außen selbstverständlich mit einer Firewall gesichert werden oder Solr auf eine interne IP gebunden werden. In meinem Setup liegt Solr auf einem internen Server ohne öffentliche IP-Adresse.

Nach einem Neustart per `systemctl restart dovecot.service` kann die Volltextsuche bereits verwendet werden. Dazu muss zuerst der Index erzeugt werden:

<div id="bkmrk-doveadm-index--a--q-"><div>```
doveadm index -A -q '*'
```

</div></div>Da die serverseitige Volltextsuche eine Erweiterung der Suche im IMAP-Protokoll ist, muss ein Client verwendet werden, der dies unterstützt. Mir sind aktuell bekannt: Claws Mail / Sylpheed, Roundcube, Thunderbird.