Email sending best practices

01What is it?
Use this skill when the user wants to review, audit, improve, or plan email sending best practices. Its edge is a particular angle on email marketing, giving the agent tighter constraints than a plain email sending best practices request.
02Inputs
Context for email marketing: your goals, audience, constraints, and any source material the skill asks for.
03Output
A ready-to-use result for email marketing: the analysis, copy, or recommendations the agent produces.
Install-only

Install as a package

Installs this one skill package for your coding agent, including any supporting files that skill ships with — not every skill in the repository. Read the tutorial.

Terminal
$ npx skills add loops-so/skills --skill loops-email-sending-best-practices

Skill instructions

The instruction file for this skill. The skill also includes other files you need to install to use it.

SKILL.md

Email Sending Best Practices

This skill helps review and plan healthy email programs. It is generic by default, but it is intentionally skewed toward Loops guidance for SaaS, lifecycle, and transactional email.

When To Use

Use this skill when the task is about email quality, risk, or strategy rather than low-level API implementation.

Typical use cases:

  • diagnose poor inbox placement or sender reputation
  • review consent flows, double opt-in, list hygiene, or unsubscribe behavior
  • improve subject lines, preview text, sender identity, personalization, or rendering
  • choose between campaign, lifecycle automation, and transactional email
  • plan onboarding, retention, re-engagement, dunning, or product-update email programs
  • review a Loops setup for best-practice gaps

Do not default to this skill for pure implementation tasks like "send an event with the Loops API" or "wire up transactional email in Next.js". Use the loops-api skill for those.

Working Style

When this skill is active:

  1. Identify the primary problem:
    • deliverability
    • audience/consent
    • content/design
    • email type/program strategy
    • Loops-specific operational behavior
  2. Load only the relevant reference files.
  3. Give generic email best-practice guidance first.
  4. Add Loops-specific caveats, defaults, and product behavior where relevant.
  5. If the user is drifting into cold email or promotional use of transactional email, call that out directly and steer toward opt-in lifecycle or marketing sends instead.

Category Routing

  • Deliverability, sender reputation, domain setup, warming, inbox placement, Postmaster, BIMI, or large-list sends: Read references/deliverability.md
  • Consent, list hygiene, double opt-in, preference centers, mailing lists, segmentation, or stale audiences: Read references/audience-and-consent.md
  • Subject lines, preview text, sender fields, personalization, styling, themes, dark mode, or template/design review: Read references/content-and-design.md
  • Campaign vs loop vs transactional, onboarding/lifecycle sequencing, product updates, or email KPI framing: Read references/email-types-and-program-strategy.md
  • Loops-specific behavior such as addToAudience, transactional tracking differences, attachments, webhooks, or multi-domain constraints: Read references/loops-operational-caveats.md

Output Checklist

Aim to leave the user with:

  • the most likely root cause or opportunity
  • a concrete set of recommended changes
  • any Loops-specific caveats that materially change the recommendation
  • the metrics or signals that should be watched after the change

When relevant, explicitly separate:

  • immediate fixes
  • medium-term program improvements
  • things that are out of scope or risky to infer from limited evidence

Supporting file: references/audience-and-consent.md

Audience And Consent

Source URLs

Core Guidance

  • Only send marketing email to recipients who clearly opted in.
  • Use double opt-in when list quality or abuse risk matters. Loops positions double opt-in as a deliverability and list-quality improvement, especially for forms.
  • Keep confirmation emails short, branded, and focused on the confirmation action.
  • Maintain list hygiene at the source:
    • validate inputs
    • use captcha or bot protection
    • block disposable emails
    • avoid stale or low-intent imports
  • A clean list improves deliverability by lowering bounce risk and reducing spam complaints from fake or abandoned addresses.

Lists vs Segments

  • Use segments for internal targeting logic.
  • Use mailing lists when the subscriber should understand and control the category of communication they receive.
  • In Loops, lists power the preference center and list-specific opt-in/out behavior.
  • Keep public lists for discoverable opt-ins and preference control.
  • Keep private lists for targeted internal grouping that should only be visible to subscribed contacts.

Preference And Unsubscribe Management

  • Make preference management easy and obvious for marketing email.
  • In Loops, marketing emails automatically include a preference-center path, and MJML emails can use the {unsubscribe_link} tag.
  • If the audience needs finer-grained choice, solve that with mailing lists and a preference center, not with multiple domains or hidden sending logic.

Importing And Audience Expansion

  • Do not treat old CSV imports as safe by default.
  • When importing dormant users, bias toward recent or active cohorts first.
  • In Loops CSV imports:
    • contacts are subscribed by default unless Subscribed is explicitly set to false
    • empty cells do not overwrite existing data
    • null is required to clear a field

