Dies ist eine alte Version des Dokuments!
Horde 5 Applikation IMAP Sieve-Filterregeln: Ingo unter CentOS 7.x
Als nächste Applikation installieren wir uns noch die Anwendung Ingo. Mit Hilfe dieser Anwendung können wir die am IMAP-Server hinterlegten Sieve-Regeln anlegen, bearbeiten und auch löschen. Informationen zu Installation und Konfiguration findet amn auch auf der offiziellen Doku-Seite.
Installation
Die Installation der Applikation Ingo können wir ganz einfach über das Paketverwaltungswerkzeug yum vornehmen.
# yum install php-horde-ingo -y
Was uns das Paket php-horde-ingo alles mitgebracht hat zeigt uns der folgende Aufruf.
# rpm -qil php-horde-ingo
Name : php-horde-ingo Version : 3.2.0 Release : 1.el7 Architecture: noarch Install Date: Fri 12 Sep 2014 01:50:08 PM CEST Group : Development/Libraries Size : 1409432 License : BSD Signature : RSA/SHA256, Fri 25 Jul 2014 11:50:01 PM CEST, Key ID 6a2faea2352c64e5 Source RPM : php-horde-ingo-3.2.0-1.el7.src.rpm Build Date : Wed 23 Jul 2014 05:17:41 PM CEST Build Host : buildppc-01.phx2.fedoraproject.org Relocations : (not relocatable) Packager : Fedora Project Vendor : Fedora Project URL : http://www.horde.org/apps/ingo Summary : An email filter rules manager Description : Ingo is an email-filter management application. It is fully internationalized, integrated with Horde and the IMP Webmail client, and supports both server-side (Sieve, Procmail, Maildrop) and client-side (IMAP) message filtering. /etc/horde/ingo /etc/horde/ingo/backends.php /etc/horde/ingo/conf.xml /etc/horde/ingo/fields.php /etc/horde/ingo/hooks.php.dist /etc/horde/ingo/prefs.php /etc/httpd/conf.d/php-horde-ingo.conf /usr/bin/ingo-admin-upgrade /usr/bin/ingo-convert-prefs-to-sql /usr/bin/ingo-convert-sql-shares-to-sqlng /usr/bin/ingo-postfix-policyd /usr/share/doc/pear/ingo /usr/share/doc/pear/ingo/CHANGES /usr/share/doc/pear/ingo/CREDITS /usr/share/doc/pear/ingo/INSTALL /usr/share/doc/pear/ingo/LICENSE /usr/share/doc/pear/ingo/README /usr/share/doc/pear/ingo/RELEASE_NOTES /usr/share/doc/pear/ingo/TODO /usr/share/doc/pear/ingo/UPGRADING /usr/share/horde/ingo /usr/share/horde/ingo/basic.php /usr/share/horde/ingo/config /usr/share/horde/ingo/index.php /usr/share/horde/ingo/js /usr/share/horde/ingo/js/blacklist.js /usr/share/horde/ingo/js/filters.js /usr/share/horde/ingo/js/new_folder.js /usr/share/horde/ingo/js/rule.js /usr/share/horde/ingo/js/smartmobile.js /usr/share/horde/ingo/js/whitelist.js /usr/share/horde/ingo/lib /usr/share/horde/ingo/lib/Ajax /usr/share/horde/ingo/lib/Ajax/Application /usr/share/horde/ingo/lib/Ajax/Application.php /usr/share/horde/ingo/lib/Ajax/Application/Filters.php /usr/share/horde/ingo/lib/Ajax/Application/Smartmobile.php /usr/share/horde/ingo/lib/Api.php /usr/share/horde/ingo/lib/Application.php /usr/share/horde/ingo/lib/Basic /usr/share/horde/ingo/lib/Basic/Base.php /usr/share/horde/ingo/lib/Basic/Blacklist.php /usr/share/horde/ingo/lib/Basic/Filters.php /usr/share/horde/ingo/lib/Basic/Forward.php /usr/share/horde/ingo/lib/Basic/Rule.php /usr/share/horde/ingo/lib/Basic/Script.php /usr/share/horde/ingo/lib/Basic/Spam.php /usr/share/horde/ingo/lib/Basic/Vacation.php /usr/share/horde/ingo/lib/Basic/Whitelist.php /usr/share/horde/ingo/lib/Block /usr/share/horde/ingo/lib/Block/Overview.php /usr/share/horde/ingo/lib/Exception /usr/share/horde/ingo/lib/Exception.php /usr/share/horde/ingo/lib/Exception/Pear.php /usr/share/horde/ingo/lib/Factory /usr/share/horde/ingo/lib/Factory/Script.php /usr/share/horde/ingo/lib/Factory/Shares.php /usr/share/horde/ingo/lib/Factory/Storage.php /usr/share/horde/ingo/lib/Factory/Transport.php /usr/share/horde/ingo/lib/Flist.php /usr/share/horde/ingo/lib/Form /usr/share/horde/ingo/lib/Form/Base.php /usr/share/horde/ingo/lib/Form/Forward.php /usr/share/horde/ingo/lib/Form/Spam.php /usr/share/horde/ingo/lib/Form/Type /usr/share/horde/ingo/lib/Form/Type/Longemail.php /usr/share/horde/ingo/lib/Form/Vacation.php /usr/share/horde/ingo/lib/Ingo.php /usr/share/horde/ingo/lib/LoginTasks /usr/share/horde/ingo/lib/LoginTasks/SystemTask /usr/share/horde/ingo/lib/LoginTasks/SystemTask/Upgrade.php /usr/share/horde/ingo/lib/Perms.php /usr/share/horde/ingo/lib/Script /usr/share/horde/ingo/lib/Script/Base.php /usr/share/horde/ingo/lib/Script/Customsql.php /usr/share/horde/ingo/lib/Script/Imap /usr/share/horde/ingo/lib/Script/Imap.php /usr/share/horde/ingo/lib/Script/Imap/Api.php /usr/share/horde/ingo/lib/Script/Imap/Live.php /usr/share/horde/ingo/lib/Script/Imap/Mock.php /usr/share/horde/ingo/lib/Script/Ispconfig /usr/share/horde/ingo/lib/Script/Ispconfig.php /usr/share/horde/ingo/lib/Script/Ispconfig/Vacation.php /usr/share/horde/ingo/lib/Script/Item.php /usr/share/horde/ingo/lib/Script/Maildrop /usr/share/horde/ingo/lib/Script/Maildrop.php /usr/share/horde/ingo/lib/Script/Maildrop/Comment.php /usr/share/horde/ingo/lib/Script/Maildrop/Recipe.php /usr/share/horde/ingo/lib/Script/Maildrop/Variable.php /usr/share/horde/ingo/lib/Script/Procmail /usr/share/horde/ingo/lib/Script/Procmail.php /usr/share/horde/ingo/lib/Script/Procmail/Comment.php /usr/share/horde/ingo/lib/Script/Procmail/Default.php /usr/share/horde/ingo/lib/Script/Procmail/Recipe.php /usr/share/horde/ingo/lib/Script/Procmail/Variable.php /usr/share/horde/ingo/lib/Script/Sieve /usr/share/horde/ingo/lib/Script/Sieve.php /usr/share/horde/ingo/lib/Script/Sieve/Action /usr/share/horde/ingo/lib/Script/Sieve/Action.php /usr/share/horde/ingo/lib/Script/Sieve/Action/Addflag.php /usr/share/horde/ingo/lib/Script/Sieve/Action/Discard.php /usr/share/horde/ingo/lib/Script/Sieve/Action/Fileinto.php /usr/share/horde/ingo/lib/Script/Sieve/Action/Flag.php /usr/share/horde/ingo/lib/Script/Sieve/Action/Keep.php /usr/share/horde/ingo/lib/Script/Sieve/Action/Notify.php /usr/share/horde/ingo/lib/Script/Sieve/Action/Redirect.php /usr/share/horde/ingo/lib/Script/Sieve/Action/Reject.php /usr/share/horde/ingo/lib/Script/Sieve/Action/Removeflag.php /usr/share/horde/ingo/lib/Script/Sieve/Action/Stop.php /usr/share/horde/ingo/lib/Script/Sieve/Action/Vacation.php /usr/share/horde/ingo/lib/Script/Sieve/Comment.php /usr/share/horde/ingo/lib/Script/Sieve/Else.php /usr/share/horde/ingo/lib/Script/Sieve/Elsif.php /usr/share/horde/ingo/lib/Script/Sieve/If.php /usr/share/horde/ingo/lib/Script/Sieve/Require.php /usr/share/horde/ingo/lib/Script/Sieve/Test /usr/share/horde/ingo/lib/Script/Sieve/Test.php /usr/share/horde/ingo/lib/Script/Sieve/Test/Address.php /usr/share/horde/ingo/lib/Script/Sieve/Test/Allof.php /usr/share/horde/ingo/lib/Script/Sieve/Test/Anyof.php /usr/share/horde/ingo/lib/Script/Sieve/Test/Body.php /usr/share/horde/ingo/lib/Script/Sieve/Test/Exists.php /usr/share/horde/ingo/lib/Script/Sieve/Test/False.php /usr/share/horde/ingo/lib/Script/Sieve/Test/Header.php /usr/share/horde/ingo/lib/Script/Sieve/Test/Not.php /usr/share/horde/ingo/lib/Script/Sieve/Test/Relational.php /usr/share/horde/ingo/lib/Script/Sieve/Test/Size.php /usr/share/horde/ingo/lib/Script/Sieve/Test/True.php /usr/share/horde/ingo/lib/Script/String.php /usr/share/horde/ingo/lib/Script/Util.php /usr/share/horde/ingo/lib/Session.php /usr/share/horde/ingo/lib/Smartmobile.php /usr/share/horde/ingo/lib/Storage /usr/share/horde/ingo/lib/Storage.php /usr/share/horde/ingo/lib/Storage/Blacklist.php /usr/share/horde/ingo/lib/Storage/Filters /usr/share/horde/ingo/lib/Storage/Filters.php /usr/share/horde/ingo/lib/Storage/Filters/Sql.php /usr/share/horde/ingo/lib/Storage/Forward.php /usr/share/horde/ingo/lib/Storage/Mock.php /usr/share/horde/ingo/lib/Storage/Prefs.php /usr/share/horde/ingo/lib/Storage/Rule.php /usr/share/horde/ingo/lib/Storage/Spam.php /usr/share/horde/ingo/lib/Storage/Sql.php /usr/share/horde/ingo/lib/Storage/Vacation.php /usr/share/horde/ingo/lib/Storage/VacationTest.php /usr/share/horde/ingo/lib/Storage/Whitelist.php /usr/share/horde/ingo/lib/Test.php /usr/share/horde/ingo/lib/Transport /usr/share/horde/ingo/lib/Transport/Base.php /usr/share/horde/ingo/lib/Transport/Ispconfig.php /usr/share/horde/ingo/lib/Transport/Ldap.php /usr/share/horde/ingo/lib/Transport/Null.php /usr/share/horde/ingo/lib/Transport/Sivtest.php /usr/share/horde/ingo/lib/Transport/Sql.php /usr/share/horde/ingo/lib/Transport/Timsieved.php /usr/share/horde/ingo/lib/Transport/Vfs.php /usr/share/horde/ingo/lib/Ui /usr/share/horde/ingo/lib/Ui/VarRenderer /usr/share/horde/ingo/lib/Ui/VarRenderer/Ingo.php /usr/share/horde/ingo/locale /usr/share/horde/ingo/locale/ca /usr/share/horde/ingo/locale/ca/LC_MESSAGES /usr/share/horde/ingo/locale/ca/LC_MESSAGES/ingo.mo /usr/share/horde/ingo/locale/ca/help.xml /usr/share/horde/ingo/locale/cs /usr/share/horde/ingo/locale/cs/LC_MESSAGES /usr/share/horde/ingo/locale/cs/LC_MESSAGES/ingo.mo /usr/share/horde/ingo/locale/da /usr/share/horde/ingo/locale/da/LC_MESSAGES /usr/share/horde/ingo/locale/da/LC_MESSAGES/ingo.mo /usr/share/horde/ingo/locale/de /usr/share/horde/ingo/locale/de/LC_MESSAGES /usr/share/horde/ingo/locale/de/LC_MESSAGES/ingo.mo /usr/share/horde/ingo/locale/de/help.xml /usr/share/horde/ingo/locale/el /usr/share/horde/ingo/locale/el/LC_MESSAGES /usr/share/horde/ingo/locale/el/LC_MESSAGES/ingo.mo /usr/share/horde/ingo/locale/en /usr/share/horde/ingo/locale/en/help.xml /usr/share/horde/ingo/locale/es /usr/share/horde/ingo/locale/es/LC_MESSAGES /usr/share/horde/ingo/locale/es/LC_MESSAGES/ingo.mo /usr/share/horde/ingo/locale/es/help.xml /usr/share/horde/ingo/locale/et /usr/share/horde/ingo/locale/et/LC_MESSAGES /usr/share/horde/ingo/locale/et/LC_MESSAGES/ingo.mo /usr/share/horde/ingo/locale/eu /usr/share/horde/ingo/locale/eu/LC_MESSAGES /usr/share/horde/ingo/locale/eu/LC_MESSAGES/ingo.mo /usr/share/horde/ingo/locale/eu/help.xml /usr/share/horde/ingo/locale/fi /usr/share/horde/ingo/locale/fi/LC_MESSAGES /usr/share/horde/ingo/locale/fi/LC_MESSAGES/ingo.mo /usr/share/horde/ingo/locale/fi/help.xml /usr/share/horde/ingo/locale/fr /usr/share/horde/ingo/locale/fr/LC_MESSAGES /usr/share/horde/ingo/locale/fr/LC_MESSAGES/ingo.mo /usr/share/horde/ingo/locale/fr/help.xml /usr/share/horde/ingo/locale/hr /usr/share/horde/ingo/locale/hr/LC_MESSAGES /usr/share/horde/ingo/locale/hr/LC_MESSAGES/ingo.mo /usr/share/horde/ingo/locale/hr/help.xml /usr/share/horde/ingo/locale/hu /usr/share/horde/ingo/locale/hu/LC_MESSAGES /usr/share/horde/ingo/locale/hu/LC_MESSAGES/ingo.mo /usr/share/horde/ingo/locale/it /usr/share/horde/ingo/locale/it/LC_MESSAGES /usr/share/horde/ingo/locale/it/LC_MESSAGES/ingo.mo /usr/share/horde/ingo/locale/ja /usr/share/horde/ingo/locale/ja/LC_MESSAGES /usr/share/horde/ingo/locale/ja/LC_MESSAGES/ingo.mo /usr/share/horde/ingo/locale/ko /usr/share/horde/ingo/locale/ko/LC_MESSAGES /usr/share/horde/ingo/locale/ko/LC_MESSAGES/ingo.mo /usr/share/horde/ingo/locale/lt /usr/share/horde/ingo/locale/lt/LC_MESSAGES /usr/share/horde/ingo/locale/lt/LC_MESSAGES/ingo.mo /usr/share/horde/ingo/locale/lv /usr/share/horde/ingo/locale/lv/LC_MESSAGES /usr/share/horde/ingo/locale/lv/LC_MESSAGES/ingo.mo /usr/share/horde/ingo/locale/lv/help.xml /usr/share/horde/ingo/locale/nb /usr/share/horde/ingo/locale/nb/LC_MESSAGES /usr/share/horde/ingo/locale/nb/LC_MESSAGES/ingo.mo /usr/share/horde/ingo/locale/nl /usr/share/horde/ingo/locale/nl/LC_MESSAGES /usr/share/horde/ingo/locale/nl/LC_MESSAGES/ingo.mo /usr/share/horde/ingo/locale/pl /usr/share/horde/ingo/locale/pl/LC_MESSAGES /usr/share/horde/ingo/locale/pl/LC_MESSAGES/ingo.mo /usr/share/horde/ingo/locale/pt /usr/share/horde/ingo/locale/pt/LC_MESSAGES /usr/share/horde/ingo/locale/pt/LC_MESSAGES/ingo.mo /usr/share/horde/ingo/locale/pt_BR /usr/share/horde/ingo/locale/pt_BR/LC_MESSAGES /usr/share/horde/ingo/locale/pt_BR/LC_MESSAGES/ingo.mo /usr/share/horde/ingo/locale/ro /usr/share/horde/ingo/locale/ro/LC_MESSAGES /usr/share/horde/ingo/locale/ro/LC_MESSAGES/ingo.mo /usr/share/horde/ingo/locale/ru /usr/share/horde/ingo/locale/ru/LC_MESSAGES /usr/share/horde/ingo/locale/ru/LC_MESSAGES/ingo.mo /usr/share/horde/ingo/locale/sk /usr/share/horde/ingo/locale/sk/LC_MESSAGES /usr/share/horde/ingo/locale/sk/LC_MESSAGES/ingo.mo /usr/share/horde/ingo/locale/sl /usr/share/horde/ingo/locale/sl/LC_MESSAGES /usr/share/horde/ingo/locale/sl/LC_MESSAGES/ingo.mo /usr/share/horde/ingo/locale/sv /usr/share/horde/ingo/locale/sv/LC_MESSAGES /usr/share/horde/ingo/locale/sv/LC_MESSAGES/ingo.mo /usr/share/horde/ingo/locale/tr /usr/share/horde/ingo/locale/tr/LC_MESSAGES /usr/share/horde/ingo/locale/tr/LC_MESSAGES/ingo.mo /usr/share/horde/ingo/locale/uk /usr/share/horde/ingo/locale/uk/LC_MESSAGES /usr/share/horde/ingo/locale/uk/LC_MESSAGES/ingo.mo /usr/share/horde/ingo/locale/zh_CN /usr/share/horde/ingo/locale/zh_CN/LC_MESSAGES /usr/share/horde/ingo/locale/zh_CN/LC_MESSAGES/ingo.mo /usr/share/horde/ingo/locale/zh_TW /usr/share/horde/ingo/locale/zh_TW/LC_MESSAGES /usr/share/horde/ingo/locale/zh_TW/LC_MESSAGES/ingo.mo /usr/share/horde/ingo/migration /usr/share/horde/ingo/migration/1_ingo_base_tables.php /usr/share/horde/ingo/migration/2_ingo_upgrade_autoincrement.php /usr/share/horde/ingo/migration/3_ingo_upgrade_sqlng.php /usr/share/horde/ingo/migration/4_ingo_upgrade_sqlhierarchical.php /usr/share/horde/ingo/migration/5_ingo_upgrade_sqlnghierarchical.php /usr/share/horde/ingo/migration/6_ingo_upgrade_parents.php /usr/share/horde/ingo/smartmobile.php /usr/share/horde/ingo/templates /usr/share/horde/ingo/templates/basic /usr/share/horde/ingo/templates/basic/blacklist /usr/share/horde/ingo/templates/basic/blacklist/blacklist.html.php /usr/share/horde/ingo/templates/basic/filters /usr/share/horde/ingo/templates/basic/filters/filters.html.php /usr/share/horde/ingo/templates/basic/menu /usr/share/horde/ingo/templates/basic/menu/menu.html.php /usr/share/horde/ingo/templates/basic/rule /usr/share/horde/ingo/templates/basic/rule/rule.html.php /usr/share/horde/ingo/templates/basic/script /usr/share/horde/ingo/templates/basic/script/_script.html.php /usr/share/horde/ingo/templates/basic/script/script.html.php /usr/share/horde/ingo/templates/basic/whitelist /usr/share/horde/ingo/templates/basic/whitelist/whitelist.html.php /usr/share/horde/ingo/templates/flist /usr/share/horde/ingo/templates/flist/input.html.php /usr/share/horde/ingo/templates/flist/select.html.php /usr/share/horde/ingo/templates/smartmobile /usr/share/horde/ingo/templates/smartmobile/rule.html.php /usr/share/horde/ingo/templates/smartmobile/rules.html.php /usr/share/horde/ingo/themes /usr/share/horde/ingo/themes/default /usr/share/horde/ingo/themes/default/block /usr/share/horde/ingo/themes/default/block/screen.css /usr/share/horde/ingo/themes/default/graphics /usr/share/horde/ingo/themes/default/graphics/blacklist.png /usr/share/horde/ingo/themes/default/graphics/copy.png /usr/share/horde/ingo/themes/default/graphics/disable.png /usr/share/horde/ingo/themes/default/graphics/enable.png /usr/share/horde/ingo/themes/default/graphics/favicon.ico /usr/share/horde/ingo/themes/default/graphics/forward.png /usr/share/horde/ingo/themes/default/graphics/ingo.png /usr/share/horde/ingo/themes/default/graphics/script.png /usr/share/horde/ingo/themes/default/graphics/spam.png /usr/share/horde/ingo/themes/default/graphics/vacation.png /usr/share/horde/ingo/themes/default/graphics/whitelist.png /usr/share/horde/ingo/themes/default/screen.css /usr/share/horde/ingo/themes/default/smartmobile /usr/share/horde/ingo/themes/default/smartmobile/screen.css /usr/share/tests/pear/ingo /usr/share/tests/pear/ingo/Ingo /usr/share/tests/pear/ingo/Ingo/AllTests.php /usr/share/tests/pear/ingo/Ingo/Autoload.php /usr/share/tests/pear/ingo/Ingo/Unit /usr/share/tests/pear/ingo/Ingo/Unit/MaildropTest.php /usr/share/tests/pear/ingo/Ingo/Unit/ProcmailTest.php /usr/share/tests/pear/ingo/Ingo/Unit/ScriptTest.php /usr/share/tests/pear/ingo/Ingo/Unit/SieveTest.php /usr/share/tests/pear/ingo/Ingo/Unit/TestBase.php /usr/share/tests/pear/ingo/Ingo/bootstrap.php /usr/share/tests/pear/ingo/Ingo/fixtures /usr/share/tests/pear/ingo/Ingo/fixtures/from_spammer /usr/share/tests/pear/ingo/Ingo/fixtures/not_from_spammer /usr/share/tests/pear/ingo/Ingo/phpunit.xml /var/lib/pear/pkgxml/php-horde-ingo.xml
Konfiguration des Backend-/IMAP-Server
Neben der Konfiguration der Anwendung selbst, müssen wir der Anwendung Ingo auch noch mitteilen, wie es sich zum MDA1) also unserem IMAP-Server verbinden soll.
Die mitgelieferte Konfigurationsdatei backends.php lassen wir unangetastet. Die Konfiguration nehmen wir über die lokale Kopie backends.local.php vor.
# cp -a /usr/share/horde/ingo/config/backends.php /usr/share/horde/ingo/config/backends.local.php
Als erstes deaktivieren wir den ersten Standardeintrag und ergänzen dann den Eintrag für die Anbindung an unseren Dovecot-IMAP-Server.
# vim /usr/share/horde/ingo/config/backends.local.php
- /usr/share/horde/ingo/config/backends.local.php
<?php /** * Ingo works purely on a preferred mechanism for server selection. There are * a number of properties that you can set for each backend: * * IMPORTANT: DO NOT EDIT THIS FILE! * Local overrides MUST be placed in backends.local.php or backends.d/. * If the 'vhosts' setting has been enabled in Horde's configuration, you can * use backends-servername.php. * * Example configuration file that enables the Sieve backend in favor of the * IMAP backend: * * <?php * $backends['imap']['disabled'] = true; * $backends['sieve']['disabled'] = false; * * Example configuration to use a Dovecot Managesieve backend on a different * host: * * <?php * $backends['imap']['disabled'] = true; * $backends['sieve']['disabled'] = false; * $backends['sieve']['transport'][Ingo::RULE_ALL]['params']['hostspec'] = 'sieve.example.com'; * $backends['sieve']['script'][Ingo::RULE_ALL]['params']['utf8'] = true; * * Properties that can be set for each server: * * disabled: (boolean) If true, the config entry is disabled. * * preferred: (string) This is the field that is used to choose which server * is used. The value for this field may be a single string or an * array of strings containing the hostnames to use with this * server. * * script: (array) The type of script drivers this server uses. Different * drivers can be specified for different filter rules. The following * rules can be set as keys: Ingo::RULE_FILTER, Ingo::RULE_BLACKLIST, * Ingo::RULE_WHITELIST, Ingo::RULE_VACATION, Ingo::RULE_FORWARD, * Ingo::RULE_SPAM, and finally Ingo::RULE_ALL as a catch-all key for * any rules not further specified. * 'params' is an array containing any additional information that the * script driver needs. See examples below for further details. * Valid options for 'driver' are: * - customsql: Custom SQL queries (only for vacation notices). * - imap: IMAP client side filtering (POP3 servers NOT supported). * - ispconfig: ISPConfig SOAP Server (only for vacation notices). * - maildrop: Maildrop scripts. * - procmail: Procmail scripts. * - sieve: Sieve scripts. * * shares: (boolean) Some transport drivers (timsieved, vfs, ispconfig) support * sharing filter rules with other users. Users can then configure * filters for each other if they give them permissions to do so. If * you want to enable this feature, you need to set this parameter to * true. Transport backend authentication needs to be configured, so * that it allows to upload other users' rules, e.g. by granting FTP * access to .procmail files, or using an administrative user for * Sieve. * * transport: (array) The transport drivers to use to store the scripts on the * backend server. Different drivers can be specified for different * filter rules. The following rules can be set as keys: * Ingo::RULE_FILTER, Ingo::RULE_BLACKLIST, Ingo::RULE_WHITELIST, * Ingo::RULE_VACATION, Ingo::RULE_FORWARD, Ingo::RULE_SPAM, and * finally Ingo::RULE_ALL as a catch-all key for any rules not * further specified. * 'params' is an array containing any additional information that * the transport class needs. See examples below for further details. * Valid options for 'driver' are: * - ispconfig: ISPConfig SOAP server (only for vacation notices). * - ldap: LDAP server. * - null: No backend server (i.e. for script drivers, such as 'imap', * that does not use scripts). * - sql: Database server (only for vacation notices). * - timsieved: Timsieved (managesieve) server. * - vfs: Use Horde VFS. * * NOTE: By default, the transport driver will use Horde credentials to * authenticate to the backend. If a different username/password is * needed, use the 'transport_auth' hook (see hooks.php) to define * these values. */ /* IMAP Example */ $backends['imap'] = array( // ENABLED by default // Django : 2014-09-12 // default: 'disabled' => false, 'disabled' => true, 'transport' => array( Ingo::RULE_ALL => array( 'driver' => 'null', 'params' => array(), ), ), 'script' => array( Ingo::RULE_ALL => array( 'driver' => 'imap', 'params' => array(), ), ), 'shares' => false ); /* Maildrop Example */ $backends['maildrop'] = array( // Disabled by default 'disabled' => true, 'transport' => array( Ingo::RULE_ALL => array( 'driver' => 'vfs', 'params' => array( // Hostname of the VFS server 'hostspec' => 'localhost', // Name of the maildrop config file to write 'filename' => '.mailfilter', // The path to the .mailfilter filter file, defaults to the // filters' owner's home directory. // You can use the following variables: // %u = name of the filters' owner // %d = domain name of the filters' owner // %U = the transport 'username' // Example: // '/data/maildrop/filters/%d/%u' // This would be translated into: // '/data/maildrop/filters/<filter_owners_domainname>/<filter_owners_username>/.mailfilter' // 'vfs_path' => '/path/to/maildrop', // VFS: FTP example // The VFS driver to use 'vfstype' => 'ftp', // Port of the VFS server 'port' => 21, // Specify permissions for uploaded files if necessary: // 'file_perms' => '0640', // VFS: SSH2 example // The VFS driver to use // 'vfstype' => 'ssh2', // Port of the VFS server // 'port' => 22, ) ), ), 'script' => array( Ingo::RULE_ALL => array( 'driver' => 'maildrop', 'params' => array( // Any arguments passed to the mailbot command. The -N flag (to // no include the original, quoted message content has been // added with Maildrop 2.5.1/Courier 0.65.1. 'mailbotargs' => '-N', // What path style does the IMAP server use ['mbox'|'maildir']? 'path_style' => 'mbox', // Strip 'INBOX.' from the beginning of folder names in // generated scripts? 'strip_inbox' => false, // An array of variables to append to every generated script. // Use if you need to set up specific environment variables. 'variables' => array( // Example for the $PATH variable // 'PATH' => '/usr/bin' ) ), ), ), 'shares' => false ); /* Procmail Example */ $backends['procmail'] = array( // Disabled by default 'disabled' => true, 'transport' => array( Ingo::RULE_ALL => array( 'driver' => 'vfs', 'params' => array( // Hostname of the VFS server 'hostspec' => 'localhost', // Name of the procmail config file to write 'filename' => '.procmailrc', // The path to the .procmailrc filter file, defaults to the // filters' owner's home directory. // You can use the following variables: // %u = name of the filters' owner // %U = the 'username' from above // Example: // '/data/procmail/filters/%u' // This would be translated into: // '/data/procmail/filters/<filter_owners_username>/.procmailrc' // 'vfs_path' => '/path/to/procmail', // If procmail needs an external command for mail delivery, you // can specify it below. You can also set a prefix for the // mailbox name // eg. for /usr/local/sbin/dmail +INBOX // 'delivery_agent' => '/usr/local/sbin/dmail', // 'delivery_mailbox_prefix' => '+', // if the GNU utilities cannot be found in the path // or have different names, you can specify their location below // 'date' => '/opt/csw/bin/gdate', // 'echo' => '/opt/csw/bin/gecho', // 'ls' => '/opt/csw/bin/gls', // VFS: FTP example // The VFS driver to use 'vfstype' => 'ftp', // Port of the VFS server 'port' => 21, // VFS: SSH2 example // The VFS driver to use // 'vfstype' => 'ssh2', // Port of the VFS server // 'port' => 22, ) ), ), 'script' => array( Ingo::RULE_ALL => array( 'driver' => 'procmail', 'params' => array( // What path style does the IMAP server use ['mbox'|'maildir']? 'path_style' => 'mbox', // An array of variables to append to every generated script. // Use if you need to set up specific environment variables. 'variables' => array( // The $DEFAULT variable. If using Maildir, Ingo will use // this value as the default unless you explicitly // configure otherwise. // 'DEFAULT' => '$HOME/Maildir/', // The $DEFAULT variable. If using Maildir, Ingo will use // this value as the default unless you explicitly // configure otherwise. // 'MAILDIR' => '$HOME/Maildir', // Example for the $PATH variable // 'PATH' => '/usr/bin', // Example for the $VACATION_DIR variable (used to store // vacation files) // 'VACATION_DIR' => '$HOME', ), // If you need procmail to be called from .forward in the // user's home directory, set the file and the content below: // 'forward_file' => '.forward', // 'forward_string' => '"|/usr/local/bin/procmail"', ), ), ), 'shares' => false ); /* Sieve Example */ $backends['sieve'] = array( // Disabled by default // Django : 2014-09-12 // default: 'disabled' => true, 'disabled' => false, 'transport' => array( Ingo::RULE_ALL => array( 'driver' => 'timsieved', 'params' => array( // Hostname of the timsieved server // Django : 2014-09-12 // default: 'hostspec' => 'localhost', 'hostspec' => 'imap.dmz.nausch.org', // Login type of the server 'logintype' => 'PLAIN', // Enable/disable TLS encryption 'usetls' => true, // Port number of the timsieved server 'port' => 4190, // Name of the sieve script 'scriptname' => 'ingo', // Enable debugging. The sieve protocol communication is logged // with the DEBUG level. // Django : 2014-09-12 // default: 'debug' => false, 'debug' => true, ), ), ), 'script' => array( Ingo::RULE_ALL => array( 'driver' => 'sieve', 'params' => array( // If true, use the deprecated 'imapflags' extension to set // flag status instead of the newer, standardized // 'imap4flags'. // 'imapflags' => true, // If true, use the deprecated 'notify' extension instead of // the newer, standardized 'enotify'. // 'notify' => true, // If using Dovecot or any other Sieve implementation that // requires folder names to be UTF-8 encoded, set this // parameter to true. // Django : 2014-09-12 // default: 'utf8' => false, 'utf8' => true, ), ), ), 'shares' => false ); /* sivtest Example */ $backends['sivtest'] = array( // Disabled by default 'disabled' => true, 'transport' => array( Ingo::RULE_ALL => array( 'driver' => 'sivtest', 'params' => array( // Hostname of the timsieved server 'hostspec' => 'localhost', // Login type of the server 'logintype' => 'GSSAPI', // Enable/disable TLS encryption 'usetls' => true, // Port number of the timsieved server 'port' => 4190, // Name of the sieve script 'scriptname' => 'ingo', // Location of sivtest 'command' => '/usr/bin/sivtest', // name of the socket we're using 'socket' => Horde::getTempDir() . '/sivtest.' . uniqid(mt_rand()) . '.sock', ), ), ), 'script' => array( Ingo::RULE_ALL => array( 'driver' => 'sieve', 'params' => array(), ), ), 'shares' => false, ); /* Sun ONE/JES Example (LDAP/Sieve) */ $backends['ldapsieve'] = array( // Disabled by default 'disabled' => true, 'transport' => array( Ingo::RULE_ALL => array( 'driver' => 'ldap', 'params' => array( // Hostname of the ldap server 'hostspec' => 'localhost', // Port number of the timsieved server 'port' => 389, // LDAP Protocol Version (default = 2). 3 is required for TLS. 'version' => 3, // Whether or not to use TLS. If using TLS, you MUST configure // OpenLDAP (either /etc/ldap.conf or /etc/ldap/ldap.conf) with // the CA certificate which signed the certificate of the // server to which you are connecting. e.g.: // // TLS_CACERT /usr/share/ca-certificates/mozilla/Equifax_Secure_CA.crt // // You MAY have problems if you are using TLS and your server // is configured to make random referrals, since some OpenLDAP // libraries appear to check the certificate against the // original domain name, and not the referred-to domain. This // can be worked around by putting the following directive in // the ldap.conf: // // TLS_REQCERT never 'tls' => true, // Bind DN (for bind and script distinguished names, %u is // replaced with username, and %d is replaced with the internet // domain components (e.g. "dc=example, dc=com") if available). 'bind_dn' => 'cn=ingo, ou=applications, dc=example, dc=com', // Bind password. If not provided, user's password is used // (useful when bind_dn contains %u). 'bind_password' => 'secret', // How to find user object. 'script_base' => 'ou=People, dc=example, dc=com', 'script_filter' => '(uid=%u)', // Attribute script is stored in. Will not touch non-Ingo // scripts. 'script_attribute' => 'mailSieveRuleSource' ), ), ), 'script' => array( Ingo::RULE_ALL => array( 'driver' => 'sieve', 'params' => array() ), ), ); /* ISPConfig Example */ $backends['ispconfig'] = array( 'disabled' => true, 'transport' => array( Ingo::RULE_ALL => array( 'driver' => 'ispconfig', // enabling transport_auth() in hooks.php is likely to be required 'params' => array( 'soap_uri' => 'http://ispconfig-webinterface.example.com:8080/remote/', // This user must be created in the ISPConfig webinterface // under System -> Remote Users. The required permissions // ("functions") is "mail user functions" only. 'soap_user' => 'horde', 'soap_pass' => 'secret' ), ), ), 'script' => array( Ingo::RULE_ALL => array( 'driver' => 'ispconfig', 'params' => array() ), ), 'shares' => false ); /* Custom SQL Example */ $backends['customsql'] = array( 'disabled' => true, 'transport' => array( Ingo::RULE_ALL => array( 'driver' => 'sql', 'params' => $GLOBALS['conf']['sql'], ), ), 'script' => array( Ingo::RULE_ALL => array( 'driver' => 'customsql', 'params' => array( 'vacation_unset' => 'UPDATE vacation SET active = 0 WHERE user = %u', 'vacation_set' => 'REPLACE INTO vacation (active, subject, message, user) VALUES (1, %s, %m, %u)' ), ), ), 'shares' => false ); Da die **[[centos:mail_c7:horde_3#horde_framework|Authentifizierung]]** mit **Username = eMail-Adresse** und **Passwort** gegen die mySQL-Datenbank erfolgt, müssen wir dien Umstand noch über die Datei **hooks.php** unserer Installation mitgeben. <WRAP round tip>Die mitgelieferte Konfigurationsdatei **backends.php** lassen wir unangetastet. Die Konfiguration nehmen wir über die lokale Kopie **backends.local.php** vor. <code> cp -a /usr/share/horde/ingo/config/hooks.php.dist /usr/share/horde/ingo/config/hooks.local.php</code> </WRAP> # vim /usr/share/horde/ingo/config/hooks.local.php <file php /usr/share/horde/ingo/config/hooks.local.php><?php /** * Ingo Hooks configuration file. * * THE HOOKS PROVIDED IN THIS FILE ARE EXAMPLES ONLY. DO NOT ENABLE THEM * BLINDLY IF YOU DO NOT KNOW WHAT YOU ARE DOING. YOU HAVE TO CUSTOMIZE THEM * TO MATCH YOUR SPECIFIC NEEDS AND SYSTEM ENVIRONMENT. * * For more information please see the horde/config/hooks.php.dist file. * * $Id: fdf1f95f36a8b0c339f61ac27badcdce094a0388 $ */ class Ingo_Hooks { /** * Returns the username/password needed to connect to the transport * backend. * * @param string $driver The driver name (array key from backends.php). * * @return mixed If non-array, uses Horde authentication credentials (DEFAULT). Otherwise, an array with the following keys * (non-existent keys will use default values): * - euser: (string; SIEVE ONLY) For the sieve driver, the effective * user to use. * - password: (string) Password. * - username: (string) User name. */ // Django : 2014-09-12 // default: // public function transport_auth($driver) // // { // // switch ($driver) { // // case 'foo': public function transport_auth($driver) { switch ($driver) { case 'timsieved': // public function transport_auth($driver) // { // switch ($driver) { // case 'foo': // // Example #1: Use full Horde username for password. // return array( // 'username' => $GLOBALS['registry']->getAuth(null) // ); // // Django : 2014-09-12 // default: // // Example #2: Use IMP password/username. // // $ob = $GLOBALS['registry']->call('mail/imapOb'); // // return array( // // 'password' => $ob->getParam('password'), // // 'username' => $ob->getParam('username') // // ); // // } // Example #2: Use IMP password/username. $ob = $GLOBALS['registry']->call('mail/imapOb'); return array( 'password' => $ob->getParam('password'), 'username' => $ob->getParam('username') ); } // // // DEFAULT: Use hordeauth (identical to not defining hook at all). // return true; // } /** * Set the default addresses used for the vacation module. * * @param string $user The username. * @param array $value The default/current value. * * @return array A list of vacation addresses. */ // public function vacation_addresses($user = null, $value = null) // { // // Example #1: User has 2 vacation addresses. // return array($user . '@example.com', $user . '@foobar.com'); // // // Example #2: Keep user-supplied values, return defaults only // return is_array($value) && count($array) // ? $value // : array($user . '@example.com', $user . '@foobar.com'); // } }
Konfiguration über die WEB-GUI
Die Konfiguration der Applikation Ingo erfolgt dann über die GUI des Web-Frameworks. Dazu rufen wir unseren angelegten VHOST im Webbrowser auf.
$ firefox https://horde.sec-mail.guru/admin/config/