For Cursor Developers

Best Email Tools for Cursor IDE & TypeScript

For most Cursor developers building a TypeScript SaaS app, Resend is the best starting pick: one send call, React Email templates kept in typed components, and a free plan for 3,000 emails a month. The Pro plan is $20 a month, billed monthly, for 50,000 emails. The rest of this guide shows where other tools fit better.

By the editorial team (a pen name). Prices checked on 7 October 2026 against each vendor's pricing page.

Quick picks by need

Default for SaaS: Resend, with React Email templates and a small send API
Transactional only: Postmark, built for receipts and password resets
Lifecycle emails: Loops, event-driven sequences on one contact list
Lowest unit price: Amazon SES, from $0.16 per 1,000 emails
Open source: Plunk, free for 1,000 emails a month
Multi-channel: Novu or Courier, one workflow across channels
Routing control: Mailgun, domain and region configuration
Broad feature set: SendGrid, transactional, marketing and analytics

What a Cursor developer needs from an email API

Cursor writes code that follows patterns it has seen many times. It is weakest where a library has unusual setup, sparse examples or many options that look alike. The criteria below are the ones that most affect whether generated email code is correct on the first attempt. They describe what to look for; they do not rank the tools.

Keep the criteria in view as you read the sections that follow. A tool can do well on one of them and still be the wrong choice for your product. A newsletter platform with excellent contact handling is a poor fit for a team that only sends receipts, and a cheap per-email sender is a poor fit for a team with no AWS experience and no time to verify domains.

A small, predictable send path

When there is one obvious way to send a message, the editor is unlikely to pick a wrong one. A send function with a clear input shape and a result that is either data or an error gives Cursor fewer decisions to make. Tools that expose several overlapping ways to send add review work, because you must check which call the editor chose and whether it matches the current documentation.

Types you can read in the editor

Type information lets your editor show parameter names, required fields and allowed values as you type. That helps you accept or reject a generated block quickly. Check that the package you install ships its own type exports, because a separate type package can drift from runtime behaviour. Hover over a call in the editor and read what it accepts before you trust the suggestion.

Templates that stay in code, or stay out of it

Some teams want email markup in TSX components, so the editor can help with layout. Others want template aliases in the provider dashboard, so the code only passes data. Both approaches work. The risk is a mix of the two, where HTML strings are built in code and also edited in a dashboard. Choose one model and state it in your prompts.

Error results that code can branch on

Email errors include rate limits, invalid addresses and authorisation failures. An SDK that returns a structured error lets the generated handler branch on the case that happened. An SDK that throws generic errors pushes the editor toward a catch block that logs and moves on, which hides the failure that matters most.

Setup that does not block the first run

Some providers can send from a test domain within minutes. Others require domain verification, IAM roles and sending limits before the first message leaves. Both can be correct for a production system, but setup time changes which tool fits a sprint. Read the setup section of the provider documentation before you assume the code is the hard part.

Email tools for Cursor developers: best for, starting price and key limitation

Tool Best for Starting price (plan and billing) Key limitation
ResendSaaS apps with React email templatesFree for 3,000 emails a month; Pro $20 a month (monthly) for 50,000 emailsFree plan capped at 100 emails a day; marketing contacts priced separately
PostmarkTransactional mail that must arrive quicklyFree for 100 emails a month; Basic $15 a month (monthly) for 10,000 emailsNot built for broadcast marketing
SendGridTeams wanting broad coverage or an existing Twilio accountEssentials $19.95 a month (monthly) for 50,000 to 100,000 emailsLarge API surface; older examples appear in AI suggestions
MailgunDevelopers who need domain and region controlBasic $15 a month (monthly) for 10,000 emailsConfiguration effort; validation is part of overage charges
LoopsSaaS product and lifecycle email on one contact listGrowing Audience $99 a month (monthly), unlimited sends to subscribersCost follows contact list size; Early Stage plan carries a footer
Amazon SESHigh volume on AWSEssentials $0.16 per 1,000 emails, pay as you goDomain, IAM and sending-limit setup first
PlunkOpen-source and self-hosted setupsFree for 1,000 emails a month; $0.001 per email after thatSmaller ecosystem; Plunk branding on the free plan
NovuEmail, in-app, SMS and push from one workflowFree for 10,000 workflow runs a month; Pro $30 a month (monthly)Priced in workflow runs, not emails
CourierTemplates and profiles across many channelsDeveloper free for 10,000 sends a month; Business $0.005 per sendRouting lives in the dashboard, which adds an abstraction layer
React EmailWriting templates as React componentsOpen-source library; pay the sending providerDoes not send; needs a provider such as Resend

The table gives the starting point of each tool, not the full cost. A starting price is the lowest paid plan on the vendor's pricing page at the volume shown. It does not include taxes, add-ons, overages or the time spent on setup. Read the limitation column as a reason to check a fact on the vendor's site before you commit, not as a verdict on the product.

Monthly cost at three realistic list sizes

