overview
--- layout: default title: Domain Flow — User Guide
Domain Flow — User Guide
Table of Contents
- Overview
- Domain Lifecycle
- Prerequisites
- Domains Grid (Index View)
- Adding a Domain
- Initialising a Domain
- Email Accounts (Detail Grid)
- Creating an Email Account
- Editing / Finishing Email Account Setup
- Active Sending Toggle
- Warm-Up Management
- Domain Retention (Keep)
Overview
The Domain Flow module manages sending domains and their email accounts for campaigns. It provides a two-level master–detail interface: a top-level Domains Grid lists all domains attached to the selected campaign, expanding a domain row reveals the intermediate Domain Accounts Grid (unique email accounts from GSuite/Outlook/Other/Postal/Hmail entities), and expanding an account row reveals the Email Addresses Detail Grid for that specific email address.
Domain Lifecycle
Every domain progresses through these states before email accounts can be added:
Current bulk behavior: In the multiple-domain modal, rows marked
Client ownedare saved without attempting a GoDaddy purchase. Only rows markedNewcan call the purchase flow.
Prerequisites
- A campaign must be selected before the Domains page loads. If no campaign is selected, you will be prompted to choose one.
- Certain buttons require specific permissions (e.g. Add domain, Init domain, Keep).
Domains Grid (Index View)
The main view displays a server-side DataTable of all domains belonging to the selected campaign.
Grid Layout
Grid Columns
| # | Column | Description |
|---|---|---|
| 1 | ↓ (Expand) | Arrow icon. Click to expand/collapse the Domain Accounts intermediate grid beneath this domain. |
| 2 | Name | The domain name (e.g. example-outreach.com). Searchable via multi-select filter. |
| 3 | Type | Sending mechanism — one of GSuite, Postal, Outlook, Hmail, or Other. Searchable via multi-select filter. |
| 4 | GSuite | GSuite instance label. Searchable via multi-select filter. |
| 5 | GoDaddy | GoDaddy registration status. Displayed as a colour-coded badge: |
- Green (ACTIVE) | ||
- Yellow (Not set) | ||
| - Red (cancelled / other) | ||
| 6 | GSuite/HMail | Domain verification status in the mail service. Colour-coded: Verified (green), Not set (yellow), other (red). |
| 7 | Created | Date the domain was created. Filterable via date-range picker. |
| 8 | Last used | Date the domain was last used for sending. Filterable via date-range picker. |
| 9 | Valid until | Domain expiry date. Filterable via date-range picker. |
| 10 | Redirect | The redirect URL the domain points to. Searchable via multi-select filter. |
| 11 | DNS Check | A DNS Check button (visible only for initialised domains). Runs a DNS record verification for the domain. |
| 12 | Action | Context-dependent action buttons (see Grid Actions). |
| 13 | Retention | A Keep button shown for eligible domains (see Domain Retention). |
| 14 | (Add account) | An icon button to add a new email account to the domain. Only active for completed domains; disabled icon shown otherwise. |
Grid Actions
The Action column shows different buttons depending on the domain's state:
| Button | Appears When | What It Does |
|---|---|---|
| Init | Domain is not yet initialised | Opens a modal to configure the domain's sending mechanism, instance, domain type, redirect URL, and in-use status. After saving, the domain becomes initialised. |
| Set Completed | Domain is initialised but not completed | Marks the domain as fully set up. Once completed, email accounts can be added. |
| DNS Check | Domain is initialised | Runs DNS record verification for the domain and its mail service type. |
| Keep | Domain meets retention criteria (see below) | Extends the domain's retention period. Only visible to users with the DomainsKeep permission. |
| Add email account (icon) | Domain is completed | Opens the account-type selection modal. Disabled (greyed-out icon) if the domain is not yet completed. |
| Expand ↓ / Collapse ↑ | Always | Toggles email accounts detail row for the domain. |
Email Accounts (Two-Level Hierarchy)
Clicking the ↓ expand arrow on a domain row loads the intermediate Domain Accounts Grid inline beneath that row. Expanding an account row then reveals the Email Addresses Detail Grid for that specific email address. This two-level hierarchy separates the account entity (GSuiteUser, OutlookUser, etc.) from its email profile addresses (EPA records).
Domain Accounts Grid (Level 1)
The first-level grid shows unique email accounts from the provider entity table (GSuiteUser, OutlookUser, OtherDomainAccount, PostalAccounts, or SMTPUsers) matching the domain. Each row represents a single account entity.
Level 1 Columns
| # | Column | Description |
|---|---|---|
| 1 | ↓ (Expand) | Arrow icon. Click to expand/collapse the Email Addresses detail grid for this specific email. |
| 2 | Primary Email | The account's primary email address (e.g. john.smith@example-outreach.com). |
| 3 | First Name | The account holder's first name. |
| 4 | Last Name | The account holder's last name. |
| 5 | Suspended | Yes (red badge) or No (green badge). Mapped per provider: |
- GSuite: Suspended field | ||
- Outlook: inverse of AccountEnabled | ||
- Other / Postal: inverse of Active | ||
- Hmail: always No (field not available) | ||
| 6 | Suspension Reason | The reason text if the account was suspended (GSuite only). |
| 7 | Deleted | Yes (red badge) or No (green badge). Whether the account is marked as deleted. |
| 8 | Last Used | Date the account was last used. |
| 9 | Warm Up | Display-only toggle with two read-only indicators: ⇧ Outbound (checked when ActiveOutbound is true) and ⇩ Inbound (checked when ActiveInbound is true). Warmup is managed via the 🗓️ Warmup Schedule icon, not this toggle. The underlying data comes from the WarmUpScheduleV2 table, queried by domain (not per-email) for performance. |
| 10 | Actions | 🗓️ Warmup Schedule icon (visible when IsWarmupRequired), 📧 Test Send icon (visible when warmup is configured). Both open their respective modals. |
Provider-Specific Data Sources
| Domain Type | Entity Table | Key Mappings |
|---|---|---|
| GSuite | GSuiteUser | Suspended, SuspensionReason, Deleted, LastUsed |
| Outlook | OutlookUser | Suspended = !AccountEnabled, Deleted, LastUsed |
| Other | OtherDomainAccount | PrimaryEmail = Email, Suspended = !Active, Deleted, LastUsed |
| Postal | PostalAccounts | PrimaryEmail = Address, FirstName = PersonFirstName, Suspended = !Active, Deleted |
| Hmail | SMTPUsers | PrimaryEmail = Address, no Suspended/Deleted/LastUsed fields |
Email Addresses Detail Grid (Level 2)
Clicking the ↓ expand arrow on an account row loads the email profile addresses detail grid inline beneath that account. This is the same grid that was previously displayed directly under the domain row — same columns, toggles, and actions — but filtered to only show EPA records matching the specific PrimaryEmail.
Level 2 Layout
📐 View Mockup — Email Accounts Detail Grid
Level 2 Columns
| # | Column | Description |
|---|---|---|
| 1 | Address | The email address (e.g. john.smith@example-outreach.com). |
| 2 | Set up status | Completed (green badge) or In Progress (yellow badge). |
| 3 | Created | Date the email account was created. |
| 4 | Email profile | The label of the associated email profile. |
| 5 | Sales agent | The assigned sales agent name. |
| 6 | Last sync | Date of the last inbox synchronisation. |
| 7 | Active sending | Toggle switch to enable/disable sending from this address. |
| 8 | Warm up | Display-only indicator (disabled toggle) showing warmup status. Read-only Inbound (⇩) and Outbound (⇧) checkboxes reflect the actual ActiveInbound/ActiveOutbound state from the Warmup API. Shows Not required badge if warm-up is not required for this account. Warmup is configured via the 🗓️ Warmup Schedule icon in the Actions column, not by toggling this switch. |
| 9 | Actions | Action buttons: Finish set up / Edit (icon), 🗓️ Warmup Schedule (icon, visible when IsWarmupRequired), and 📧 Test Send (icon, visible when warmup is configured and setup is complete). |
Level 2 Actions
| Action | Description |
|---|---|
| Active Sending toggle | Switching this toggle shows a confirmation modal: "This action will change the status of the email address, and all email profiles associated with it will be affected." Click Yes to confirm or Cancel to revert. The change propagates to all email profiles sharing the same email address. |
| 🗓️ Warmup Schedule (icon) | Visible when IsWarmupRequired is enabled. Opens the dedicated Warm-Up Schedule modal for configuring Time Zone, Increase, Days, Active Inbound/Outbound, Start Date, and Test Send. The warmup toggle in the grid is a display-only indicator — all warmup management is done through this icon button. |
| 📧 Test Send (icon) | Visible when IsWarmupRequired and a warmup schedule record exists (WarmUpId > 0). Opens the _TestTemplateWU modal with the first warmup template and prospect parameters. Sends a test email through the EPA's SMTP credentials to verify password and server settings. |
| Finish set up / Edit (icon) | Opens the Edit Email Account modal. |
The detail grid also provides Copy, CSV, Excel, PDF, and Print export buttons.
Creating an Email Account
Clicking the Add email account icon on a completed domain row opens a selection modal:
Account Type Selection Modal
📐 View Mockup — Email Account Type Selection
All new-account forms support batch creation — you can add multiple email addresses and they will be created sequentially.
Unified Creation Modal (All Types)
📐 View Mockup — Unified Creation Modal
The creation modal is unified — a single _NewEmailAccount.cshtml handles all 4 provider types (GSuite, Outlook, Postal, Other). Sections are shown/hidden via data-types CSS based on the selected account type.
Core fields common to all types:
| Field | Required | Description |
|---|---|---|
| Sales agent | Yes | Select from the campaign's assigned sales agents. Auto-fills First/Last name. |
| First name | Yes | Agent's first name. |
| Last name | Yes | Agent's last name. |
| Email addresses | Yes (≥1) | Enter a local-part (username) in the text input — the @domain suffix is appended automatically as a greyed-out read-only field. Click Add to batch. |
| Forward address | Yes | One or more comma-separated forwarding email addresses. |
Type-specific fields:
| Type | Additional Fields |
|---|---|
| GSuite | Login (GSuite instance), Password + Generate button |
| Outlook | Login (Outlook instance), Password + Generate button. License check runs before creation. |
| Postal | Domain name (read-only), Account addresses (split input), Postal Login, Forward address (prefix + domain dropdown), Client's primary email address |
| Other | Password + Generate button |
Split email input: Email addresses use a split input pattern — the username part is a normal text field, and the @domain.com suffix is shown as a separate greyed-out read-only field. This prevents domain mismatch errors.
Click Save to create all email accounts. The submit handler dispatches to the correct logic per type (Postal sequential creation, Outlook license-check, GSuite/Other batch creation).
SMTP User Account (Separate Modal)
Modal title: New SMTP User
The SMTP user account modal is kept as a separate lean modal (_NewSMTPUser.cshtml) rather than being merged into the unified modal, to avoid overcomplicating the type-section toggling. Available for GSuite and Other domain types only.
| Field | Required | Description |
|---|---|---|
| Sales agent | Yes | Select from the campaign's assigned sales agents. Auto-fills First/Last name. |
| First name | Yes | Agent's first name. |
| Last name | Yes | Agent's last name. |
| Email addresses | Yes (≥1) | Split input — username + @domain (greyed-out). Click Add to batch. |
| App password | Yes | The SMTP app password (not auto-generated). |
| SMTP Server | Yes | Outbound SMTP server hostname. |
| SMTP Port | Yes | Outbound SMTP port (default pre-filled). |
| IMAP Server | Yes | Inbound IMAP server hostname. |
| IMAP Port | Yes | Inbound IMAP port (default pre-filled). |
| Forward address | Yes | One or more comma-separated forwarding email addresses. |
Click Save to create all email accounts.
Selecting Existing Accounts
When Existing is chosen, a multi-select dropdown lists all email accounts from the same domain across the client's other campaigns. Select one or more and click Save to copy them to the current campaign.
📐 View Mockup — Select Existing Account
Editing / Finishing Email Account Setup
Clicking the Finish set up or Edit icon in the detail grid opens the Edit Account Level modal.
Edit Account Level Modal (Unified)
📐 View Mockup — Edit Account Level (Unified)
The edit modal is unified — _EditAccountLevel.cshtml handles all account types with a two-column layout. Fields that live on the account entity (GSuiteUser/OutlookUser/OtherDomainAccount/SMTPUser) are the source of truth; changes propagate to all EmailProfileAddresses and ResponderAccount rows sharing the same email address.
Left column — Credentials & TOTP:
| Field | Description |
|---|---|
| Campaign | Read-only. The current campaign name. |
| Account Type | Read-only. The email sender type (GSuite, Outlook, Postal, Other). |
| Status | Read-only badge — Completed (green) or In Progress (yellow). |
| Email Address | Read-only. 📋 Copy button to copy to clipboard. |
| Password | Editable for non-Postal accounts. 📋 Copy button. Generate button for non-SMTP users. |
| App password | Shown for GSuite/Outlook. 📋 Copy button. |
| Secret Key (Two FA Code) | Shown for GSuite/Outlook/SMTP. Login button opens the correct 2FA page per type. |
| Verification code (TOTP) | Auto-computed 6-digit TOTP from base32 secret. 30s countdown timer. 📋 Copy button. Hidden for Postal. |
| Forwarding address | Forward email address for this account. |
Right column — Settings:
| Field | Description |
|---|---|
| Sales Agent | Dropdown of sales agents assigned to this campaign. Changes propagate to all EPAs and the account entity. |
| Email Profile | Dropdown of email profiles for this campaign. Changes propagate to all EPAs. |
| Ops Owner | Dropdown of operations campaign managers. |
| Unsub URL | The unsubscribe URL. |
| Tracking domain | The tracking domain for link tracking. |
| Active sending | Checkbox to enable/disable sending from this address. |
| Replace ID | Dropdown shown when Active sending is OFF — replacement EPA to use. |
Bottom row (left) — SMTP Settings:
| Field | Description |
|---|---|
| SMTP Outbound Server / Port | Editable only for Other type or SMTP users. Disabled for GSuite/Postal/Outlook. |
| SMTP Inbound Server / Port | Editable only for Other type or SMTP users. Disabled for GSuite/Postal/Outlook. |
| Last sync | Date picker for last inbox sync. |
| Sync inbox | Checkbox to enable inbox synchronisation. |
Bottom row (right) — Warm-Up Required:
| Field | Description |
|---|---|
| Warm up required | Master checkbox. Marks the account as requiring warmup. Once saved, the warmup toggle becomes available in the Domain Accounts Grid. Full warmup configuration (Time Zone, Increase Type, Start Date, Days, Active Inbound/Outbound, Test Send) is done through the Warm-Up Schedule modal — see Warm-Up Management. |
Auto-popup: When saving the edit modal with Warm up required checked (and no existing warmup schedule), the 🗓️ Warmup Schedule modal opens automatically after save — no need to manually find and click the icon button in the grid.
Click Save to apply changes. The changes propagate to all EPAs and ResponderAccounts.
⚠️ The old
_EditEmailAccount.cshtml(single-column, EPA-centric) has been deprecated and replaced by the unified_EditAccountLevel.cshtml. See Section 15 — DEPRECATED in the mockups for the old layout.
Active Sending Toggle
In the email accounts detail grid, the Active sending column provides a toggle switch for each email address.
Confirmation Flow
Workflow:
- Click the toggle.
- A confirmation modal appears: "This action will change the status of the email address, and all email profiles associated with it will be affected."
- Click Yes to confirm the change, or Cancel to revert.
- The toggle change is applied to all email profiles sharing the same email address (across campaigns).
Warm-Up Management
Warmup schedule configuration is handled through a separate modal (_WarmupScheduleSetup.cshtml), opened via the 🗓️ Warmup Schedule icon button in the grid Actions column, or automatically after saving the account edit modal with IsWarmupRequired enabled. The account edit modal only sets the IsWarmupRequired flag — all warmup settings (Time Zone, Increase Type, Start Date, Days, Active Inbound/Outbound) are configured in the dedicated warmup modal.
Architecture
Account Edit Modal Warmup Schedule Modal Warmup API
┌─────────────────┐ ┌──────────────────────┐ ┌──────────┐
│ IsWarmupRequired │───────►│ Time Zone (Select2) │ │ Email │
│ (checkbox only) │ auto │ Increase (Select2) │ POST │ Schedule │
└────────┬────────┘ -popup │ Start Date │───────►│ Setup │
│ │ Days (pills) │ │ │
│ 🗓️ icon OR │ Active Outbound │ └──────────┘
└────────────────►│ Active Inbound │
│ 📧 Test Send │
│ [Save] [Cancel] │
└──────────────────────┘
Enabling Warm-Up
- In the Edit Account Level modal, check Warm up required and save. This validates that the required password exists (AppPassword for GSuite/Outlook, Password for Hmail/Other; Postal uses API keys — no password check).
- Auto-popup: After saving the account edit modal with
IsWarmupRequiredenabled, the Warm-Up Schedule modal opens automatically — no need to click a separate button. - Alternatively, click the 🗓️ Warmup Schedule icon in the Domain Accounts Grid Actions column (visible when
IsWarmupRequired). - Configure the schedule settings and click Save. The system creates or updates the warmup schedule via the Warmup API.
- After saving, the grid reloads to reflect the new state — the Warm up toggle shows as ON with Inbound (⇩) / Outbound (⇧) indicators lit.
Editing an Existing Warmup
Click the 🗓️ Warmup Schedule icon in the grid Actions column. The modal opens with existing settings pre-loaded. You can also use the 📧 Test Send button (visible when IsWarmupRequired and a warmup schedule exists).
Disabling Warm-Up
- Open the Edit Account Level modal and uncheck Warm up required, then save.
- Alternatively, open the 🗓️ Warmup Schedule modal and deactivate both Active Inbound and Active Outbound, then save.
- The system calls the Warmup API to deactivate the schedule.
- All EPAs sharing this email are marked as
SetUpCompleted = false.
Grid Warm-Up Indicator
The Warm up column in the Domain Accounts Grid is a display-only indicator, not an interactive toggle:
- The toggle switch is
disabled— it reflects warmup status but cannot be clicked. - Next to the toggle, two read-only checkboxes show the individual states:
- ⇧ Outbound — checked when
ActiveOutboundis true - ⇩ Inbound — checked when
ActiveInboundis true
- ⇧ Outbound — checked when
- All warmup management (enable, disable, configure) is done through the 🗓️ Warmup Schedule icon button or the auto-popup flow from the account edit modal.
Warm-Up Schedule Modal Fields
| Field | Description |
|---|---|
| Read-only. The email address being warmed up. | |
| Time Zone | Select2 dropdown — all system time zones. The schedule runs in this time zone. |
| Increase | Select2 dropdown — warmup volume ramp-up strategy (Gradual Increase, etc.). |
| Start Date | Datepicker (dd/mm/yyyy). The date warmup sending begins. Defaults to tomorrow for new schedules. |
| Days | Day-of-week pills (Mon–Sun). Select which days warmup emails are sent. |
| Active Outbound | Enables outbound warmup message sending. Inbound requires outbound to be active. |
| Active Inbound | Enables inbound warmup message handling. |
Password Requirements by Account Type
| Account Type | Required Field | Validation |
|---|---|---|
| GSuite | AppPassword | Application-specific password for SMTP |
| Outlook | AppPassword | Application-specific password for SMTP |
| Hmail | Password | Regular SMTP password |
| Other | Password | Regular SMTP password |
| Postal | (none) | Authenticates via LoginPostalId → Logins API key |
The password check runs in SetupAccountAsync when IsWarmupRequired is enabled. If the required password is missing, the account save is blocked — no EPA, no account entity changes are persisted.
StartDate Handling on Active Warmups
The Warmup API (EmailScheduleSetupService) rejects StartDate changes when DaysPassed > 0. If the API returns a StartDate error, the system automatically retries using the API's authoritative StartDate value (returned in the error response). This handles the datetime vs datetime2 precision mismatch between the Sopro and EmailWarmUp databases.
Testing Warm-Up Email
A 📧 Test Send button is available in two locations:
- Warm-Up Schedule modal — inside the modal footer. Opens the
_TestTemplateWUmodal with the first warmup template and prospect parameters. - Domain Accounts Grid Actions column — visible when
IsWarmupRequiredand a warmup schedule record exists.
Domain Retention (Keep)
The Keep button appears in the Retention column for domains that meet all of these criteria:
- The domain has no recent "Keep" date, or it has expired.
- The GoDaddy status is
ACTIVEorNot Set. - The domain has not been used for sending in the last 90 days, or was created more than 90 days ago with no sends.
- The user has the DomainsKeep permission.
Clicking Keep extends the domain's retention, preventing it from being flagged for removal.