# Email Address Public Information

When an email address is [provisioned](https://docs.sudoplatform.com/guides/manage-email-addresses#provision-email-address), matching public and private keys are also generated for encrypting messages addressed to and sent from that address.&#x20;

Clients of the Sudo Platform have the ability to lookup public information for email addresses as a means of verifying that an email address exists and to determine the public key to use to encrypt messages addressed to that email address.

Only email addresses that belong to the same domain(s) for a particular Sudo Platform Email Service configuration may be retrieved, i.e., if configured to use `*@domain-1.com`, a lookup for`foo@domain-1.com` would be performed, whereas `bar@domain-2.com` would fail.

The following table describes the available public information for an email address:

| Data          | Definition                                                                                        |
| ------------- | ------------------------------------------------------------------------------------------------- |
| Email Address | Fully qualified email address of the form \<localPart\@domain>, e.g., `example@sudoplatform.com`. |
| Public Key    | Public key associated with the email address.                                                     |

## Looking Up Email Address Public Information

Public information for email addresses can be retrieved in batches by passing a list of email addresses to the `lookupEmailAddressesPublicInfo` method. This returns a list of `EmailAddressPublicInfo` entries containing `emailAddress` and `publicKey` for each input email address. Items in the result list are returned in the same order as requested.

Failure to return a `EmailAddressPublicInfo` entry for an email address means that either the email address was not found in the system, or it belongs to an unsupported domain. In the event of a partial failure such as this, the result list will contain entries for the success cases only. Failure to retrieve *all* email addresses in a request will result in an empty list.

{% hint style="danger" %}
The maximum number of email addresses provided to the input cannot be more than **50**. Supplying a list larger than this will return a `LimitExceededError`.
{% endhint %}

{% tabs %}
{% tab title="TypeScript" %}

```typescript
// Email addresses to be looked up
const emailAddresses = [
  'email-address-1@domain.com',
  'email-address-2@domain.com',
]

try {
  const input = LookupEmailAddressesPublicInfoInput(
    emailAddresses
  )
  const emailAddressesPublicInfo = await emailClient
    .lookupEmailAddressesPublicInfo(input)
    
  // Assuming `emailAddresses` are valid email addresses and the
  // client shares the same (*@domain.com in this case) network,
  // `emailAddressesPublicInfo` will contain `EmailAddressPublicInfo`
  // objects for each email address, e.g.:
    
  // emailAddressesPublicInfo[0] --> {
  //   emailAddress: 'email-address-1@domain.com',
  //   publicKey: <public key string>
  // }
    
  // emailAddressesPublicInfo[1] --> {
  //   emailAddress: 'email-address-2@domain.com',
  //   publicKey: <public key string>
  // }
} catch (e) {
  // Handle/notify user of errors
}
```

{% endtab %}

{% tab title="Swift" %}

```swift
// Email addresses to be looked up
let emailAddresses = [
    "email-address-1@domain.com",
    "email-address-2@domain.com"
]

try {
    let input = LookupEmailAddressesPublicInfoInput(
        emailAddresses: emailAddresses
    )
    let emailAddressesPublicInfo = await emailClient
        .lookupEmailAddressesPublicInfo(input)
    
    // Assuming `emailAddresses` are valid email addresses and the
    // user shares the same (*@domain.com in this case) network,
    // `emailAddressesPublicInfo` will contain `EmailAddressPublicInfo`
    // objects for each email address, e.g.:
      
    // emailAddressesPublicInfo[0] --> {
    //   emailAddress: 'email-address-1@domain.com',
    //   publicKey: <public key string>
    // }
      
    // emailAddressesPublicInfo[1] --> {
    //   emailAddress: 'email-address-2@domain.com',
    //   publicKey: <public key string>
    // }
} catch {
    // Handle/notify user of errors
}
```

{% endtab %}

{% tab title="Kotlin" %}

```kotlin
// Email addresses to be looked up
val addresses = listOf(
    "email-address-1@domain.com",
    "email-address-2@domain.com"
)

launch {
    try {
        val input = LookupEmailAddressesPublicInfoInput(
            emailAddresses = emailAddresses
        )
        val emailAddressesPublicInfo = withContext(Dispatchers.IO) {
            emailClient.lookupEmailAddressesPublicInfo(input)
        }
        
        // If `emailAddresses` are valid email addresses and the
        // user shares the same (*@domain.com in this case) network,
        // `emailAddressesPublicInfo` will contain `EmailAddressPublicInfo`
        // objects for each email address, e.g.:
          
        // emailAddressesPublicInfo[0] --> {
        //   emailAddress: 'email-address-1@domain.com',
        //   publicKey: <public key string>
        // }
          
        // emailAddressesPublicInfo[1] --> {
        //   emailAddress: 'email-address-2@domain.com',
        //   publicKey: <public key string>
        // }
    } catch (e: EmailAddressException) {
        // Handle/notify user of exception
    }
}

```

{% endtab %}
{% endtabs %}