Tool Plans used 10,000 emails a month 50,000 emails a month 100,000 emails a month
Resend Pro (50,000 emails a month); Scale (100,000 emails a month) $20 (Pro, covers 50,000) $20 (Pro) $90 (Scale)
Postmark Basic, starting at 10,000 emails a month $15 (Basic) $55 (Basic at 50,000) Not listed at 100,000; $115 at 125,000 (Basic)
Mailgun Basic, Foundation, Scale $15 (Basic) $35 (Foundation) $90 (Scale)
SendGrid Essentials, 50,000 to 100,000 emails a month No band listed at 10,000; the 6,000-email free Marketing plan is below this volume $19.95 (Essentials) $19.95 (Essentials, top of band)
Loops Growing Audience, unlimited sends to subscribers $99 (Growing Audience) $99 (Growing Audience) $99 (Growing Audience)
Amazon SES Essentials, $0.16 per 1,000 emails $1.60 (10 × $0.16) $8.00 (50 × $0.16) $16.00 (100 × $0.16)
Plunk Pay as you grow, $0.001 per email $10 (10,000 × $0.001) $50 (50,000 × $0.001) $100 (100,000 × $0.001)
Courier Developer free to 10,000 sends; Business $0.005 per send $0 (Developer) $250 (50,000 × $0.005, Business) $500 (100,000 × $0.005, Business)

Figures are monthly list prices from each vendor's pricing page, checked on 7 October 2026. Where a figure is a unit price multiplied by a volume, the arithmetic is shown. Taxes, add-ons and usage beyond a plan's included volume are not included. Where the vendor's pricing page does not list a band that covers a volume, the cell says so instead of estimating a price.

How to read the cost table

Start with two numbers: how many emails you will send in a normal month and how many in a launch month. For per-email tools such as Resend, Postmark, Mailgun, SendGrid, Amazon SES and Plunk, the first number decides most of the cost. A launch month can push you into the next plan band, so budget for it rather than for the average.

For Loops the second number matters more: how fast the contact list will grow. The Growing Audience plan is listed at $99 a month with unlimited sends to subscribers, so a product that mails its list often gets more value per dollar than one that sends little. The pricing page should be checked at your expected contact count before you commit.

A product that sends a few thousand receipts a month pays little on any tool here, so the choice should turn on setup time, fit and the number of channels rather than on the first line of the table. A product that sends several hundred thousand messages a month should compare the per-email tools directly, and should pay close attention to Amazon SES and Plunk, whose unit rates are the lowest on the list.

Courier and Novu price by sends and workflow runs rather than by email. Convert their numbers before you compare them. For Courier, the Business rate of $0.005 per send means 10,000 sends cost $50 on that plan, but the Developer plan includes 10,000 sends a month for free, which is why the table shows $0 at that volume. For Novu, a workflow run is not the same as a single email, because one run can include several steps across channels.

Email tools for Cursor developers, one by one

Each section covers what the tool does well for a TypeScript developer using Cursor, where it falls short, what it costs and where to read the current pricing.

Resend

A small send API with React Email templates

$20 a month for 50,000 emails

Free: 3,000 emails a month, 100 a day, 3 domains. Pro: $20 a month (monthly billing) for 50,000 emails a month. Scale: $90 a month for 100,000 emails a month.

Best for

TypeScript apps that build email templates as React components and send product email from the same codebase

What it does well for Cursor developers

Resend is the default pick in this guide for a Cursor developer building a TypeScript SaaS app that sends its own product email. The reason is the shape of the API. You create one client, call one send method, and get back a result that is either data or an error. There is little configuration to get wrong, and the happy path is short enough to read at a glance. That matters when you review a generated diff, because a short diff is easier to check than a long one.

The React Email connection is the feature that separates Resend from the rest of the list for this audience. The send call accepts a React element in its react field, so the template is an ordinary TSX component that sits beside the rest of the application code. Cursor can edit those components the same way it edits interface components. You can change a heading, add a prop or map over a list of items without writing HTML strings by hand. The example in the workflow section shows the pattern.

The limits are worth planning for early. The free plan caps sending at 100 emails a day, which is enough for development and a small launch but not for a busy onboarding flow. Broadcast marketing is a separate purchase: the pricing page lists $40 a month for 5,000 contacts with unlimited broadcast sending on that tier, and $80 a month at 10,000 contacts. If the product also needs a newsletter to a large list, check that ladder before committing, because transactional and marketing costs are different line items on the bill.

A practical way to use Resend is to keep one send module in the repository. It holds the client, exports a small set of functions such as sendWelcome or sendInvoice, and returns a consistent result shape. The rest of the application imports those functions and never calls the provider directly. That structure makes it easy for Cursor to add a new email in one place, and it makes a future provider change a contained task rather than a search through the whole codebase.

Strengths

  • One predictable send call that Cursor completes reliably
  • React Email templates that keep email markup in typed components
  • A free plan that covers 3,000 emails a month for development and early traffic
  • Clear plan steps from 50,000 to 100,000 emails a month

Where it falls short

  • The free plan allows 100 emails a day, so load testing needs a paid plan
  • Marketing contact tiers are bought separately from transactional sending
  • Lifecycle sequences and branching logic are not the product focus, so you write more of that logic yourself

Key limitation: The free plan allows 100 emails a day, and marketing contacts are priced on a separate ladder

Resend pricing page

Postmark

Transactional email with a long track record

$15 a month for 10,000 emails

Free: 100 emails a month with no overages. Basic: $15 a month for 10,000 emails. Pro: $16.50 a month at the same starting volume. Platform: $18 a month at the same starting volume. Volume readouts on the pricing page show Basic at $55 a month for 50,000 emails and $115 a month for 125,000 emails.

Best for

Sign-in codes, password resets, receipts and other mail that a user is waiting for

What it does well for Cursor developers

