nodemailer
Node.jsアプリケーションからメールを送信する際に広く利用され、SMTPやOAuth2認証、添付ファイル、HTMLテンプレートなど、多様な機能を使って効率的なメール送信を可能にするSkill。
📜 元の英語説明(参考)
从Node.js应用发送邮件。最流行的邮件发送模块,支持SMTP、OAuth2、附件和HTML模板。
🇯🇵 日本人クリエイター向け解説
Node.jsアプリケーションからメールを送信する際に広く利用され、SMTPやOAuth2認証、添付ファイル、HTMLテンプレートなど、多様な機能を使って効率的なメール送信を可能にするSkill。
※ jpskill.com 編集部が日本のビジネス現場向けに補足した解説です。Skill本体の挙動とは独立した参考情報です。
下記のコマンドをコピーしてターミナル(Mac/Linux)または PowerShell(Windows)に貼り付けてください。 ダウンロード → 解凍 → 配置まで全自動。
mkdir -p ~/.claude/skills && cd ~/.claude/skills && curl -L -o nodemailer.zip https://jpskill.com/download/16508.zip && unzip -o nodemailer.zip && rm nodemailer.zip
$d = "$env:USERPROFILE\.claude\skills"; ni -Force -ItemType Directory $d | Out-Null; iwr https://jpskill.com/download/16508.zip -OutFile "$d\nodemailer.zip"; Expand-Archive "$d\nodemailer.zip" -DestinationPath $d -Force; ri "$d\nodemailer.zip"
完了後、Claude Code を再起動 → 普通に「動画プロンプト作って」のように話しかけるだけで自動発動します。
💾 手動でダウンロードしたい(コマンドが難しい人向け)
- 1. 下の青いボタンを押して
nodemailer.zipをダウンロード - 2. ZIPファイルをダブルクリックで解凍 →
nodemailerフォルダができる - 3. そのフォルダを
C:\Users\あなたの名前\.claude\skills\(Win)または~/.claude/skills/(Mac)へ移動 - 4. Claude Code を再起動
⚠️ ダウンロード・利用は自己責任でお願いします。当サイトは内容・動作・安全性について責任を負いません。
🎯 このSkillでできること
下記の説明文を読むと、このSkillがあなたに何をしてくれるかが分かります。Claudeにこの分野の依頼をすると、自動で発動します。
📦 インストール方法 (3ステップ)
- 1. 上の「ダウンロード」ボタンを押して .skill ファイルを取得
- 2. ファイル名の拡張子を .skill から .zip に変えて展開(macは自動展開可)
- 3. 展開してできたフォルダを、ホームフォルダの
.claude/skills/に置く- · macOS / Linux:
~/.claude/skills/ - · Windows:
%USERPROFILE%\.claude\skills\
- · macOS / Linux:
Claude Code を再起動すれば完了。「このSkillを使って…」と話しかけなくても、関連する依頼で自動的に呼び出されます。
詳しい使い方ガイドを見る →- 最終更新
- 2026-05-18
- 取得日時
- 2026-05-18
- 同梱ファイル
- 1
📖 Skill本文(日本語訳)
※ 原文(英語/中国語)を Gemini で日本語化したものです。Claude 自身は原文を読みます。誤訳がある場合は原文をご確認ください。
Nodemailer ツール
説明
SMTP、OAuth2、添付ファイル、および HTML テンプレートを使用して、Node.js からメールを送信します。
ソース
- リポジトリ: nodemailer/nodemailer
- ライセンス: MIT
インストール
npm install nodemailer
使用例
基本的なメール
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 メール
async function sendWelcomeEmail(user: { name: string; email: string }) {
const html = `
<!DOCTYPE html>
<html>
<head>
<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; }
</style>
</head>
<body>
<div class="container">
<div class="header">
<h1>Welcome, ${user.name}!</h1>
</div>
<div class="content">
<p>Thank you for joining our platform.</p>
<a href="https://myapp.com/dashboard" class="button">Get Started</a>
</div>
</div>
</body>
</html>
`;
await transporter.sendMail({
from: '"My App" <noreply@myapp.com>',
to: user.email,
subject: `Welcome, ${user.name}!`,
html,
});
}
添付ファイル付きメール
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 認証 (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,
},
});
レート制限付きメールキュー
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;
}
}
タグ
email, smtp, notification, communication, automation
互換性
- Codex: ✅
- Claude Code: ✅
📜 原文 SKILL.md(Claudeが読む英語/中国語)を展開
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 = `
<!DOCTYPE html>
<html>
<head>
<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; }
</style>
</head>
<body>
<div class="container">
<div class="header">
<h1>Welcome, ${user.name}!</h1>
</div>
<div class="content">
<p>Thank you for joining our platform.</p>
<a href="https://myapp.com/dashboard" class="button">Get Started</a>
</div>
</div>
</body>
</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: ✅