Skip to main content

overview

--- layout: default title: Domain Flow — User Guide

Domain Flow — User Guide

Table of Contents


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 owned are saved without attempting a GoDaddy purchase. Only rows marked New can 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

📐 View Mockup — Domains Grid

Grid Columns

#ColumnDescription
1↓ (Expand)Arrow icon. Click to expand/collapse the Domain Accounts intermediate grid beneath this domain.
2NameThe domain name (e.g. example-outreach.com). Searchable via multi-select filter.
3TypeSending mechanism — one of GSuite, Postal, Outlook, Hmail, or Other. Searchable via multi-select filter.
4GSuiteGSuite instance label. Searchable via multi-select filter.
5GoDaddyGoDaddy registration status. Displayed as a colour-coded badge:
- Green (ACTIVE)
- Yellow (Not set)
- Red (cancelled / other)
6GSuite/HMailDomain verification status in the mail service. Colour-coded: Verified (green), Not set (yellow), other (red).
7CreatedDate the domain was created. Filterable via date-range picker.
8Last usedDate the domain was last used for sending. Filterable via date-range picker.
9Valid untilDomain expiry date. Filterable via date-range picker.
10RedirectThe redirect URL the domain points to. Searchable via multi-select filter.
11DNS CheckA DNS Check button (visible only for initialised domains). Runs a DNS record verification for the domain.
12ActionContext-dependent action buttons (see Grid Actions).
13RetentionA 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:

ButtonAppears WhenWhat It Does
InitDomain is not yet initialisedOpens 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 CompletedDomain is initialised but not completedMarks the domain as fully set up. Once completed, email accounts can be added.
DNS CheckDomain is initialisedRuns DNS record verification for the domain and its mail service type.
KeepDomain 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 completedOpens the account-type selection modal. Disabled (greyed-out icon) if the domain is not yet completed.
Expand ↓ / Collapse ↑AlwaysToggles 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

#ColumnDescription
1↓ (Expand)Arrow icon. Click to expand/collapse the Email Addresses detail grid for this specific email.
2Primary EmailThe account's primary email address (e.g. john.smith@example-outreach.com).
3First NameThe account holder's first name.
4Last NameThe account holder's last name.
5SuspendedYes (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)
6Suspension ReasonThe reason text if the account was suspended (GSuite only).
7DeletedYes (red badge) or No (green badge). Whether the account is marked as deleted.
8Last UsedDate the account was last used.
9Warm UpDisplay-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.
10Actions🗓️ Warmup Schedule icon (visible when IsWarmupRequired), 📧 Test Send icon (visible when warmup is configured). Both open their respective modals.

Provider-Specific Data Sources

Domain TypeEntity TableKey Mappings
GSuiteGSuiteUserSuspended, SuspensionReason, Deleted, LastUsed
OutlookOutlookUserSuspended = !AccountEnabled, Deleted, LastUsed
OtherOtherDomainAccountPrimaryEmail = Email, Suspended = !Active, Deleted, LastUsed
PostalPostalAccountsPrimaryEmail = Address, FirstName = PersonFirstName, Suspended = !Active, Deleted
HmailSMTPUsersPrimaryEmail = 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

#ColumnDescription
1AddressThe email address (e.g. john.smith@example-outreach.com).
2Set up statusCompleted (green badge) or In Progress (yellow badge).
3CreatedDate the email account was created.
4Email profileThe label of the associated email profile.
5Sales agentThe assigned sales agent name.
6Last syncDate of the last inbox synchronisation.
7Active sendingToggle switch to enable/disable sending from this address.
8Warm upDisplay-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.
9ActionsAction 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

ActionDescription
Active Sending toggleSwitching 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:

