nodemailer

Send emails from Node.js with SMTP, OAuth2, attachments, and HTML templates.

Safety Notice

This listing is imported from skills.sh public index metadata. Review upstream SKILL.md and repository scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "nodemailer" with this command: npx skills add aidotnet/moyucode/aidotnet-moyucode-nodemailer

Nodemailer Tool

Description

Send emails from Node.js with SMTP, OAuth2, attachments, and HTML templates.

Source

  • Repository: nodemailer/nodemailer

  • License: MIT

Installation

npm install nodemailer

Usage Examples

Basic Email

import nodemailer from 'nodemailer';

const transporter = nodemailer.createTransport({ host: 'smtp.gmail.com', port: 587, secure: false, auth: { user: process.env.EMAIL_USER, pass: process.env.EMAIL_PASS, }, });

async function sendEmail() { const info = await transporter.sendMail({ from: '"My App" <noreply@myapp.com>', to: 'user@example.com', subject: 'Welcome to My App', text: 'Hello, welcome to our platform!', html: '<h1>Hello</h1><p>Welcome to our platform!</p>', });

console.log('Message sent:', info.messageId); }

HTML Email with Template

async function sendWelcomeEmail(user: { name: string; email: string }) { const html = &#x3C;!DOCTYPE html> &#x3C;html> &#x3C;head> &#x3C;style> .container { max-width: 600px; margin: 0 auto; font-family: Arial; } .header { background: #4F46E5; color: white; padding: 20px; } .content { padding: 20px; } .button { background: #4F46E5; color: white; padding: 12px 24px; text-decoration: none; border-radius: 4px; } &#x3C;/style> &#x3C;/head> &#x3C;body> &#x3C;div class="container"> &#x3C;div class="header"> &#x3C;h1>Welcome, ${user.name}!&#x3C;/h1> &#x3C;/div> &#x3C;div class="content"> &#x3C;p>Thank you for joining our platform.&#x3C;/p> &#x3C;a href="https://myapp.com/dashboard" class="button">Get Started&#x3C;/a> &#x3C;/div> &#x3C;/div> &#x3C;/body> &#x3C;/html> ;

await transporter.sendMail({ from: '"My App" <noreply@myapp.com>', to: user.email, subject: Welcome, ${user.name}!, html, }); }

Email with Attachments

async function sendEmailWithAttachment() { await transporter.sendMail({ from: '"Reports" <reports@myapp.com>', to: 'manager@company.com', subject: 'Monthly Report', text: 'Please find the monthly report attached.', attachments: [ { filename: 'report.pdf', path: './reports/monthly-report.pdf', }, { filename: 'data.xlsx', content: Buffer.from('...'), // Buffer content }, { filename: 'logo.png', path: './assets/logo.png', cid: 'logo@myapp', // For embedding in HTML }, ], html: '<img src="cid:logo@myapp" /><p>See attached report.</p>', }); }

OAuth2 Authentication (Gmail)

const transporter = nodemailer.createTransport({ service: 'gmail', auth: { type: 'OAuth2', user: process.env.GMAIL_USER, clientId: process.env.GOOGLE_CLIENT_ID, clientSecret: process.env.GOOGLE_CLIENT_SECRET, refreshToken: process.env.GOOGLE_REFRESH_TOKEN, }, });

Email Queue with Rate Limiting

class EmailQueue { private queue: Array<() => Promise<void>> = []; private processing = false;

async add(emailFn: () => Promise<void>) { this.queue.push(emailFn); this.process(); }

private async process() { if (this.processing) return; this.processing = true;

while (this.queue.length > 0) {
  const emailFn = this.queue.shift()!;
  await emailFn();
  await new Promise(r => setTimeout(r, 1000)); // Rate limit
}

this.processing = false;

} }

Tags

email , smtp , notification , communication , automation

Compatibility

  • Codex: ✅

  • Claude Code: ✅

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

Coding

bilibili-analyzer

No summary provided by upstream source.

Repository SourceNeeds Review
Coding

puppeteer

No summary provided by upstream source.

Repository SourceNeeds Review
Coding

cron-scheduler

No summary provided by upstream source.

Repository SourceNeeds Review
Coding

exceljs

No summary provided by upstream source.

Repository SourceNeeds Review