2 Stimmen

Abrufen der Standard-E-Mail-Adresse unter Mac OS X

Ich versuche, die E-Mail des aktuellen Benutzers (falls vorhanden) zu erhalten, damit ich eine angepasste "Kontakt"-Nachricht erstellen kann.

Der Code ist in C. Ich habe versucht, mit AddressBook.framework, aber ich kann nicht finden, einen Weg, um die E-Mail-Adresse zu erhalten.

Weiß jemand, wie man an die E-Mail-Adresse kommt?
Ich danke Ihnen.

4voto

Hagelin Punkte 15971

Verwendung von Adressbuch C Rahmen :

#include <AddressBook/AddressBook.h>

Um alle E-Mail-Adressen zu erhalten:

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);
}

Oder, um die als primär markierte E-Mail-Adresse zu überprüfen:

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);
}

Im obigen Code werden nicht alle möglichen Fehler behandelt, z. B. ABGetMe() könnte zurückkehren NULL wenn der Benutzer noch keinen Adressbucheintrag für sich selbst erstellt hat.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X