Vercel OSS

badge 13email platform forbadge 13builders
focus on your product, not configs

stop messing with multiple providers and ancient sdks inbound is the easiest way to send, receive, and reply to emails in your app

npm i @inboundemail/sdk

trusted by builders at:

neonchurchspace

the problem: email hell

you've been there. spending days configuring SMTP, parsing raw email headers, dealing with bounces...

node.jsnode.js
// You can't even get webhooks from existing providers 😢
const nodemailer = require('nodemailer')
const transporter = nodemailer.createTransporter({
  host: 'smtp.gmail.com',
  port: 587,
  secure: false,
  auth: { user: process.env.EMAIL, pass: process.env.PASSWORD },
  tls: { rejectUnauthorized: false }
})

// No webhook support - you're on your own
app.post('/webhook', (req, res) => {
  const rawEmail = req.body
  // Now what? Parse headers? Handle attachments? 
  // Good luck with that...
})

the solution: inbound ✨ magic

what if sending and receiving emails was as simple as making an API call?

node.jsnode.js
// With Inbound ✨
import { Inbound } from '@inboundemail/sdk'

const inbound = new Inbound(process.env.INBOUND_API_KEY!)

// Send email (Resend-compatible)
await inbound.emails.send({
  from: 'hello@yourdomain.com',
  to: 'user@example.com',
  subject: 'Welcome!',
  html: '<p>Thanks for signing up!</p>'
})

// That's it. No SMTP. No config. Just works.

the superpower: auto-reply

build AI agents that actually respond to emails. no more manual parsing or threading nightmares.

node.jsnode.js
const inbound = new Inbound(process.env.INBOUND_API_KEY!)

export async function POST(request: NextRequest) {
  try {
    const payload: InboundWebhookPayload = await request.json()
    
    const { email } = payload
    
    const { text } = await generateText({
      model: openai("o3-mini"),
      prompt: """
      You are a custom support agent for
      a company called "Inbound"
      The email is: ${email.subject}
      The email body is: ${email.html}
      """
    })

    await inbound.reply(email, {
      from: 'support@yourdomain.com',
      text: text,
      tags: [{ name: 'type', value: 'auto-reply' }]
    })
    
    return NextResponse.json({ success: true })
  } 
}

let's be honest about email

What You're Probably Doing Now

• Googling "how to send email in Node.js" for the 17th time

• Wrestling with nodemailer configuration that breaks in production

• Manually parsing email headers like it's 1995

• Building your own webhook endpoint and hoping it works

• Spending more time on email than your actual product

inbound to the rescue

What You Could Be Doing

node.jsnode.js
// Install once
npm install @inboundemail/sdk

// Send emails forever ♾️
await inbound.emails.send(emailData)

// That's it. Seriously.

@inboundemail/sdk

The simplest way to handle email in your applications. Send, receive, and reply with full TypeScript support.

Send

node.jssend.js
await inbound.emails.send({
  from: 'hello@yourdomain.com',
  to: 'user@example.com',
  subject: 'Welcome!',
  html: '<h1>Thanks for signing up!</h1>'
})

Receive

node.jsreceive.js
export async function POST(req: Request) {
  const { email } = await req.json()
  
  // Email parsed & ready to use
  console.log(email.subject, email.html)
  
  return Response.json({ success: true })
}

Reply

node.jsreply.js
await inbound.reply(email, {
  from: 'support@yourdomain.com',
  text: 'Thanks for your message!',
  tags: [{ name: 'type', value: 'auto-reply' }]
})

ready to escape email hell?

Stop wasting time on email infrastructure. Start building features that matter.