Tine 2.0 handles additional account information by a special EMailUser-Backend which can get and set various mail related attributes of an user account. This especial handy for LDAP user databases. simpleMail is made to address indivdual configurations. E.g. postfix can get mail attributes from outside user's DN.
Imagine you have stored your users like this:
The user admin has stored its account at uid=admin,ou=people,ou=tine20,dc=x,dc=de, but the according smtp settings are stored cn=admin,ou=routing,ou=mailConfig,dc=x,dc=de.
This can be useful if your account data oder mail settings are edited not only by Tine 2.0. Other programs (in history Tine 2.0 did so!) may not respect all attributes and delete them.
simpleMail helps you if your LDAP settings are anything different than Tine 2.0 would store them.
Johannes Nohl Berlin, 2015-10-18 ## Tine 2.0 simpleMail SMTP-Backend (LDAP) ## ABSTRACT When storing additional mail attributes outside user's Distinguished Name (DN) you can link to user's LDAP branch and mail transfer agents like Postfix will follow the target DN provided as i.e. “special_result_attribute”. With Tine 2.0 those external mail config is readable and - as required - writable through the simpleMail backend for SMTP. You may use the provided LDAP scheme or configure all by yourself (e.g. how to link mail addresses to user's DN). PURPOSE AND OVERVIEW Tine 2.0 can handle user specific smtp settings in LDAP directories; additional information for *mail aliases*, *mail forwarding addresses* and an option to *forward only* (no local delivery) can be managed within the Admin module. While already existing backends for SMTP were limited to information stored as attributes in user's LDAP-node (DN:uid), simpleMail can read attributes from DNs anywhere else in the LDAP-tree. In addition simpleMail can write DNs below a predefined path outside the uid entry. To keep the relationship between simplMail's DN and user's account settings one attribute (to be named) holds the DN of the user's node. Mail transfer agents will follow this attribute to account settings in LDAP. Additionally the linked mail information is needed for Felamimail's “out of office” assistant which will respond only to known aliases. LIMITATION: You need to store Tine 2.0's accounts and your mail settings in the same LDAP (probably on different subtrees) - the backend uses your already existing connection. CONFIGURATION Currently there's no possibility to use GUI, therefore you need to configure simpleMail backend manually. You may select the pattern “simpleMail” within Tine 2.0 Setup (setup.php) but to make it fly you need to add options to the configuration key “smtp” which is an javascript object (json) and can be accessed by the command line interface (cli) or directly in SQL-DB table tine20_config. simpleMail settings are stored within the json being themselves such an json object: “smtp” => { [ SMTP SETTINGS like host, port, etc. ], "active":true, "backend":"ldap_simplemail", "simplemail":{ [ YOUR simpleMail CONFIG GOES HERE] } } To see current SMTP settings from cli: #> php setup.php --getconfig -- configkey=smtp To set new SMTP config by cli: #> php setup.php --setconfig -- configkey=smtp configvalue='{[ JSON ]}' OPTIONS - All available options for JSON [madatory] base: Search base in LDAP for mail information (default search in subtree) and default branch to store new entries (see storage_base) [optional] scope: 1 = (subtree; default), 2 = (one level), 3 (base entry). [optional] skeleton: Attributes used as search filter for user related DNs and at the same time a template for newly created DNs. You must not provide objectClass top which is added programmatically. The attribute holding the wildcard %s represents the link to user's DN ("special_result_attribute"). Default: "skeleton":{ "objectclass":["simplemail","mailrouting"], "mailUserDN":"%s" }, Note: The wildcard %s will be substituted at runtime (by inserting user's DN) [optional] readonly: On saving changes request will be ignored silently. Default is false. [optional] storage_base: Base in LDAP-tree for writing new entries, defaults to base (see above). If given and different to base new config-DNs will be stored beneath. [optional] storage_rdn: Name giving attribute for newly created entries - relative DN (RDN). Default: "storage_rdn:":"cn=%u{tine20}", Note: The wildcard %u will be filled at runtime (by inserting user's account_name) [optional] property_mapping: If you use different LDAP attributes than below you need to provide a parameterized mapping table. Default: "property_mapping":{ "emailAliases":"mailalternateaddress", "emailForwards":"mailforwardingaddress", "emailForwardOnly":"maildiscard:boolean" }, Note: You can define a property (attribute) as on/off-option (instead of a set of attributes) by adding :boolean to its LDAP equivalent. EXAMPLES Below you may find three common but minimal configurations (only the backend specific part of json is shown) 1) Get information readonly from anywhere below a specific part of the LDAP-tree (default entries here match the LDAP scheme “simpleMail”): "simplemail":{ "base":"ou=mail,ou=config,dc=example,dc=com", "readonly":true } Hint: If you manage mail settings aside Tine 2.0 this is how you get your aliases known to Felamimail. 2) Read entries from subtree and write them below specified place, provide the necessary information about your DN structure needed for proper searches and for saving new. Be aware of the mailUserDN attribute which holds the link to user's DN: "simplemail":{ "base":"ou=mail,ou=config,dc=example,dc=com", "skeleton":{ "objectclass":["simplemail","mailrouting"], "mailUserDN":"%s" } } 3) Non-simpleMail-schema exemplified: Tine 2.0 serves the primary domain all other mail options are set by a fantasy-admin-tool... "simplemail":{ "base":"ou=postfixAdmin,dc=example,dc=com", "scope":1, "skeleton":{ "objectclass":["postfixAdmin"], "tine20userDN":"%s" }, "property_mapping":{ "emailAliases":"virtualMailAccount", "emailForwards":"forwardMail", "emailForwardOnly":"doNotDeliver" }, "storage_base":"ou=userSettings,ou=postfixAdmin,dc=example,dc=com", "storage_rdn:":"cn=mailconfig-%u" } FURTHER READINGS - Postfix' special_result_attribute http://www.postfix.org/ldap_table.5.html - Tine 2.0 cli functions https://wiki.tine20.org/CLI_Functions
attributetype ( 1.3.6.1.4.1.45765.1.2.1 NAME 'mailUserDN' DESC 'Link to entry which holds the user information' EQUALITY distinguishedNameMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.12 SINGLE-VALUE ) attributetype ( 1.3.6.1.4.1.45765.1.2.2 NAME 'mailAlternateAddress' DESC 'Additional address to postbox (mail alias)' EQUALITY caseIgnoreIA5Match SUBSTR caseIgnoreIA5SubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{256} ) attributetype ( 1.3.6.1.4.1.45765.1.2.4 NAME 'mailForwardingAddress' DESC 'Reroute mail (do not discard), keep copy by forwarding to original address again' EQUALITY caseIgnoreIA5Match SUBSTR caseExactSubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{256} ) attributetype ( 1.3.6.1.4.1.45765.1.2.3 NAME 'mailDiscard' DESC 'Do not deliver original mail (not necessary if forwarded before)' EQUALITY booleanMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.7 SINGLE-VALUE ) attributetype ( 1.3.6.1.4.1.45765.1.2.5 NAME 'mailInternalOnly' DESC 'Make given mail address unreachable from outside' EQUALITY booleanMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.7 SINGLE-VALUE ) attributetype ( 1.3.6.1.4.1.45765.1.1.1 NAME 'sharedMailbox' DESC 'Shared cyrus imap boxes' EQUALITY caseIgnoreMatch SUBSTR caseIgnoreSubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{256} ) attributetype ( 1.3.6.1.4.1.45765.1.2.6 NAME 'mailRewritePattern' DESC 'Target for rewrite rule (e.g. pattern will be rewritten to mail attribute)' EQUALITY caseIgnoreIA5Match SUBSTR caseExactSubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{256} ) objectclass ( 1.3.6.1.4.1.45765.1.0.0 NAME 'simpleMail' DESC 'Attributes with prefix mail to store MTA related settings' SUP top STRUCTURAL MUST cn ) objectclass ( 1.3.6.1.4.1.45765.1.1.0 NAME 'mailAccount' DESC 'Link attributes to real accounts for delivery' SUP top AUXILIARY MAY ( uid $ userPassword $ mail $ sharedMailbox ) ) objectclass ( 1.3.6.1.4.1.45765.1.2.0 NAME 'mailRouting' DESC 'Reroute incoming mails' SUP top AUXILIARY MAY ( mailAlternateAddress $ mailDiscard $ mailForwardingAddress $ mailInternalOnly $ mailUserDN $ mailRewritePattern ) )
[coming on request]