get_email_addresses_hook

March 2, 2009

SmartSieve is something one can use to set up server-based mail filtering, including vacation messages. It has a nice feature which enables it to fetch any list of email addresses for a user account. The default hook for this uses LDAP, but unfortunately does not work with OS X server. Here’s a modified get_email_addrsesses_hook that works on both 10.4 and 10.5:

function getEmailAddresses()
{
  $server = 'localhost';
  $baseDn = 'cn=users,dc=pretendco,dc=com';
  $addresses = array();

  if (extension_loaded('ldap')) {
      $ds = ldap_connect($server);
      // To avoid protocol error
      ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3);
      if ($ds) {
        // Anonymous bind.
        $r = ldap_bind($ds);
        $sr = ldap_search($ds, $baseDn,
          "uid=".$_SESSION['smartsieve']['authz'], array('mail'));
        $entries = ldap_get_entries($ds, $sr);
        // Strip count
        array_shift($entries[0]['mail']);
        $addresses = $entries[0]['mail'];
        ldap_close($ds);
      }
  }

  return $addresses;

}

And just to clarify, the list of addresses comes from what’s defined under WGM > User > Info > Email.