Nodemailer adalah library klien SMTP — ia terhubung ke server SMTP mana pun, tetapi tidak mengelola deliverability, reputasi IP, maupun bounce. Resend adalah API email terkelola yang menangani deliverability untuk Anda, termasuk IP pengiriman yang sudah hangat, pemrosesan bounce, dan panduan autentikasi domain. Keduanya memecahkan masalah yang berbeda: Nodemailer adalah lapisan transport, Resend adalah layanan pengiriman email penuh.
Penempatan inbox bergantung pada reputasi IP pengiriman, autentikasi domain (SPF, DKIM, DMARC), metrik keterlibatan, dan tingkat keluhan. Jika Anda menghosting email sendiri via Nodemailer dengan VPS baru, email Anda kemungkinan masuk spam dari hari pertama. Resend mempertahankan IP pengiriman yang hangat dengan reputasi mapan, sehingga produk baru mewarisi reputasi tersebut alih-alih memulai dari nol.
Tier gratis Resend mencakup 3.000 email per bulan, dengan tier berbayar sekitar $0,40 per 1.000 email. AWS SES via Nodemailer empat kali lebih murah di $0,10 per 1.000 email, tetapi memerlukan domain warm-up sendiri, penanganan bounce, pengaturan topik SNS, dan pemeliharaan berkelanjutan. Untuk tim produk yang berfokus membangun fitur, deliverability terkelola seharga $0,40 per 1.000 biasanya sepadan dengan selisih harganya.
Resend terintegrasi secara native dengan React Email, memungkinkan Anda menulis template email sebagai komponen React dengan JSX dan keamanan TypeScript — menghilangkan kerumitan pengelolaan string HTML dan masalah escaping. Memperbarui branding cukup dengan mengubah satu wrapper EmailLayout dan semua template ikut terbarui otomatis. Server preview React Email (email.dev) juga membuat iterasi template jauh lebih cepat dibanding mengelola file HTML mentah dengan Nodemailer.
Nodemailer tetap pilihan yang tepat dalam tiga skenario: ketika Anda mengendalikan server SMTP di infrastruktur sendiri dan perlu terhubung secara programatik; ketika membangun alur pengujian email lokal menggunakan alat seperti Ethereal.email atau Mailhog untuk pengujian tanpa biaya; dan ketika mengirim email dalam volume sangat tinggi di mana AWS SES seharga $0,10 per 1.000 email membenarkan overhead infrastrukturnya. Di semua skenario lainnya, API terkelola memberikan pengalaman pengembang dan deliverability yang lebih baik.
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.
| Dimensi | Nodemailer | Resend |
|---|---|---|
| Apa itu | Library klien SMTP, server disediakan sendiri | API email terkelola dengan infrastruktur ter-hosting |
| Deliverability | Tanggung jawab Anda sendiri: reputasi IP, SPF, DKIM, DMARC | Sudah ditangani: IP hangat dan penanganan bounce otomatis |
| Pengalaman developer | Konfigurasi SMTP manual dan template HTML mentah | SDK TypeScript dengan template JSX React Email |
| Harga | Gratis dengan SMTP sendiri, atau $0,10 per 1.000 email via AWS SES | Tier gratis 3.000 email per bulan, lalu $0,40 per 1.000 email |
| Waktu setup | Lebih lama: IAM role, verifikasi domain, topic SNS bounce | Kurang dari satu jam: instal, API key, verifikasi domain pengirim |
| Kasus penggunaan terbaik | Testing lokal, mail relay internal, pengiriman volume tinggi via SES | Proyek baru yang ingin deliverability terkelola dan DX yang cepat |
| Unduhan npm mingguan | 5,2 juta | 500 ribu, terus bertumbuh |
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: '[email protected]',
▼ 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 <[email protected]>",
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.