Postmark is the choice when the message in question is a transaction: a sign-in code, a password reset, an invoice or a shipping notice that a user expects. Its product is built around that job, and the API reflects it. There is no marketing campaign builder to filter past when Cursor writes a send call, and parameter names such as From, To, Subject and HtmlBody match how most developers already describe a message.

For a Cursor developer, one of Postmark's strengths is how common its integration patterns are. Examples for Node.js, Express and Next.js are widespread, so the code an editor suggests for a standard send usually follows the familiar form. Templates can be defined in the Postmark dashboard with placeholders. Your code then sends a template alias and a data object, which keeps HTML out of the generated code and reduces the chance that an editor produces markup that renders poorly in some mail clients.

The trade-offs are scope and volume. The free plan of 100 emails a month is useful for confirming that a domain and API key work, but it will not carry a staging environment for long. Paid plans begin at 10,000 emails a month, so a small product with a few hundred users pays for capacity it does not yet use. On the other side, the price is flat and easy to forecast. If your main concern is that a password reset never goes missing, Postmark is a strong fit. If you also want a newsletter, a visual journey builder and contact segments in one product, look at Loops or Resend first.

Postmark also suits teams that want a clear separation between transactional and marketing traffic. Because the product is focused, the operational questions are narrower: how a template is versioned, how bounces are reported and how a message is retried. Those are the questions a Cursor developer should put to the editor when generating a webhook handler for bounce events, and they are easier to answer when the provider's scope is small.

Strengths

  • Transactional mail where delivery speed and reliability are the priority
  • Template aliases in the dashboard keep HTML out of generated code
  • A widely seen integration pattern, which helps AI suggestions
  • Flat, easy-to-forecast monthly plans starting at 10,000 emails

Where it falls short

  • The free plan is for trying the service, not for a staging load
  • Marketing campaigns and contact segmentation are not the main product
  • The smallest paid plan starts at 10,000 emails a month

Key limitation: Built for transactional mail, so broadcast marketing is not the focus

Postmark pricing page

SendGrid

Email API and marketing tools from Twilio

$19.95 a month for 50,000 to 100,000 emails

Email API free trial: 100 emails a day for 60 days. Marketing Campaigns free plan: up to 2,000 contacts and 6,000 emails a month. Essentials: $19.95 a month for 50,000 to 100,000 emails. Pro: $89.95 a month for 100,000 to 2,500,000 emails. Premier and Custom are priced on request.

Best for

Teams that already use Twilio, or that need a wide API surface covering transactional, marketing and analytics

What it does well for Cursor developers

SendGrid is the widest product in this guide. It covers transactional sending, marketing campaigns, contact management and analytics under one account, and its Node.js package ships type information your editor can use. For a Cursor developer the value is coverage: if a feature exists in the email world, SendGrid probably offers it, and the documentation includes examples for most endpoints in several languages.

The same breadth is the main difficulty for AI-assisted coding. SendGrid has been in wide use for many years, so public training data includes examples that use older endpoints and deprecated methods next to current ones. When you prompt Cursor, name the package you want (@sendgrid/mail), say you want the v3 API, and ask the editor to match the current documentation. Without that context, a generated integration may compile and still use a pattern you would not choose today. Read the import lines and endpoint paths before you accept a large generated block.

Cost depends on which product you buy. The Email API free trial gives 100 emails a day for 60 days. The Marketing Campaigns free plan covers up to 2,000 contacts and 6,000 emails a month. Essentials at $19.95 a month covers 50,000 to 100,000 emails, and Pro at $89.95 a month covers 100,000 to 2,500,000 emails, as shown in the plan selector. Because these ranges are selector bands, confirm the exact tier for your volume before you commit. Ownership by Twilio may matter if your company already has an account, but it does not change the price or the feature set described here.

SendGrid rewards teams that plan to use more than sending. If you expect to run marketing campaigns, manage contact lists and read engagement analytics from the same account, the single-account model avoids stitching three tools together. The cost is that the first integration can feel heavy. A useful discipline is to start with one transactional send, prove it end to end, and only then turn on the marketing features that need separate contact handling.

Strengths

  • Broad coverage across transactional, marketing and analytics needs
  • Many public examples, so common send patterns generate reliably
  • A free trial and a free marketing tier for small lists
  • Essentials pricing for 50,000 to 100,000 emails a month

Where it falls short

  • Older endpoint examples can appear in AI suggestions
  • Plan ranges in the selector make exact cost comparisons slower
  • The breadth of features can make the first integration feel heavy

Key limitation: The API surface is large, and older endpoint examples mix with current ones in AI suggestions

SendGrid pricing page

Mailgun

Email APIs with control over domains, regions and routing

$15 a month for 10,000 emails

Free: 100 emails a day. Basic: $15 a month for 10,000 emails. Foundation: $35 a month for 50,000 emails, with one month free on Foundation and Scale according to the pricing page. Scale: $90 a month for 100,000 emails. Overages for email and validation are billed on usage.

Best for

Developers who want to manage sending domains, regions and message routing themselves

What it does well for Cursor developers

Mailgun suits a team that treats email as part of its infrastructure rather than as a feature of the product. It offers a REST API and SMTP relay, and its JavaScript SDK covers the operations most teams need: sending messages, managing domains and reading event data. The SDK is organised around the domain you send from, which is a slightly different mental model from the single-client pattern used by Resend. Once that model is clear, the code is consistent, and the editor can complete options using type information.