Loops-Specific Notes

  • Loops automatically handles bounces, unsubscribes, and spam complaints.
  • Double opt-in currently applies to Loops form endpoints, not to the API create/update contact endpoints.
  • Pending double-opt-in contacts do not trigger normal contact webhooks until they confirm.

Supporting file: references/content-and-design.md

Content And Design

Source URLs

Subject, Preview, And Sender Identity

  • Keep subject lines concise. Loops recommends fewer than 50 characters and around 10 words.
  • Use preview text intentionally; if you leave it empty, some inboxes will show the beginning of the email body instead.
  • The sender name and from-address should be recognizable to the recipient.
  • Set a reply-to when a different response path is useful; otherwise let replies route to the from-address.

Personalization

  • Personalize only with data that is reliable and useful.
  • In Loops:
    • campaigns use contact properties ({contact.*})
    • workflow/lifecycle emails use contact properties ({contact.*}) and event properties ({event.*})
    • transactional emails use data variables ({data.*})
  • Always provide fallbacks for contact properties in campaigns and for contact and event properties in workflow emails. Loops warns that missing values can prevent the email from sending.
  • Use personalization to add context, not to simulate familiarity where none exists.

Layout And Design

  • Start simple. Clear hierarchy, scannable copy, and obvious CTA usually outperform decorative complexity.
  • In Loops, styled emails use a centered responsive column with a 600px max width; plain emails better mimic direct email-client messages.
  • Use themes for consistency when multiple emails should share a branded system.
  • Prefer readability and accessibility over novelty:
    • sufficient contrast
    • clear heading structure
    • language set correctly
    • restrained image use

Dark Mode And Rendering

  • Design assets so they survive both light and dark mode.
  • Loops recommends logos that still work on dark backgrounds, often with a gray or colored mark rather than pure black.
  • A stroke around a logo can help preserve contrast in dark mode.
  • Loops automatically enables dark-mode support where email clients can handle it, but custom CSS for dark-mode-specific behavior requires imported MJML rather than the editor.

Practical Review Heuristics

  • Subject and preview are aligned rather than repeating each other.
  • The first screen explains why the email matters.
  • Links and buttons are obvious and not overloaded.
  • Templates are fully de-placeholdered and all links are checked.
  • Product-update and lifecycle emails stay brief and relevant instead of reading like changelog dumps.

Loops-Specific Notes

  • Dynamic content can be used in Loops sending settings fields, not just the body.
  • For multi-language programs in Loops, store language on the contact, segment by it for campaigns/loops, and map transactional IDs by language.
  • If custom HTML/CSS behavior is required, Loops expects MJML imports rather than arbitrary HTML email content in normal editor flows.

Supporting file: references/deliverability.md

Deliverability

Source URLs

Core Guidance

  • Inbox placement is affected by more than content alone. Treat sending domain, IP history, cadence, consent quality, sending volume, blocklists, and recent recipient engagement as one system.
  • Set up domain authentication cleanly before diagnosing content issues. In Loops this means verifying the sending domain records Loops provides, including SPF, DKIM, and MX, and understanding how DMARC/BIMI fit into the broader setup.
  • Prefer a sending subdomain over the root domain. Loops recommends subdomains like mail.company.com, hey.company.com, or updates.company.com.
  • Avoid fragmenting traffic across many domains. Loops explicitly recommends a single well-established sending domain over multiple weak or occasional domains.
  • If you must split communication types, prefer lists and preference management over multiple domains.
  • Do not send cold email from your primary domain. Loops explicitly warns against using Loops for cold email, and prior cold-email use on a primary domain can damage current deliverability.
  • Warm new sending reputation with expected, high-intent email first:
    • onboarding/welcome emails
    • essential transactional email
    • small sends to recent or active users
  • Expand to older or less-engaged contacts gradually. Batch larger backfills and stop expanding if performance degrades.
  • When domain records were just changed, allow propagation time before over-correcting.

Large-Audience Sending

  • For new or weak domains, do not begin with a broad blast to a cold audience.
  • Start with new signups and recently active users because they are more likely to engage.
  • In the Loops guidance, a welcome loop plus essential transactional email is the preferred warm-up path before larger campaigns.
  • When importing a backlog of users, bias toward recent signups or recent logins first, then widen gradually.

Signals To Watch

  • Prefer outcome and health signals over vanity metrics:
    • bounce rate
    • unsubscribe rate
    • spam complaints
    • delivery errors
    • steady engagement from the right audience
    • product actions tied to the email
  • Gmail spam reports are not surfaced directly in Loops, so Loops recommends setting up Google Postmaster for Gmail-specific reputation and spam-rate insight.
  • Open rates are directionally useful at best. Use them cautiously and do not treat them as the main success metric.

