Получение адреса электронной почты по умолчанию в Mac OS X - PullRequest
2 голосов
/ 12 мая 2011

Я пытаюсь получить адрес электронной почты текущего пользователя (если есть), чтобы создать настраиваемое сообщение «свяжитесь с нами».

Код указан на C. Я пытался использовать AddressBook.frameworkно я не могу найти способ получить адрес электронной почты.

Кто-нибудь знает, как получить адрес электронной почты?
Спасибо.

1 Ответ

4 голосов
/ 12 мая 2011

Использование Адресная книга C Framework :

#include <AddressBook/AddressBook.h>

Чтобы получить все адреса электронной почты:

ABAddressBookRef addressbook = ABGetSharedAddressBook();
ABPersonRef user = ABGetMe(addressbook);
ABMultiValueRef emails = ABRecordCopyValue(user, kABEmailProperty);

if(emails)
{
    if(ABMultiValueCount(emails) != 0)
    {
        for(int i=0;i<ABMultiValueCount(emails);i++)
        {
            CFStringRef email = ABMultiValueCopyValueAtIndex(emails, i);

            // Do something with current email string

            CFRelease(email);
        }
    }

    CFRelease(emails);
}

Или, чтобы проверитьадрес электронной почты, помеченный как основной:

ABAddressBookRef addressbook = ABGetSharedAddressBook();
ABPersonRef user = ABGetMe(addressbook);
ABMultiValueRef emails = ABRecordCopyValue(user, kABEmailProperty);

if(emails)
{
    if(ABMultiValueCount(emails) != 0)
    {

        CFStringRef primaryIdentifier = ABMultiValueCopyPrimaryIdentifier(emails);

        for(int i=0;i<ABMultiValueCount(emails);i++)
        {
            CFStringRef currentIdentifier = ABMultiValueCopyIdentifierAtIndex(emails, i);

            if(currentIdentifier==primaryIdentifier)
            {
                CFStringRef email = ABMultiValueCopyValueAtIndex(emails, i);

                // Do something with primary email string

                CFRelease(email);
            }

            CFRelease(currentIdentifier);
        }

        CFRelease(primaryIdentifier);
    }

    CFRelease(emails);
}

Не все потенциальные ошибки обрабатываются в приведенном выше коде, например, ABGetMe() может вернуть NULL, если пользователь не создал запись адресной книги длясама.

...