[horde] Multiple Email Addresses To / From Activesync iOS Client - solution

Michael J Rubinsky mrubinsk at horde.org
Tue Jul 19 15:40:29 UTC 2011


Quoting Simon Wilson <simon at simonandkate.net>:

> OK, i have multiple email addresses working ActiveSync iPad -> Turba  
> -> SQL address book ok, just want to see if there is a better way.  
> Anyone else doing this out there?
>
> iOS stores up to three email addresses per contact - email1address,  
> email2address, and email3address.
>
> Initially googling and looking on bugs.horde.org seemed to point to  
> using 'emails' instead of 'email' from attributes.php and then  
> mapping 'emails' => 'object_email' in backends.local.php, but the  
> activesync driver expects to find 'email':
>
> if (!$message->isGhosted('email1address')) {
>             $hash['email'] =  
> Horde_Icalendar_Vcard::getBareEmail($message->email1address);
>
> The only difference between 'email' and 'emails' that I could see  
> was that one had allow_multi = true. So I tried setting 'email' to  
> allow_multi. But even with that set, you can't enter multiple email  
> addresses in Turba (form validation fails).
>
> A comment from here - http://bugs.horde.org/ticket/2660 - seemed to  
> indicate setting multiple email attributes all to object_email in  
> SQL, but that doesn't work, only the first one is set, the rest just  
> repeat it.
>
> Looking through the activesync driver in Horde, it shows some SyncML options:
>
>        if (!$message->isGhosted('email2address')) {
>             $hash['homeEmail'] =  
> Horde_Icalendar_Vcard::getBareEmail($message->email2address);
>         }
>         if (!$message->isGhosted('email3address')) {
>             $hash['workEmail'] =  
> Horde_Icalendar_Vcard::getBareEmail($message->email3address);
>
> mapping email2address and email3address to homeEmail and workEmail  
> respectively.

These have nothing to do with SyncML. They are mappings from  
ActiveSync properties to the Horde style attribute names.

>
> These are defined in attributes.php like this:
>
> $attributes['workEmail'] = array(
>     'label' => _("Work Email"),
>     'type' => 'email',
>     'required' => false,
>     'params' => array('allow_multi' => false, 'strip_domain' =>  
> false, 'link_compose' => true)
> );
> $attributes['homeEmail'] = array(
>     'label' => _("Home Email"),
>     'type' => 'email',
>     'required' => false,
>     'params' => array('allow_multi' => false, 'strip_domain' =>  
> false, 'link_compose' => true)
> );
>
> What I have done is therefore in attributes.local.php modify those  
> slightly like this:
>
> $attributes['workEmail'] = array(
>     'label' => _("Email 3"),
>     'type' => 'email',
>     'required' => false,
>     'params' => array('allow_multi' => false, 'strip_domain' =>  
> false, 'link_compose' => true)
> );
>
> /* Mapped to activeSync Email2Address */
> $attributes['homeEmail'] = array(
>     'label' => _("Email 2"),
>     'type' => 'email',
>     'required' => false,
>     'params' => array('allow_multi' => false, 'strip_domain' =>  
> false, 'link_compose' => true)
> );
>
> And in backends.local.php I have:
>
>         'email' => 'object_email',
>         'homeEmail' => 'object_email2',
>         'workEmail' => 'object_email3',
>
> My "Tabs" are defined as:
>
>         _("Communications") => array('email', 'homeEmail',  
> 'workEmail', 'homePhone', 'workPhone',
>                                      'cellPhone', 'fax', 'pager'),
>
> And thus display as "Email", "Email 2", and "Email 3".
>
> In the SQL turba_objects table i created two new fields  
> object_email2 and object_email3.
>
> I also edited the search array in backends.local.php:
>
>     'search' => array(
>         'name',
>         'email',
>  	 'homeEmail',
> 	 'workEmail'
>     ),
>
> Now that all seems to work fine, syncs OK, and works in Turba.
>
> If anyone has any other better ways, please can you advise.


This is the recommended way of doing this...and is what I've posted a  
number of times to the mailing list. The only thing I would point out  
is that changing the label is not necessary, but will not affect  
anything else. Just be aware that some devices may label this  
differently.


-- 
mike

The Horde Project (www.horde.org)
mrubinsk at horde.org



More information about the horde mailing list