Email Profile Flow — User Guide
Table of Contents
- Overview
- Email Profile Lifecycle
- Prerequisites
- Email Profiles Grid (Index View)
- Creating / Editing an Email Profile
- Email Addresses (Detail Grid)
- Cloning an Email Profile
- Generative Preview
- Active Toggle
- Email Account Removal (Soft-Delete)
- EPA Auto-Creation from Account Entities
Overview
The Email Profile Flow module manages email profiles for campaigns. An email profile defines the sender identity, targeting configuration, sending limits, and profile type for campaign email outreach. It provides a master–detail interface: a top-level Email Profiles Grid lists all profiles for the selected campaign, and expanding a profile row reveals the Email Addresses Detail Grid for that profile.
Email Profile Lifecycle
Every email profile progresses through these states:
Prerequisites
- A campaign must be selected before the Email Profiles page loads. If no campaign is selected, you will be prompted to choose one.
- The user needs the
EmailProfilesAndAddressesListingViewpermission to view the page. - Certain buttons require specific permissions (e.g. Add/Edit, Export).
Email Profiles Grid (Index View)
The main view displays a server-side DataTable of all email profiles belonging to the selected campaign.
Grid Layout
📐 View Mockup — Email Profiles Grid
Grid Columns
| # | Column | Description |
|---|---|---|
| 1 | ↓ (Expand) | Arrow icon. Click to expand/collapse the email addresses detail row beneath this profile. |
| 2 | Label | The email profile label (e.g. Acme Outreach). Searchable via multi-select filter. |
| 3 | Status | Active (green badge) or Inactive (red badge). |
| 4 | Name | The sales agent's full name (FirstName + LastName). Searchable with multi-keyword split search. |
| 5 | From Name | The sender display name used in outbound emails. Searchable via multi-select filter. |
| 6 | Title | The email title/signature title. Searchable via multi-select filter. |
| 7 | Data Source | Source of prospect data (LBData, DBData, or empty). Searchable via multi-select filter. |
| 8 | Source Email | The source/reply-to email address. Hidden for Webchat profiles. Searchable via multi-select filter. |
| 9 | Sales Agent | The assigned sales agent name. Searchable via multi-select filter. |
| 10 | Ops Owner | The operations owner name. Searchable via multi-select filter. |
| 11 | Active | Toggle switch to enable/disable the email profile. Disabled for Webchat profiles. |
| 12 | Action | Context-dependent action buttons (see Grid Actions). |
Grid Actions
The Action column shows buttons depending on the profile's type:
| Button | Appears When | What It Does |
|---|---|---|
| Edit (icon) | Always (with permission) | Opens the _EditEmailProfile.cshtml 3-step wizard modal pre-populated with the profile's data. |
| Clone (icon) | Always (with permission) | Opens the Clone.cshtml modal to duplicate the profile with a new label and from-name. |
| Generative Preview (icon) | Profile type is Generative | Opens the standalone GenerativePreview.cshtml page showing AI-generated message previews with recipient details. |
| Active toggle | Always (except Webchat) | Switchery toggle to activate/deactivate the profile. Webchat profiles have the toggle disabled. |
Search and Filtering
- Global search: Free-text search across Label, Name (FirstName/LastName), FromName, Title, Status, DataSource, SalesAgent, and OpsOwner.
- Column filters (via select2 multi-select dropdowns): Available on Label, Status, Name, FromName, Title, DataSource, SourceEmail, SalesAgent, and OpsOwner columns.
- Show inactive checkbox: A switchery toggle at the top of the grid. When enabled, inactive profiles are included in the results. The DataTable reloads on toggle.
Export Options
If the user has the CamapignEmailProfilesExport permission, the toolbar provides export buttons:
- Copy — copies table data to clipboard
- CSV — downloads as CSV file
- Excel — downloads as XLSX file
- PDF — downloads as PDF
- Print — opens a print-friendly view
Creating / Editing an Email Profile
Clicking New Email Profile (or the Edit icon on an existing profile) opens the _EditEmailProfile.cshtml modal.
Wizard Overview
The edit modal uses a 3-step wizard with a progress indicator at the top:
- Step 1 — Identity (Label, Sales Agent, Email Accounts, Name, From Name, Phone, Title, UTM params, Approaches, Max Stages)
- Step 2 — Prospect Limits (Max prospects per day per company — up to 9 stages)
- Step 3 — Source & Type (Source Email, Targeted Countries, Sender Location, Ops Owner, Monthly Forecast, Data Source, Email Profile Type, Generative settings)
📐 View Mockup — Edit Email Profile Wizard
Step 1 — Identity
| Field | Required | Description |
|---|---|---|
| Label | Yes | The profile label (e.g. Acme Corp Outreach). |
| Sales Agent | Yes | Select from the campaign's sales agents. Auto-fills First Name, Last Name, Telephone, Email Title, Source Email, and the Email Accounts dropdown. |
| Email accounts | No (create) / Yes (edit) | Multi-select of email addresses available for the selected sales agent. Shows a hybrid list: existing EPAs + emails from account entities (GSuiteUser, OutlookUser, SMTPUser, OtherDomainAccount) that don't have an EPA yet but belong to the same sales agent. New entries are prefixed with NEW: and auto-create EPAs on save. Required when editing an existing profile. |
| First Name | Yes | Auto-filled from sales agent, editable. |
| Last Name | Yes | Auto-filled from sales agent, editable. |
| From Name | Yes | The display name for outbound emails. |
| Email Telephone | No | Contact phone number. Auto-filled from sales agent. |
| Email Title | Yes | The title used in the email signature. Auto-filled from sales agent. |
| Email UTM Explainer Video | No | UTM parameter for the explainer video link. |
| Email UTM Signature | No | UTM parameter for the signature link. |
| Email Approaches | No | Multi-select of email approach strategies. |
| Max No of Email Stages | Yes | Number of email stages (1–12). Default: 4. |
Step 2 — Prospect Limits
| Field | Required | Description |
|---|---|---|
| MaxProspectsPerDayPerCompany | No | Max prospects per day per company — Stage 1. Default: 2. |
| MaxProspectsPerDayPerCompany2 | No | Max prospects per day per company — Stage 2. Default: 2. |
| MaxProspectsPerDayPerCompany3 | No | Max prospects per day per company — Stage 3. Default: 2. |
| MaxProspectsPerDayPerCompany4 | No | Max prospects per day per company — Stage 4. Default: 2. |
| MaxProspectsPerDayPerCompany5 | No | Max prospects per day per company — Stage 5. Default: 2. |
| MaxProspectsPerDayPerCompany6 | No | Max prospects per day per company — Stage 6. Default: 2. |
| MaxProspectsPerDayPerCompany7 | No | Max prospects per day per company — Stage 7. Default: 2. |
| MaxProspectsPerDayPerCompany8 | No | Max prospects per day per company — Stage 8. Default: 2. |
| MaxProspectsPerDayPerCompany9 | No | Max prospects per day per company — Stage 9. Default: 2. |
Step 3 — Source & Type
| Field | Required | Description |
|---|---|---|
| Source Email | Yes | The source/reply-to email address (validated for proper email format). |
| Targeted Countries | No | Multi-select of countries to target. |
| Sender Location | Yes | The sender's geographical location. |
| Ops Owner | Yes | The operations campaign manager assigned to this profile. |
| Monthly Forecast | No | Monthly email volume forecast. |
| Data Source | No | Source of prospect data: LBData (List Build), DBData (Database), or empty. |
| Email Profile Type | Yes | Multi-select: EmailOutreach, Gifting, IPMatchAndEngage, Generative, Webchat. Note: EmailOutreach and IPMatchAndEngage cannot be selected together. |
| Sender Offering (MessagingId) | Conditional | Shown only when Generative type is selected. Dropdown for AI messaging configuration. |
| Generate M1 Messages Only | Conditional | Shown only for Generative profiles. Checkbox — checked by default. Disabled for non-SuperAdmin users. |
| Is Batch | Conditional | Shown only for Generative profiles. Checkbox — checked by default. Disabled for non-SuperAdmin users. |
Email Addresses (Detail Grid)
Clicking the ↓ expand arrow on a profile row loads the email accounts detail grid inline beneath that row.
Detail Grid Layout
📐 View Mockup — Email Addresses Detail Grid
Detail Grid Columns
| # | Column | Description |
|---|---|---|
| 1 | The email address (e.g. john.smith@example-outreach.com). | |
| 2 | Sending mechanism | The email provider type (GSuite, Outlook, Postal, Other, etc.). |
| 3 | Tracking domain | The tracking domain used for link tracking. |
| 4 | Replace ID | The replacement email address (ReplaceID) if this address is being phased out. |
| 5 | Active sending | Toggle switch to enable/disable sending from this address. |
Detail Grid Actions
| Action | Description |
|---|---|
| Active Sending toggle | Toggling the switch sends a POST to ToggleActiveSending. On success, a toastr notification is displayed. The change applies to the specific EmailProfileAddress record. |
| Show inactive addresses | A switchery toggle at the top of the detail grid. When enabled, inactive email addresses are included in the results. |
The detail grid provides Copy, CSV, Excel, PDF, and Print export buttons on the main grid only. The detail grid does not have its own export buttons.
Cloning an Email Profile
Clicking the Clone icon on a profile row opens the clone modal.
Clone Modal
📐 View Mockup — Clone Email Profile
| Field | Required | Description |
|---|---|---|
| Label | Yes | The new label for the cloned profile. Must be unique per campaign. |
| From Name | Yes | The new sender display name. |
Clone Validation Rules
- Label must not be empty.
- From Name must not be empty.
- The source profile must have an Email Title.
- The source profile must have a Sender Location.
- The source profile must include at least one of
EmailOutreachorIPMatchAndEngageprofile types. - If the profile type includes
Generative, the cloned profile will haveIsBatch = trueandGenerateM1MessagesOnly = true.
Clone Flow
Generative Preview
Clicking the Generative Preview icon on a profile with Generative type opens a standalone page.
Generative Preview Page
📐 View Mockup — Generative Preview
The page has a two-column layout:
Left column — A loading spinner appears initially, then a DataTable of generated messages:
| Column | Description |
|---|---|
| Stage | The email stage number. |
| Subject | The AI-generated email subject line. |
| TextContent | The AI-generated email body (HTML). |
| Action | View Log button — opens the generation log for that message in a new tab. |
Toolbar buttons above the table:
- Send a test e-mail — opens a modal to send a test email for the current recipient.
- Shuffle recipient — loads a new random recipient and regenerates messages.
Right column — Recipient details panel:
| Field | Description |
|---|---|
| Recipient Name | The prospect's full name with LinkedIn link. |
| Title | The prospect's job title. |
| Company | Company name (linked to website). |
| Company Size | Employee count range. |
| Industry | Company industry. |
| Domain | Company domain (linked to website). |
| Description | Company description. |
Active Toggle
In the email profiles grid, the Active column provides a toggle switch for each profile.
Toggle Flow
Workflow:
- Click the toggle switch.
- An AJAX POST is sent to
ActivateDeactivateEmailProfilewith the profile ID and the newisActivevalue. - On success, the status badge updates and a success toastr appears.
- On failure, the toggle reverts to its previous position and an error toastr appears.
Note: Webchat profiles have the Active toggle disabled and cannot be toggled.
Email Account Removal (Soft-Delete)
When an email account is removed from a profile (deselected in the Email Accounts multi-select and saved), the system performs a soft-delete:
- The EPA's
Activeflag is set tofalse(instead of unlinking it from the profile by zeroingEmailProfileId). - The associated
ResponderAccountis marked asDeleted = true. - The account is hidden from the normal Email Addresses detail grid view (filtered by
Active = true). - When "Show inactive addresses" is toggled on, removed accounts reappear in the grid.
- The account also disappears from the Email Accounts multi-select dropdown (filtered by
Active).
Implication for the Active Sending toggle: Since Active now also serves as the "removed from profile" flag, toggling Active Sending off in the detail grid has the same effect as removing the account from the profile via the edit modal. The existing confirmation modal already warns that all associated profiles will be affected.
EPA Auto-Creation from Account Entities
When the Email Accounts dropdown includes NEW: prefixed entries (emails from account entities that don't have an EPA yet), selecting them and saving triggers automatic EPA creation:
- The service detects the
NEW:prefix and extracts the email address. - It calls
IEmailProfileAddressLookupService.LookupEmailForEpaAsync(email)which uses the same domain-resolution chain asEmailProfileController.CheckEmail:- Parses the domain from the email
- Looks up the domain in
DomainMailService - Determines the inbox type (GSuite, Outlook, Hmail, Postal, SMTPDetails)
- Resolves SMTP server/port/password from the account entity
- A new
EmailProfileAddressesrecord is created with:FromEmail= the email addressEmailSender="PostalAPI"for Postal,"SMTP"for everything elseSmtpServer/SmtpPort/SmtpPasswordfrom the lookup resultInboxCreatedViaandLabel= the resolved inbox typeLoginPostalidfor Postal accountsActive = true,CreationDate = DateTime.UtcNow
- A new
ResponderAccountis created for the EPA. - Account-level fields (SalesAgent, AspNetUserId, SetUpCompleted) are synced from the account entity via
SyncEpaFromAccountEntity(). The account entity (GSuiteUser, OutlookUser, SMTPUsers, OtherDomainAccount, or PostalAccount) is the single source of truth forSetUpCompleted. EPA mirrors the account value.
Supported Account Entity Sources
| Entity | FromEmail Field | Deleted Filter | Sales Agent Filter |
|---|---|---|---|
GSuiteUser | PrimaryEmail | !Deleted | AspNetUserId == salesAgentId |
OutlookUser | PrimaryEmail | !Deleted | AspNetUserId == salesAgentId |
SMTPUser | Address | N/A (no Deleted flag) | AspNetUserId == salesAgentId |
OtherDomainAccount | Email | !Deleted | AspNetUserId == salesAgentId |
PostalAccount | Address | !Deleted | N/A (filtered by domain only; AspNetUserId column not yet in DB) |