User
Email Marketing Subscribers
Add and edit subscribers, preview CSV imports, update profiles and manage list membership.
Step-by-step guide
Before you start
Use the account and workspace that own the records. This page does not include administrator configuration forms.
Open this feature
Open /portal/email-marketing/subscribers on your application domain, or use the matching item in the application menu.
Steps
Choose a task
Open the intended workspace and prepare an existing mailing list. Record the actual consent source and timestamp for contacts; do not invent these values to make a form pass.
Add a subscriber
- Open /portal/email-marketing/subscribers and select Add subscriber.
- Choose the destination List. If no list exists, use Manage lists to create one, then return to this form.
- Enter Email and optional First name (optional) and Last name (optional).
- In Consent source, describe how this person actually agreed to receive mail. Set Consent timestamp to that recorded date and time.
- Select Add subscriber. Search the email in the list and check its membership and status.
Edit identity details and recorded consent
- Find the subscriber and select Edit on that row.
- Check the read-only Email to confirm the person. Change the names or recorded consent details as needed.
- Select Save changes, then reopen the entry to compare the saved values.
- Do not attempt to replace the email in this form; keeping the email fixed preserves its delivery and unsubscribe history.
Import a small CSV after previewing it
- Prepare a CSV with an email header. Optional first_name and last_name columns populate names; additional non-empty columns become custom fields. Start with a small file you can inspect.
- Select Import CSV. Choose the destination list, enter the real consent source/time and choose the CSV file. The file limit is 5 MB.
- Select Preview import. Check the preview counts, invalid rows, duplicates and skipped contacts. The preview processes at most 1,000 rows; do not assume a larger file will be fully imported.
- If the preview is wrong, select Start over and correct the file. If correct, select Import [count] ready contacts, using the count shown on your button.
- After completion, search several imported emails and check the destination list. Existing unsubscribed, bounced and suppressed contacts are skipped rather than reactivated by this import.
Update custom fields and list membership
- Open the intended subscriber profile from the subscriber list.
- Edit Custom fields (JSON) as a JSON object, for example {"city":"Hanoi"}. Use double quotes and keep any existing values you intend to retain.
- Review the selected mailing lists on the same profile. The save applies the current selection; removing a list from it removes that membership.
- Select Save profile. Reload the profile and compare both the custom fields and list memberships.
Suppress selected contacts
- On the subscribers list, select only the intended contact rows. Check the selection count and addresses.
- Choose Suppress and review the confirmation. Select Suppress selected only when suppression is intended.
- Check the affected contacts’ status. Use Clear selection before working on another group.
Fields and choices
| Field or problem | What to do |
|---|---|
| List | Required for adding/importing. Select a list belonging to the workspace; a list name shown in another workspace is not sufficient. |
| Required, maximum 255 characters. It is checked as an email with a resolvable domain. Use the real subscribed address. | |
| First name / Last name | Optional; maximum 120 characters each. |
| Consent source / Consent timestamp | Required. Source is up to 100 characters; timestamp must be a valid date/time. Preserve the actual consent record. |
| CSV | CSV/TXT upload, up to 5 MB, with an email column. Preview reads at most 1,000 rows. Split larger imports into batches you can verify. |
| Custom fields (JSON) | A valid JSON object, such as {"city":"Hanoi"}. Do not enter JavaScript, single-quoted keys or a plain text sentence. |
| Profile list selection | Saving the profile synchronizes the selected memberships. Review all selected lists, not just the one you last changed. |
Check the result
- Search the saved email in the intended workspace and verify list membership.
- After an import, compare preview/processed counts and inspect a few records.
- After Save profile, reload and check both custom fields and lists.
Common problems
| Field or problem | What to do |
|---|---|
| CSV has no email column | Use email as a header in the first row, then run Preview import again. |
| Some rows are skipped | Read the preview counts. Invalid, duplicate or protected contact states must be reviewed rather than silently assumed imported. |
| Contact limit is reached | Review the workspace’s contact allowance before adding/importing more records. |
| Email cannot be changed in Edit | The form intentionally keeps it fixed to retain delivery and unsubscribe history. |
| Custom fields are rejected | Use a valid JSON object with double-quoted keys and values, then save again. |
Technical reference
Role-scoped source references
Pinned commit: 68a5655db1bbe17c74fb211f0fe0ee4e63c8be88
- modules/EmailMarketing/EmailMarketingSubscribers/Livewire/SubscriberProfile.php
- modules/EmailMarketing/EmailMarketingSubscribers/Livewire/SubscribersIndex.php
- modules/EmailMarketing/EmailMarketingSubscribers/resources/views/livewire/index.blade.php
- modules/EmailMarketing/EmailMarketingSubscribers/resources/views/livewire/profile.blade.php
Source-only route information
| Method | Source-default route |
|---|---|
| LIVEWIRE | /portal/email-marketing/subscribers |
| LIVEWIRE | /portal/email-marketing/subscribers/{subscriber} |
Unmapped fields — not user instructions
These fields belong to this role’s source handler, but their screen labels were not confirmed.
| Source key | Handler |
|---|---|
| form.consented_at | modules/EmailMarketing/EmailMarketingSubscribers/Livewire/SubscribersIndex.php |
| importConsentedAt | modules/EmailMarketing/EmailMarketingSubscribers/Livewire/SubscribersIndex.php |
| editForm.consented_at | modules/EmailMarketing/EmailMarketingSubscribers/Livewire/SubscribersIndex.php |
| bulkListId | modules/EmailMarketing/EmailMarketingSubscribers/Livewire/SubscribersIndex.php |