Nodemailer memiliki 5,2 juta unduhan npm mingguan dan telah menjadi standar untuk email Node.js sejak 2010. Resend memiliki 500K unduhan mingguan tapi diluncurkan hanya di 2022 dan berkembang pesat. Perbandingan ini bukan hanya tentang unduhan — ini tentang apa yang sebenarnya Anda dapatkan. Nodemailer adalah lapisan transport; ia terhubung ke server SMTP tapi deliverability, reputasi IP, dan infrastruktur sepenuhnya tanggung jawab Anda.
Nodemailer adalah library klien SMTP untuk Node.js. Ia terhubung ke server SMTP apa pun — Gmail, SendGrid, Mailgun, server Postfix Anda sendiri — dan mengirim email melaluinya. Yang BUKAN: ini bukan layanan pengiriman email. Nodemailer tidak memiliki server, tidak mengelola reputasi IP, tidak menangani bounce, dan tidak menyediakan analitik. Jika Anda menggunakan Nodemailer dengan SMTP Gmail, Anda dibatasi 500 email/hari dan tunduk pada filter spam Gmail.
DX Resend benar-benar sangat baik. SDK adalah TypeScript-first dengan API yang bersih — satu panggilan fungsi, mengembalikan promise. Integrasi React Email native memungkinkan Anda menulis template email sebagai komponen React — JSX dalam email Anda dengan komposisi komponen nyata dan keamanan TypeScript. Untuk pengembang Next.js yang sudah berpikir dalam komponen React, alur kerja ini alami.
Nodemailer (SMTP client) Resend (managed API)
──────────────────────── ─────────────────────────
Your App Your App
│ │
▼ ▼
Nodemailer createTransport() resend.emails.send({
│ from: 'hello@yourdomain.com',
▼ to: user.email,
SMTP Server (your choice): react: <WelcomeEmail name={name} />,
├── Gmail: 500/day limit })
├── AWS SES: $0.10/1k (cheap)
├── Your Postfix: IP reputation? Resend handles:
└── SendGrid: requires setup ├── IP reputation (managed)
├── SPF/DKIM/DMARC
npm downloads (2025): ├── Bounce processing
Nodemailer: 5.2M/week ├── Complaint handling
Resend: 500K/week (growing fast) └── Analytics dashboard
Pricing comparison:
Resend: $0.40/1k emails (free tier: 3k/month)
SES: $0.10/1k emails (but: your infrastructure)
Postmark: $1.50/1k emails (premium deliverability)
Gmail: Free but 500/day cap → breaks in productionDari mengintegrasikan Resend dalam SaaS produksi: gunakan React Email untuk semua template email transaksional, bahkan yang sederhana. Model komponen memberikan manfaat ketika Anda perlu memperbarui branding — ubah satu wrapper EmailLayout dan setiap template diperbarui. Dengan Nodemailer + template HTML mentah, pembaruan merek mengharuskan menyentuh setiap file template. Server preview React Email (email.dev) juga membuat iterasi pada template jauh lebih cepat.
Deliverability email kompleks — penempatan inbox bergantung pada reputasi IP pengiriman, autentikasi domain (SPF, DKIM, DMARC), metrik keterlibatan, dan tingkat keluhan. Resend (dan penyedia terkelola lainnya seperti Postmark dan SendGrid) mempertahankan IP pengiriman yang hangat dengan reputasi yang mapan, menangani pemrosesan bounce dan keluhan secara otomatis, dan memberikan panduan pengaturan autentikasi domain. Saat Anda menggunakan Resend, Anda mewarisi reputasi IP mereka.
# Install
npm install resend @react-email/components
# emails/WelcomeEmail.tsx (React Email component)
import { Html, Head, Body, Container, Text, Button } from "@react-email/components"
export function WelcomeEmail({ name, loginUrl }: { name: string; loginUrl: string }) {
return (
<Html>
<Head />
<Body style={{ fontFamily: "Inter, sans-serif", backgroundColor: "#f4f4f5" }}>
<Container style={{ maxWidth: "560px", margin: "40px auto", padding: "40px", backgroundColor: "#fff", borderRadius: "12px" }}>
<Text style={{ fontSize: "24px", fontWeight: "bold" }}>Welcome, {name}!</Text>
<Text>Your account is ready. Click below to log in.</Text>
<Button href={loginUrl} style={{ backgroundColor: "#3b82f6", color: "#fff", padding: "12px 24px", borderRadius: "8px" }}>
Log In Now
</Button>
</Container>
</Body>
</Html>
)
}
# app/api/send-welcome/route.ts
import { Resend } from "resend"
import { WelcomeEmail } from "@/emails/WelcomeEmail"
const resend = new Resend(process.env.RESEND_API_KEY)
export async function POST(req: Request) {
const { email, name } = await req.json()
const { data, error } = await resend.emails.send({
from: "Matthews Wong <hello@matthewswong.com>",
to: email,
subject: "Welcome to the platform",
react: <WelcomeEmail name={name} loginUrl="https://app.example.com/login" />,
})
if (error) return Response.json({ error }, { status: 500 })
return Response.json({ id: data?.id })
}
# Local development with Nodemailer + Ethereal (no real emails sent)
import nodemailer from "nodemailer"
const testAccount = await nodemailer.createTestAccount()
const transporter = nodemailer.createTransport({
host: "smtp.ethereal.email",
auth: { user: testAccount.user, pass: testAccount.pass },
})
const info = await transporter.sendMail({ ... })
console.log("Preview URL:", nodemailer.getTestMessageUrl(info))Tier gratis Resend mencakup 3.000 email/bulan. Tier berbayar mulai dari sekitar $0,40 per 1.000 email. AWS SES via Nodemailer mengenakan biaya $0,10 per 1.000 email — empat kali lebih murah — tapi memerlukan domain warm-up Anda sendiri, penanganan bounce, pengaturan topik SNS, dan pemeliharaan berkelanjutan. Untuk tim produk yang berfokus pada membangun fitur, deliverability terkelola dengan $0,40/1.000 biasanya sepadan.
Google membatasi SMTP Gmail hingga 500 email/hari untuk akun gratis dan 2.000/hari untuk Google Workspace. Yang lebih kritis, Google secara agresif membatasi laju dan memblokir koneksi SMTP yang dianggap mencurigakan. Email reset kata sandi Anda akan mulai gagal secara acak seiring Anda berkembang. SMTP Gmail bisa diterima untuk pengembangan lokal dan pengujian. Untuk produksi, gunakan API email transaksional khusus atau setidaknya relay SMTP yang tepat seperti Amazon SES, Mailgun, atau SendGrid.
Nodemailer tetap menjadi pilihan yang tepat dalam skenario tertentu: (1) Anda mengendalikan server SMTP (relay email internal, Postfix di infrastruktur Anda). (2) Anda membangun alur kerja pengujian email yang menangkap email keluar secara lokal — gabungkan Nodemailer dengan Ethereal.email atau Mailhog untuk pengujian email lokal tanpa biaya. (3) Anda memiliki skenario pengiriman volume tinggi dan menginginkan AWS SES dengan akses SMTP langsung.
Saya menggunakan Resend untuk semua proyek baru. Integrasi React Email adalah faktor penentu — menulis template email sebagai komponen React dengan TypeScript benar-benar lebih baik daripada mengelola string HTML atau file template. Tier gratis Resend cukup untuk proyek tahap awal (3.000 email/bulan mencakup sebagian besar proyek sampingan). Saya menyimpan Nodemailer untuk pengujian pengembangan lokal dengan Ethereal.email.
Instal: npm install resend @react-email/components. Set RESEND_API_KEY di lingkungan Anda. Buat Route Handler atau Server Action yang memanggil resend.emails.send() dengan template React Email Anda sebagai properti react. Verifikasi domain pengiriman Anda di dashboard Resend (tambahkan catatan DKIM/SPF yang mereka berikan ke DNS Anda). Selesai. Seluruh integrasi adalah ~20 baris kode plus komponen template email Anda.