{ 01. Get Started }

Send Email Directly From Your Code

No server code needed. Focus on things that matter!
Create Free Account
{ 02. What You Need To Know }

How does it work?

Connect your email service

Connect your email service

Link your preferred provider via high-speed native APIs (Mailgun, AWS SES, Gmail, Outlook, etc.) or connect any other service instantly using standard SMTP. Switch or backup providers from your dashboard at any time without changing a line of code.
Design dynamic templates

Design dynamic templates

Build responsive layouts using our Rich Text (WYSIWYG) or HTML code editor. Keep your secret API keys safe on our servers while giving your client-side apps complete freedom to trigger beautiful, parameterized emails.
Drop in our SDK and send

Drop in our SDK and send

Add our lightweight SDK to your app — whether it’s built with React, Vue, Angular, Flutter, Node.js, or any other framework.
Works seamlessly across any ecosystem. Use our official SDKs for TypeScript, JavaScript, React, Vue, Svelte, Flutter, and Node.js — or connect any application on any platform using our universal REST API with Rust, Python, PHP, C#, Go, or any other language.
{ 03. Frequently Asked Questions }

FAQ

Is EmailJS a transactional email provider like SendGrid or Resend?

No, EmailJS is an Email Orchestration Layer and a Unified API hub. We do not operate our own email delivery servers; instead, we sit on top of your existing infrastructure.

With EmailJS, you connect your preferred email services—whether it’s a personal Gmail account, a standard SMTP server, or enterprise providers like SendGrid, Resend, or AWS SES. This abstraction gives you complete architectural flexibility: you can route emails through different services dynamically via your code or switch providers instantly from the dashboard, without ever refactoring your core application logic.

Why should I use EmailJS in my app?

Standard transactional providers require direct API authentication (secret keys or passwords) to send messages. Exposing these credentials in client-side code (JavaScript, mobile apps, desktop software) is a critical security risk, as anyone can extract your keys and send unauthorized emails on your behalf.

EmailJS acts as a secure, provider-agnostic proxy. It safely stores all your provider authentication details on the server-side. Your client-side application code never touches secret keys; instead, it triggers predefined templates via our secure abstraction layer.

Does EmailJS support plain text formats and automated AI parsers?

Yes. EmailJS automatically dispatches emails in a multipart format, bundle-packing both the HTML layout and a clean plain-text alternative into a single payload.

If a recipient’s client restricts HTML (such as smartwatches, IoT screens, or strict corporate firewalls), it seamlessly falls back to the plain text version. This ensures maximum deliverability and makes your transactional messages perfectly readable for automated AI parsers and data-extraction agents.

What prevents someone from abusing my Public Key?

A better way to think of EmailJS in terms of security is not as a service that allows you to send emails from your code, but rather as a service that allows you to create a predefined set of emails via the dashboard, and then just trigger the emails from the code. This is quite similar to how emails are usually sent via a proprietary server code, and also to the way products like Intercom or customer.io are working.

To safeguard your monthly request quota from automated bots and script flooding, EmailJS provides standard, easy-to-configure guardrails directly in your dashboard, including Origin Whitelisting (CORS) and IP-based Rate Limiting.

Is there a free tier available for testing and small projects?

Yes. We believe secure communication tools should be accessible to everyone, which is why we offer a generous free plan that includes everything you need to build, test, and launch your project.

Unlike other free services, we never serve ads, and we strictly do not sell your email content, metadata, or logs. The free tier is completely funded by our paid subscribers. Once your application scales and you require higher volume routing, dedicated support, or advanced security controls, you can easily upgrade to a premium plan.

Ask A Question
{ 04. This is the Way }

Get Started in minutes

A few lines of code. That's it. No complex setup, no performance hits.

Web UI App

JavaScript / React / Vue / Svelte / Angular & any Frontend

import emailjs from '@emailjs/browser';

const templateParams = {
name: 'James',
message: 'Hello!',
};

await emailjs.send(
'YOUR_SERVICE_ID',
'YOUR_TEMPLATE_ID',
templateParams,
{ publicKey: 'YOUR_PUBLIC_KEY', },
);

Backend & Serverless

Node.js / Next.js / Nest.js & Beyond

import emailjs from '@emailjs/nodejs';

const templateParams = {
name: 'James',
};

await emailjs.send(
'YOUR_SERVICE_ID',
'YOUR_TEMPLATE_ID',
templateParams,
{ publicKey: 'YOUR_PUBLIC_KEY' },
);

REST API (cURL / Python / Go / Rust & Over)

curl -X POST https://emailjs.com/api/v1.0/email/send \
-H "Content-Type: application/json" \
-d '{
"service_id": "YOUR_SERVICE_ID",
"template_id": "YOUR_TEMPLATE_ID",
"user_id": "YOUR_PUBLIC_KEY",
"template_params": { "username": "James"
"message": "Hello!"
"ticket": "#46412"
}
}'

Mobile App

Flutter

import 'package:emailjs/emailjs.dart' as emailjs;

final templateParams = {
'name': 'James',
};

await emailjs.send(
'YOUR_SERVICE_ID',
'YOUR_TEMPLATE_ID',
templateParams,
const emailjs.Options(
publicKey: 'YOUR_PUBLIC_KEY' ),
);

React Native

import emailjs from '@emailjs/react-native';

const templateParams = {
name: 'James',
};

await emailjs.send(
'YOUR_SERVICE_ID',
'YOUR_TEMPLATE_ID',
templateParams,
{
publicKey: 'YOUR_PUBLIC_KEY', },
);
{ 05. Loved and Trusted By }

Over 125,000 active developers around the world trust EmailJS to send emails

Get Started