For a Cursor developer, most of the work is in configuration. Mailgun exposes more settings than most tools in this guide, and generated code is only as correct as the options you name. Tell the editor which region your domain lives in, whether you need SMTP or the REST API, and how you want delivery events handled. Ask it to read the current SDK types before writing the call. This is slower than a short prompt, but it prevents a client that works in development and fails in production because a domain or region is misconfigured.

The pricing model is a useful reminder about list quality. Plans are sized by monthly email volume, and usage beyond the plan is billed for email and for validation overages. That means sending to addresses that bounce is not only a reputation problem; it can appear as a line item when validation is part of your usage. For a SaaS team that collects sign-up addresses in bulk, a verification step before the first send is worth designing in from day one. Mailgun does not replace a dedicated verification service, but it is a sensible place to route mail once the list has been cleaned.

Mailgun's configuration depth also means more to review. When Cursor generates a routing rule or a webhook handler, check which domain it is bound to, whether it assumes a region and what it does with events it does not recognise. These are small details, but they are the details that decide whether a generated change behaves the same in staging and production.

Strengths

  • Fine-grained control over domains, regions and routing
  • REST and SMTP options in one account
  • Monthly plans sized by email volume for predictable budgeting
  • A one-month free period on Foundation and Scale according to the pricing page

Where it falls short

  • Configuration is heavier than Resend or Postmark for a first integration
  • Overage charges include validation, so list hygiene affects cost
  • AI suggestions need explicit prompts about the domain and region model

Key limitation: Domain, region and routing setup takes more attention than simpler APIs

Mailgun pricing page

Loops

Email for SaaS products, priced by contacts

$99 a month on the Growing Audience plan

Early Stage: free, up to 4,000 sends in any rolling 30 days to the 1,000 newest contacts, with a Loops footer. Growing Audience: $99 a month for unlimited sends to subscribers, with transactional sends to users outside your audience included.

Best for

SaaS teams that want product emails, lifecycle sequences and newsletters on one contact record

What it does well for Cursor developers

Loops is built for the product email a SaaS team sends after a user signs up, upgrades or stops using a feature. Its model is event-based: your application tracks an event such as a completed onboarding step, and the sequence attached to that event sends the email. For Cursor this is a clean division of labour. The generated code tracks the event and passes the data, while the timing and copy live in the Loops dashboard. The repository stays small, and fewer business rules sit in code that needs a deploy to change.

The pricing is contact-based, which differs from the per-email model used by most other tools here. The Early Stage plan allows up to 4,000 sends in any rolling 30 days to the 1,000 newest contacts, and the emails carry a Loops footer. The Growing Audience plan at $99 a month includes unlimited sends to subscribers, plus transactional sends to users outside the audience. The practical question is therefore how many contacts you will have in twelve months, not how many emails you will send in one month.

Loops makes sense when marketing and transactional mail should share one contact record, so that a user who unsubscribed from a newsletter is treated consistently by a product email. It is less attractive for a high-volume transactional stream with a small contact list. If your product only sends receipts and password resets, compare the monthly cost against Postmark or Resend. If you want one place to see who received what and when, Loops is easier to reason about than several tools stitched together, provided its contact model matches how your product thinks about users.

For Cursor, the risk with event-driven tools is that a developer invents rules in code that belong in the dashboard. Ask the editor to send events and properties only, and keep the wording, timing and branching out of the repository. That keeps the integration reviewable and lets a non-engineer change the copy without a pull request.

Strengths

  • Event-driven lifecycle emails, with timing and copy kept outside the codebase
  • Transactional sends included on paid plans
  • One contact model for product and marketing mail
  • A free plan that is usable for early-stage products within its limits

Where it falls short

  • Early Stage sends carry a Loops footer and are limited to 4,000 in 30 days
  • Contact-based pricing makes list growth the main cost driver
  • Not the cheapest choice for high-volume transactional mail alone

Key limitation: The cost follows your contact list, so the list size must be forecast

Loops pricing page

Amazon SES

Low-cost email infrastructure inside AWS

$0.16 per 1,000 emails

Pay as you go. Essentials: $0.16 per 1,000 emails for 0 to 10 million emails a month. Pro: $0.22 per 1,000. Enterprise: $0.23 per 1,000. Eligible new AWS customers can receive up to $200 in credits, and a free plan is available for six months after account creation according to the pricing page.

Best for

Teams already running on AWS that send a high volume and can handle the setup work

What it does well for Cursor developers

Amazon SES has the lowest unit price among the sending tools here. Its rate is per thousand emails on the Essentials tier, and the same AWS account can connect to Lambda, SNS and CloudWatch. For a team that already runs its backend on AWS and sends a large volume of mail, the per-email cost is hard to beat, and the integration with existing infrastructure can justify the extra setup.

For Cursor developers, SES needs more deliberate prompting. The AWS SDK for JavaScript is modular, with the SES client in the @aws-sdk/client-ses package and a SendEmailCommand for sending. The types are comprehensive, and the editor can complete the command input well once the client is imported. The difficulty is that SES is one service among hundreds, so suggestions often borrow patterns from other AWS services. Name the package, name the command and name the region, and ask the editor to check the input shape against the types for your installed version.