FieldRequiredDescription
Sales agentYesSelect from the campaign's assigned sales agents. Auto-fills First/Last name.
First nameYesAgent's first name.
Last nameYesAgent's last name.
Email addressesYes (≥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 addressYesOne or more comma-separated forwarding email addresses.

Type-specific fields:

TypeAdditional Fields
GSuiteLogin (GSuite instance), Password + Generate button
OutlookLogin (Outlook instance), Password + Generate button. License check runs before creation.
PostalDomain name (read-only), Account addresses (split input), Postal Login, Forward address (prefix + domain dropdown), Client's primary email address
OtherPassword + 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

📐 View Mockup — 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.

FieldRequiredDescription
Sales agentYesSelect from the campaign's assigned sales agents. Auto-fills First/Last name.
First nameYesAgent's first name.
Last nameYesAgent's last name.
Email addressesYes (≥1)Split input — username + @domain (greyed-out). Click Add to batch.
App passwordYesThe SMTP app password (not auto-generated).
SMTP ServerYesOutbound SMTP server hostname.
SMTP PortYesOutbound SMTP port (default pre-filled).
IMAP ServerYesInbound IMAP server hostname.
IMAP PortYesInbound IMAP port (default pre-filled).
Forward addressYesOne 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:

FieldDescription
CampaignRead-only. The current campaign name.
Account TypeRead-only. The email sender type (GSuite, Outlook, Postal, Other).
StatusRead-only badge — Completed (green) or In Progress (yellow).
Email AddressRead-only. 📋 Copy button to copy to clipboard.
PasswordEditable for non-Postal accounts. 📋 Copy button. Generate button for non-SMTP users.
App passwordShown 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 addressForward email address for this account.

Right column — Settings:

FieldDescription
Sales AgentDropdown of sales agents assigned to this campaign. Changes propagate to all EPAs and the account entity.
Email ProfileDropdown of email profiles for this campaign. Changes propagate to all EPAs.
Ops OwnerDropdown of operations campaign managers.
Unsub URLThe unsubscribe URL.
Tracking domainThe tracking domain for link tracking.
Active sendingCheckbox to enable/disable sending from this address.
Replace IDDropdown shown when Active sending is OFF — replacement EPA to use.

Bottom row (left) — SMTP Settings:

FieldDescription
SMTP Outbound Server / PortEditable only for Other type or SMTP users. Disabled for GSuite/Postal/Outlook.
SMTP Inbound Server / PortEditable only for Other type or SMTP users. Disabled for GSuite/Postal/Outlook.
Last syncDate picker for last inbox sync.
Sync inboxCheckbox to enable inbox synchronisation.

Bottom row (right) — Warm-Up Required:

FieldDescription
Warm up requiredMaster 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:

  1. Click the toggle.
  2. A confirmation modal appears: "This action will change the status of the email address, and all email profiles associated with it will be affected."
  3. Click Yes to confirm the change, or Cancel to revert.
  4. 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

  1. 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).
  2. Auto-popup: After saving the account edit modal with IsWarmupRequired enabled, the Warm-Up Schedule modal opens automatically — no need to click a separate button.
  3. Alternatively, click the 🗓️ Warmup Schedule icon in the Domain Accounts Grid Actions column (visible when IsWarmupRequired).
  4. Configure the schedule settings and click Save. The system creates or updates the warmup schedule via the Warmup API.
  5. 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

  1. Open the Edit Account Level modal and uncheck Warm up required, then save.
  2. Alternatively, open the 🗓️ Warmup Schedule modal and deactivate both Active Inbound and Active Outbound, then save.
  3. The system calls the Warmup API to deactivate the schedule.
  4. 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 ActiveOutbound is true
    • ⇩ Inbound — checked when ActiveInbound is true
  • 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

FieldDescription
EmailRead-only. The email address being warmed up.
Time ZoneSelect2 dropdown — all system time zones. The schedule runs in this time zone.
IncreaseSelect2 dropdown — warmup volume ramp-up strategy (Gradual Increase, etc.).
Start DateDatepicker (dd/mm/yyyy). The date warmup sending begins. Defaults to tomorrow for new schedules.
DaysDay-of-week pills (Mon–Sun). Select which days warmup emails are sent.
Active OutboundEnables outbound warmup message sending. Inbound requires outbound to be active.
Active InboundEnables inbound warmup message handling.

Password Requirements by Account Type

Account TypeRequired FieldValidation
GSuiteAppPasswordApplication-specific password for SMTP
OutlookAppPasswordApplication-specific password for SMTP
HmailPasswordRegular SMTP password
OtherPasswordRegular SMTP password
Postal(none)Authenticates via LoginPostalIdLogins 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:

  1. Warm-Up Schedule modal — inside the modal footer. Opens the _TestTemplateWU modal with the first warmup template and prospect parameters.
  2. Domain Accounts Grid Actions column — visible when IsWarmupRequired and 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 ACTIVE or Not 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.