# Email subscription

The Batch iOS SDK allows you to:

* Add and remove email address from a user profile. The profile will automatically be created if needed.
* Edit a profile's marketing subscription.

{% hint style="info" %}
In order to set an email address and subscription status on a profile, the creation of a project is required. If no project is set up, any calls made for these actions will be ignored.
{% endhint %}

Here is how to set an email with a marketing subscription:

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

```swift
// This requires to have a custom user ID registered by calling the `identify` method beforehand.
BatchProfile.editor { editor in
  try? editor.setEmailAddress("john.doe@batch.com") // Nil to erase. Addresses must be valid.
  editor.setEmailMarketingSubscriptionState(.subscribed) // or .unsubscribed
   // If you prefer to use BatchProfile.editor() with local variable instead of using a closure,
   // remember to use editor.save() afterwards so that the changes are taken into account.
}
```

{% endtab %}

{% tab title="Objective-C" %}

```objectivec
// This requires to have a custom user ID registered by calling the `identify` method beforehand.
[BatchProfile editWithBlock:^(BatchProfileEditor * _Nonnull editor) {
    NSError *error = nil;
    [editor setEmailAddress:@"john.doe@batch.com" error:&error]; // Nil to erase. Addresses must be valid.
    [editor setEmailMarketingSubscriptionState:BatchEmailSubscriptionStateSubscribed]; // or BatchEmailSubscriptionStateUnsubscribed
     // If you prefer to use [BatchProfile editor] instead of `editWithBlock`,
     // remember to use [editor save] afterwards so that the changes are taken into account.

}];
```

{% endtab %}
{% endtabs %}

{% hint style="warning" %}
If you call `editor` method before `startWithAPIKey` it will return nil. You should always call it after you started the SDK, and check nullity to be safe.
{% endhint %}