The setup is the real cost. Before the first send you must verify a domain, configure DKIM and bounce handling, request a production sending limit if needed and grant the right IAM permissions. None of this is hard for an AWS-experienced developer, but it is a step that a dedicated email API often avoids. If the team is small and the monthly volume modest, the saving at $0.16 per thousand emails may not cover the hours spent on setup. Price the setup time alongside the sending cost before choosing SES.

SES also works well as a back end behind another layer. Some teams keep templates and sequencing in a separate product and use SES only as the sender, which keeps AWS work contained. Ask the editor to write the sender as a small function with a typed input, so that a later move to another provider changes one file.

Strengths

  • Lowest per-email price among the sending tools here, from $0.16 per 1,000 emails
  • Native connection to other AWS services
  • Typed AWS SDK v3 with modular imports
  • Volume tiers that continue to 10 million emails a month at the Essentials rate

Where it falls short

  • Domain, IAM and sending-limit setup happens before any code runs
  • AI suggestions drift across AWS services without specific prompts
  • Less direct help with templates and product email logic

Key limitation: Domain verification, IAM permissions and sending limits must be set up before the first send

Amazon SES pricing page

Plunk

Open source email platform for developers

Free for 1,000 emails a month

Free forever: 1,000 emails a month with unlimited contacts, transactional emails, workflow automation and custom domains, with Plunk branding on emails. Pay as you grow: $0.001 per email ($1 per 1,000), with no branding, a monthly spend cap and unlimited emails.

Best for

Developers who want an open-source option, a managed service or a self-hosted route

What it does well for Cursor developers

Plunk is an open-source email platform with a managed service and a self-hosted option. The free tier covers 1,000 emails a month with unlimited contacts, and the pay-as-you-grow rate is $0.001 per email. That gives a clear per-email price, and the monthly spend cap helps keep a sudden spike from becoming a surprise bill. For a Cursor developer, the main attraction is that the source code is visible. When a generated call behaves in a way you did not expect, you can read the implementation rather than guess.

The React SDK gives Plunk an angle for a React or Next.js app. Hooks follow conventions that AI models know well, so the code an editor writes for a hook is usually familiar. The SDK covers the core operations: sending transactional emails, managing contacts and tracking events. The API surface is small, which keeps autocomplete relevant and reduces the number of options Cursor must choose between.

Plunk has a smaller ecosystem than Resend or SendGrid, with fewer public examples in documentation, tutorials and training data. Generated code may need closer review, so check each call against the Plunk documentation. The self-hosted route also adds operational work: running the service, keeping it updated and managing its database. If you need that control, it is valuable. If you only want a sender that works, a managed provider is less work.

On the free plan, emails carry Plunk branding, which matters if you send anything customer-facing before you upgrade. Move to the pay-as-you-grow rate before launch if branding would be visible to your users, and set the monthly spend cap while you are still learning the volume pattern.

Strengths

  • A clear per-email price of $0.001 with a monthly spend cap
  • Visible open-source code for debugging generated calls
  • A React SDK with hooks that follow familiar patterns
  • Unlimited contacts on the free plan

Where it falls short

  • Fewer public examples, so generated code needs closer review
  • Free plan sends carry Plunk branding
  • Self-hosting adds operational work for your team

Key limitation: A smaller ecosystem and fewer public examples than the larger providers

Plunk pricing page

Novu

Notification infrastructure across channels

Free for 10,000 workflow runs a month

Free: $0 a month for 10,000 workflow runs a month, up to 20 workflows, 2 environments and 3 team members. Pro: $30 a month for 30,000+ workflow runs. Team: $250 a month for 250,000+ workflow runs.

Best for

Apps that send email, in-app, SMS or push notifications from one workflow with user preferences

What it does well for Cursor developers

Novu is a notification platform. You define a workflow once, with steps for email, in-app, SMS, chat or push, and then trigger that workflow from your application with a subscriber and a payload. For a Cursor developer, the main benefit is that the trigger code stays the same as channels are added. The editor writes one trigger call, and routing and preference logic live in the workflow definition. This is useful when a notification must respect user preferences across several channels.

The TypeScript SDK is built around this model, and the types for triggers, subscribers and payloads help the editor produce calls that match what the workflow expects. Novu also offers a self-hosted option, which some teams prefer for control. The explanation is the part that needs care. Because the platform is about notifications, describe the whole picture to the editor. A prompt such as "send an invoice email and an in-app notice, skipping the email when the user has opted out" gives Cursor enough context to choose the right trigger and subscriber calls.

The limit is scope. If you only need receipts and password resets, Novu adds a layer you may not need, and its pricing is measured in workflow runs rather than emails, so comparing it with per-email providers takes a conversion step. Read how runs are counted on the pricing page before you forecast. If your product already has several notification channels, the single workflow model usually saves more time than it costs.

Novu's free plan is generous for a prototype: 10,000 workflow runs a month, up to 20 workflows and two environments. Use the two environments to keep a staging workflow separate from production, and ask Cursor to read the environment key from configuration rather than hardcoding it in the trigger.

Strengths

  • One workflow for email, in-app, SMS, chat and push
  • Typed triggers and payloads that match workflow definitions
  • A free plan with 10,000 workflow runs a month and two environments
  • Self-hosting as an option for teams that need control

Where it falls short

  • An extra layer if you only send transactional email
  • Pricing uses workflow runs, so comparisons need a conversion step
  • Prompts must describe the full notification flow to get good suggestions

Key limitation: Priced in workflow runs, so it is a notification platform rather than only an email sender

