# Send registration and ticket emails (/docs/guides/email)



Eventlayer supplies the ticket activity. Your email provider sends the message.

## 1. Choose a trigger [#1-choose-a-trigger]

| Message      | Trigger                                             |
| ------------ | --------------------------------------------------- |
| Confirmation | ticket.created with an attendee, or ticket.assigned |
| Follow-up    | ticket.checked\_in                                  |
| Reminder     | Your application’s scheduler                        |

Use the [webhook guide](/docs/guides/webhooks) to receive and verify these events.

## 2. Prepare the message [#2-prepare-the-message]

After a successful registration, use the attendee and ticket-page URL saved by
your application to prepare an email.

```ts title="Confirmation email · server"
const message = {
  to: attendee.email,
  subject: "Your event ticket is ready",
  text: "View your ticket: " + ticketPageUrl,
};
```

Send these fields through your email provider’s API. The ticket page can
generate a fresh [Wallet download](/docs/guides/apple-wallet).

## 3. Send once [#3-send-once]

Use a stable message key, such as ticket ID + attendee ID + message type,
to avoid sending again when a webhook or job is retried.

Schedule reminders in your application. Before sending, check the current
event time, ticket status and recipient. Respect their communication preferences.

See [retries and recovery](/docs/retries) for failed or uncertain sends.

## Next steps [#next-steps]

[Sync event activity to your CRM](/docs/guides/crm).