Loops-Specific Notes

  • Loops has sending guardrails and may monitor sends for deliverability before release.
  • Loops recommends one sending domain per team. Multiple domains mean separate Loops teams and no shared audience/settings.
  • The sending domain page in Loops is the first place to verify domain record setup before doing deeper deliverability troubleshooting.

Supporting file: references/email-types-and-program-strategy.md

Email Types And Program Strategy

Source URLs

Choose The Right Email Type

  • Campaign:
    • one-off send
    • same message to a segment or broad audience
    • good for newsletters, product updates, investor updates, feedback asks
  • Loop / lifecycle automation:
    • triggered by contact changes or events
    • good for onboarding, activation, retention, re-engagement, dunning, and check-ins
  • Transactional:
    • triggered by a specific user action
    • good for password resets, confirmations, receipts, shipping, login links
    • should not be used for promotional messaging

Lifecycle Program Design

  • Think in lifecycle stages rather than isolated emails:
    • acquisition
    • onboarding
    • retention
    • re-engagement
    • dunning
    • re-activation
  • In Loops, the common pattern is one loop per lifecycle state, often keyed by a custom contact property such as subscriptionStatus.
  • Favor triggers tied to real product state changes instead of arbitrary schedules whenever possible.

New-Sender Strategy

  • Start with an onboarding welcome loop and essential transactional email before broad campaigns.
  • Expected, requested email is the safest early traffic because engagement is naturally high.
  • After a few days of healthy warm-up, begin with small campaigns to recent or active users rather than the full historical audience.
  • For first campaigns, Loops specifically recommends useful product updates or feature announcements over generic promotions or giveaways.

Product Updates

  • Product updates usually work best as concise recurring campaigns.
  • Loops recommends:
    • roughly monthly cadence, unless shipping cadence justifies more
    • 2-3 relevant updates rather than long lists
    • a clear intro and path to the full changelog
    • relevance over completeness
  • For established senders who have not emailed this format before, start with active users rather than the whole database.

Measurement

  • Open rates are noisy and increasingly inflated by privacy behavior in major mail clients.
  • Do not optimize the program around opens alone.
  • Prefer KPI framing tied to business outcomes:
    • trial starts
    • activation
    • conversion
    • reactivation
    • feature usage
    • unsubscribe and complaint trends

Loops-Specific Notes

  • Transactional emails in Loops do not track opens or clicks.
  • Transactional emails do not require unsubscribe links.
  • If the question is really about wiring triggers, data variables, or API payloads, hand off to the loops-api skill after the best-practice recommendation is clear.

Supporting file: references/loops-operational-caveats.md

Loops Operational Caveats

Source URLs

Marketing Vs Transactional Behavior

  • In Loops, the Audience is a marketing-contact concept.
  • Sending a transactional email to a new recipient does not add them to the Audience unless addToAudience is set to true.
  • Sending transactional email to a new recipient does not trigger the normal "contact added" lifecycle path.
  • Unsubscribed contacts can still receive transactional emails.
  • Transactional emails do not include unsubscribe links and do not track opens or clicks.

Attachments

  • Attachments are not generally enabled by default in Loops; support must enable them for the account.
  • Attachment payloads require filename, contentType, and base64 data.
  • Loops documents a total JSON request size limit below 4 MB, with base64 overhead in mind.

Webhooks

  • Loops supports one webhook endpoint per account.
  • Webhooks are signed and should be verified with the signing secret.
  • Webhook dispatch is rate-limited to 10 events per second, with additional events queued.
  • When double opt-in is enabled, certain contact webhooks are delayed until the contact confirms.

Domain And Team Boundaries

  • Multiple sending domains are modeled as separate Loops teams rather than one shared workspace.
  • Settings, audiences, and related data do not automatically carry across teams.
  • If the user wants separate communication types without splitting operational data, prefer lists and segmentation before proposing multiple domains.

Group Inboxes

  • Transactional email is intended for one-to-one delivery, not group inboxes.
  • Group inboxes can silently block or moderate transactional email, especially in Google Workspace.
  • If delivery to a group inbox matters, check moderation queues, email logs, and group posting policies before assuming the email provider failed.

Practical Guidance

  • If the recommendation depends on Loops product behavior, say so explicitly.
  • If the user needs implementation details after the policy/best-practice decision is made, use the loops-api skill for the actual payloads and integration patterns.

How do I install Email sending best practices in Cursor, Claude Code, or Codex?

Run npx skills add loops-so/skills --skill loops-email-sending-best-practices in the project where you want it, then ask your agent for the skill by name. The --skill flag installs only Email sending best practices, not every skill in the repository.

Where does Email sending best practices come from and what license is it under?

Email sending best practices comes from the loops-so/skills repository on GitHub. That repository has 12 GitHub stars. The skill is published under the MIT license.

Prefer plain text? Read the Email sending best practices guide as markdown.