Novu pricing page

Courier

One notification API across many delivery channels

Free for 10,000 sends a month

Developer: free, with 10,000 sends a month, journeys and broadcasts, and the MCP server, CLI and SDKs. Business: pay as you go at $0.005 per send. Enterprise: custom pricing with volume discounts.

Best for

Teams that want templates, recipient profiles and several channels behind one API

What it does well for Cursor developers

Courier provides one API for sending notifications through email providers, SMS services, push platforms and chat tools. Your code triggers a template with typed data, and Courier decides how the message reaches the recipient based on configuration in its dashboard. For a Cursor developer this keeps generated code short and stable. The editor does not need to know whether a message goes to email, a chat channel or a mobile push, because that is a dashboard decision.

Courier also stores recipient profiles and preferences, so a trigger can carry only the data that changes per event. The SDKs and the CLI make the integration routine, and the MCP server is useful if you work with AI tools that connect to external services. Journeys and broadcasts are included in the Developer plan according to the pricing page, which lets you build a real flow before you pay for volume. For the Business plan, the pay-as-you-go rate is $0.005 per send.

The main limitation is that the abstraction is only as useful as your need for it. If your product sends one kind of email, a provider such as Postmark or Resend is simpler, and the logic is easier to read in the repository. Courier earns its place when the same event must reach several channels and recipient preferences must be honoured everywhere. Tell the editor that template and channel decisions belong in the dashboard, so generated code does not try to reproduce them.

Arithmetic is useful for Courier because the Business rate is per send. At 50,000 sends a month, the rate gives 50,000 × $0.005, which is $250. At 100,000 sends it is $500. Those figures are simple to check, and they should be compared with a per-email plan at the same volume before you pick a multi-channel tool for a single-channel need.

Strengths

  • One API for email, SMS, push and chat
  • Templates and recipient profiles that keep trigger code small
  • A free Developer plan with 10,000 sends a month
  • Pay-as-you-go pricing on the Business plan at $0.005 per send

Where it falls short

  • Adds a layer that is unnecessary for single-channel email
  • Routing decisions live in the dashboard, not in your code
  • Business plan pricing is per send, so high volume needs a calculation

Key limitation: An abstraction layer, so channel-specific details live in the dashboard

Courier pricing page

React Email

Email templates written as React components

Open-source library; pay your sending provider

React Email is an open-source rendering library. The cost you carry is the cost of the provider that sends the rendered messages, so check the pricing page of the provider you choose.

Best for

Teams writing templates in TSX and sending them through a provider that accepts rendered output

What it does well for Cursor developers

React Email is a set of components for building email templates in React. Layout components such as Container, Section and Button produce markup designed for email clients, and the components expose typed props, so an editor can complete them and flag unsupported values. The library does not send mail. Your application renders a component to HTML, or passes the element to a provider that accepts React Email components, and that provider handles delivery.

For a Cursor developer the appeal is that templates become ordinary React code. Cursor can help compose a layout, map over a list of features or extract a shared footer, using patterns it already knows from interface work. A local preview server lets you check how a template looks while you edit it. Keep the template free of business logic, because the data should arrive as props from the code that triggers the email. A template that calls a database is harder to preview and harder to test.

React Email is not a provider, so you still need a sender. Pair it with Resend, which accepts React Email components directly, or with any provider that accepts rendered HTML. Test the output in the mail clients your users run, because the components reduce common problems but do not guarantee identical rendering everywhere. Keep a small set of preview fixtures so that each template can be rendered with realistic and edge-case data, such as a very long name or an empty feature list.

Strengths

  • Typed components for email layout
  • Template code that matches normal React patterns
  • Works with several providers, including Resend
  • A local preview loop while you edit

Where it falls short

  • Does not send, store or track email
  • Still needs testing across mail clients
  • Templates alone do not provide sequences or contact data

Key limitation: It renders templates but does not send, store or track email

React Email pricing page

List verification: ZeroBounce, NeverBounce and Kickbox

The sending tools above deliver mail; they do not decide whether an address is real before you send to it. Verification services check addresses for syntax, domain health and mailbox status, and they are the usual way to keep bounce rates down when a list is built from sign-up forms, imports or purchased contacts. Three services come up most often in this context: ZeroBounce, NeverBounce and Kickbox.

Where verification fits in a Cursor project

The natural place for verification is the sign-up or import path, before an address is written to the contact store. A small function can call the verification service, store the result as a field and block sending to addresses that fail. Ask Cursor to write that function as a separate module with a typed result, so the send path only reads a status and never calls the verifier itself.

ZeroBounce

ZeroBounce is a dedicated verification service. For a developer, the question is how its results map onto your own statuses: which results block a send, which should trigger a re-check and which are safe to keep. Check its pricing page for the current plans, because this guide does not list them.

NeverBounce

NeverBounce is also a list verification service, used most often for bulk cleaning of existing lists and for real-time checks at sign-up. When you integrate it, keep the bulk job and the real-time check separate in your code, because they have different latency and different failure modes. Read its pricing page directly; no price is given here.

Kickbox

Kickbox is a verification service with an API for checking single addresses and lists. It is a reasonable option to compare with the other two when the integration effort matters most. Look at how it reports uncertain results, because an address that cannot be confirmed needs a clear rule in your product: send, hold or ask the user to confirm.

None of these services is priced in this guide, because the pricing for each is set on its own site and changes with volume. Read each pricing page before you add a verification step to your budget, and compare the cost per verified address with the cost of a bounce spike on your sending domain.

How to choose an email API for a Cursor project

Start from the emails you need to send, not from the tool with the longest feature list. A password reset, a weekly digest and a launch announcement have different delivery needs, volumes and tolerance for setup time. Many teams end up with one provider for transactional mail and, if they need one, a second tool for marketing. Two tools that each do one job are often easier to live with than one tool that does everything at a mediocre level.

1. List the emails your product sends

Write down each message, its trigger and its expected monthly volume. Mark which ones are transactional, where a user is waiting for the message, and which are marketing, where a user may or may not be interested. This list decides whether you need a transactional provider, a lifecycle tool or both.

2. Decide where templates live

If you want templates in TSX, choose a provider that accepts React Email or rendered HTML. If you want content editors to change copy without a deploy, choose a provider with a dashboard template editor, and send template aliases from code. Choosing both without a clear rule creates two sources of truth, and Cursor will happily generate code for whichever one it saw most recently.

3. Forecast cost on two numbers

For per-email tools, forecast monthly sends, including a launch month. For contact-based tools such as Loops, forecast the contact list in twelve months. Use the cost table above and do the arithmetic for your own volume rather than an average guess.

4. Plan the list before the first send

Decide how addresses enter your system, whether they are verified and what happens to an address that bounces. Those rules matter more to deliverability than the choice of sender. A verification step, whether from ZeroBounce, NeverBounce, Kickbox or a built-in check, belongs in the design from the start.

5. Run the setup on a test domain

Before you commit, send one message through each shortlisted tool from a test domain. Note how long the setup took, how clear the error messages were and whether the generated code matched the documentation. The provider's own documentation is the reference you should trust when the two disagree.

Decision table: which tool for which need

If you need Pick Because Check first
A SaaS app with React email templates and a small team Resend One send call, React Email support and a free plan for early traffic The 100-a-day free cap before any load testing
Password resets and receipts that must arrive quickly Postmark Built for transactional mail, with template aliases that keep HTML out of code Whether you will ever need marketing sends from the same account
One contact list shared by a newsletter and product email Loops Event-driven sequences and one contact model Contact growth, because the cost follows the list
The lowest per-email price at high volume on AWS Amazon SES From $0.16 per 1,000 emails, with native AWS integration Setup time for domains, IAM roles and sending limits
Email, SMS and push from one notification workflow Novu or Courier Workflows or templates that route across channels How runs or sends are counted at your volume
An open-source option or a self-hosted route Plunk Open-source code, managed or self-hosted, and $0.001 per email Fewer public examples, so review generated code closely
Deep control over domains, regions and routing Mailgun REST and SMTP options with domain-level configuration Validation overage charges and the configuration effort
Broad marketing and analytics in one account SendGrid Coverage across transactional, marketing and analytics Older endpoint patterns in AI suggestions

Setup checklist for a TypeScript email integration

The steps below apply to any provider on this page. The order matters most at the start: a sending domain that has not yet been set up with its DNS records can fail in ways that look like code bugs, and the code will look correct while messages go nowhere. Work through the table in order, and ask Cursor to help with steps 3, 4 and 5 once the provider is chosen.

Step What to do Note
1. Verify the sending domain Add the SPF, DKIM and return-path records your provider gives you before the first send Do this before any code runs; it is the step most often skipped
2. Store the API key Keep the key in an environment variable and read it only in a server-side module Never place the key in a client component or a public file
3. Install one SDK Install the single package for your chosen provider and confirm its type exports Use the current package name from the provider documentation
4. Build one send path Write a single function that takes a template and a recipient and returns data or an error Keep sending in one module so later changes stay small
5. Handle errors by case Branch on the error result and log the provider message with an internal recipient ID Log IDs, not full addresses, and use the error shape your SDK defines
6. Send to a test inbox Send to an inbox you control and check the sender name, links and subject line Check the message in more than one mail client
7. Verify the list Run new sign-up addresses through an email verification service before they join a send list Verification services such as ZeroBounce, NeverBounce and Kickbox are separate products with their own pricing
8. Watch bounces and complaints Subscribe to bounce and complaint events and suppress addresses that fail Repeated bounces damage delivery for every message from the same domain

Working with Cursor on email code

Prompts and review habits that keep generated email code correct. The examples use Resend, Postmark and Amazon SES because they have the clearest send paths.

Prompt with the package, the version and the case

A useful prompt names the package, asks for the current type definitions to be read, and states the single case the code must handle. Vague prompts produce broad code that is harder to review. Ask for one send function first, then add error handling in a second pass, so each change is small enough to read.

// Resend: a send call with a React Email template
import { Resend } from 'resend';
import { WelcomeEmail } from '@/emails/welcome';

const resend = new Resend(process.env.RESEND_API_KEY!);

export async function sendWelcome(to: string, name: string) {
  const { data, error } = await resend.emails.send({
    from: 'hello@yourapp.com',
    to,
    subject: 'Welcome',
    react: WelcomeEmail({ name }),
  });

  if (error) {
    return { ok: false as const, reason: error.message };
  }
  return { ok: true as const, id: data.id };
}

Keep templates out of the send path

With Postmark, the template lives in the dashboard and the code passes an alias and data. The send function stays short, and a copy change does not need a code review. Ask the editor to keep HTML out of the file, and to pass only the fields the template declares.

// Postmark: a template defined in the dashboard
import { ServerClient } from 'postmark';

const client = new ServerClient(process.env.POSTMARK_API_KEY!);

export async function sendReceipt(to: string, orderId: string) {
  return client.sendEmailWithTemplate({
    From: 'billing@yourapp.com',
    To: to,
    TemplateAlias: 'receipt',
    TemplateModel: { orderId },
  });
}

Check the region and identity for AWS

For Amazon SES, ask the editor to read the SES client and command types for your installed version, and confirm that the region and sender identity match the verified domain. A sender that has not been verified in the same region produces an error that is easy to misread as a code problem.

// Amazon SES: AWS SDK v3 with a verified sender
import { SESClient, SendEmailCommand } from '@aws-sdk/client-ses';

const ses = new SESClient({ region: process.env.AWS_REGION });

export function sendNotice(to: string, body: string) {
  return ses.send(
    new SendEmailCommand({
      Source: 'hello@yourapp.com',
      Destination: { ToAddresses: [to] },
      Message: {
        Subject: { Data: 'Account notice' },
        Body: { Text: { Data: body } },
      },
    })
  );
}

Review every generated block for the failure path

Generated code usually handles the success case well. Before you accept a block, check what happens on rate limits, invalid addresses and provider outages. Make sure a failed send is logged with an internal ID rather than the full address, and that a retry cannot send the same message twice. A retry needs an idempotency key or a stored send record, and the editor will not add one unless you ask.

Keep the event payloads small

With event-based tools such as Loops, or with workflow tools such as Novu and Courier, the trigger should carry only the fields that change per event. Ask Cursor to list the payload fields it sends and to justify each one. Extra fields are easy to add and hard to remove once other systems rely on them.

List quality and deliverability in the build

Sending tools do not decide whether an address is real. A message to a mistyped or abandoned address bounces, and repeated bounces make later mail less likely to arrive from the same domain. The sensible design is to verify addresses at sign-up or import, suppress any address that hard-bounces, and watch complaint rates from the first send. This is the work that ZeroBounce, NeverBounce and Kickbox are built for, and it is separate from the sending price on every tool in this guide.

Authentication matters as much as list quality. SPF, DKIM and a return-path domain tell receiving servers that your application is allowed to send for your domain. Each provider on this page gives you the records during setup. Add them before the first production send, and keep them in your infrastructure code or documentation, so a future change does not remove them without anyone noticing.

Keep transactional and marketing mail separate in your code even when they share a provider. A password reset should not depend on the success of a newsletter, and a bounce spike in a campaign should not slow the receipts that customers are waiting for. Use separate sending identities or streams where the provider offers them, and separate alerts so that problems are easier to find.

Finally, treat complaints as a signal, not a nuisance. A rising complaint rate usually means the mail is unexpected, too frequent or hard to unsubscribe from. Put an unsubscribe path on every marketing message, honour it at once in the contact store, and make sure the transactional flows you send never depend on a marketing preference they should not be bound by.

Frequently Asked Questions

Common questions about choosing and using email APIs with Cursor IDE and TypeScript.

Which email API is the best starting point for a Cursor developer building a SaaS app?

Resend is the default starting point in this guide. Its send call is short, React Email templates keep markup in typed components, and the free plan covers 3,000 emails a month. The Pro plan is $20 a month, billed monthly, for 50,000 emails a month, according to the Resend pricing page. If your sending is strictly transactional, Postmark is the other strong option, with its Basic plan at $15 a month for 10,000 emails.

How do I keep AI-generated email code from using outdated SDK patterns?

Name the exact package and version in the prompt, ask the editor to read the current type definitions before writing the call, and compare the import lines and endpoint paths with the provider documentation. This matters most for SendGrid, which has a long history of examples in public training data, and for Mailgun, where the client depends on the sending domain.

Is Amazon SES really the cheapest option?

On the sending rate alone, Amazon SES is the lowest of the sending tools on this page: $0.16 per 1,000 emails on the Essentials tier for 0 to 10 million emails a month, according to the AWS pricing page. Plunk at $0.001 per email is a higher unit price than SES. The cost of setting up domains, IAM permissions and sending limits should be counted too, and for a small team it can outweigh the saving.

Should I use React Email with Resend?

Yes, if your templates are written in React. Resend accepts React Email components in its send call, so the template stays in a TSX file beside the rest of the code. React Email does not send mail itself, so you still need a provider. It also does not guarantee identical rendering in every mail client, so test the output before you rely on it.

How does contact-based pricing like Loops differ from per-email pricing?

Per-email tools charge for each message, so the cost follows your send volume. Loops prices the Growing Audience plan at $99 a month with unlimited sends to subscribers, so the decision follows the size and growth of your contact list. Estimate both your list size in twelve months and your monthly send volume before comparing the two models.

Do the sending tools on this page verify email addresses?

Not in the sense of a dedicated verification service. Mailgun lists validation among its usage charges, but a verification step is still a separate design decision. ZeroBounce, NeverBounce and Kickbox are dedicated list verification services. This guide does not list their prices, so read the pricing page of any service you consider before you add it to your sign-up flow.

What should I do before the first production send?

Verify the sending domain with SPF, DKIM and return-path records, store the API key in a server-only environment variable, send test messages to an inbox you control, and set up bounce and complaint handling. Then send to a small group before you open the send path to every user.