Skip to content

Send Email

Verified

Send emails via SMTP with support for HTML formatting, file attachments, and email templates. Use when users ask to: (1) Send an email, (2) Email someone, (3...

267 downloads
$ Add to .claude/skills/

About This Skill

# Send Email

Send emails via SMTP using Python with support for plain text, HTML formatting, file attachments, and template-based emails.

Key Features

  • Default Sender Email: Automatically uses `[email protected]` when no sender is specified
  • Automatic Markdown to HTML: Detects Markdown content and converts to beautifully styled HTML
  • Multiple Email Providers: Supports Gmail, Outlook, QQ Mail, 163/126 Mail, and custom SMTP
  • File Attachments: Attach multiple files to emails
  • Email Templates: Use template files with variable substitution

Interactive Email Sending Flow

This skill guides you through the email sending process step by step.

Step 1: Collect Basic Email Information

Ask the user for the following required information. If any is missing, prompt the user to provide it:

| Information | Description | Example | |-------------|-------------|---------| | Recipient (`--to`) | Email address to send to | `[email protected]` | | Subject (`--subject`) | Email subject line | `Monthly Report` | | Content (`--content`) | Email body text or HTML | `Hello, here is your report.` |

IMPORTANT - Default Sender Email Behavior:

If the user does NOT specify a sender email in their initial request, AUTOMATICALLY use `[email protected]` as the default sender. DO NOT ask the user which email to send from.

Only ask the user for a different sender email if they explicitly mention wanting to use their own email address.

When using the default `[email protected]`, proceed directly to Step 2 and ask for the 126 email authorization code.

Step 2: Identify Email Provider and Collect Credentials

Based on the sender's email address domain, identify the email provider and request the appropriate credentials.

#### Email Provider Detection

``` @gmail.com, @googlemail.com → Gmail @outlook.com, @hotmail.com, @live.com, @office365.com → Outlook/Office 365 @qq.com, @vip.qq.com → QQ Mail @163.com, @126.com → NetEase Mail @aliyun.com, @aliyun-inc.com → Aliyun Mail @sendgrid.net, @*.sendgrid.net → SendGrid @*.mailgun.org → Mailgun Other domains → Custom SMTP (ask for server, port, username, password) ```

#### Provider-Specific Credential Requirements

  • Gmail (@gmail.com, @googlemail.com)
  • Password Type: App Password (NOT account password)
  • Prerequisite: Two-factor authentication (2FA) must be enabled
  • How to get App Password:
  • 1. Go to https://myaccount.google.com/apppasswords
  • 2. Sign in to your Google Account
  • 3. Select "Mail" and "Other (Custom name)" → Enter a name like "SMTP Script"
  • 4. Click "Generate" → Copy the 16-character password
  • SMTP Server: `smtp.gmail.com`
  • Port: `587` (TLS) or `465` (SSL)
  • Username: Your full Gmail address
  • Outlook / Office 365 (@outlook.com, @hotmail.com, @live.com, @office365.com)
  • Password Type: Account password (same as web login)
  • SMTP Server: `smtp.office365.com`
  • Port: `587` (TLS)
  • Username: Your full Outlook/Office 365 email address
  • QQ Mail (@qq.com, @vip.qq.com)
  • Password Type: SMTP Authorization Code (NOT account password)
  • How to get Authorization Code:
  • 1. Login to QQ Mail at https://mail.qq.com
  • 2. Click "Settings" (设置) → "Account" (账户)
  • 3. Find "POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV Service"
  • 4. Open "POP3/SMTP Service" or "IMAP/SMTP Service"
  • 5. Click "Generate Authorization Code" (生成授权码)
  • 6. Verify identity via SMS → Copy the generated code
  • SMTP Server: `smtp.qq.com`
  • Port: `587` (TLS) or `465` (SSL)
  • Username: Your full QQ email address
  • NetEase 163 Mail (@163.com)
  • Password Type: SMTP Authorization Code (NOT account password)
  • How to get Authorization Code:
  • 1. Login to 163 Mail at https://mail.163.com
  • 2. Click "Settings" (设置) → "POP3/SMTP/IMAP"
  • 3. Click "Open" next to "IMAP/SMTP Service"
  • 4. Verify identity → Click "Get Authorization Code" (获取授权码)
  • 5. Copy the 16-character authorization code
  • SMTP Server: `smtp.163.com`
  • Port: `465` (SSL) or `994` (IMAP)
  • Username: Your full 163 email address
  • NetEase 126 Mail (@126.com)
  • Password Type: SMTP Authorization Code (NOT account password)
  • How to get Authorization Code:
  • 1. Login to 126 Mail at https://mail.126.com
  • 2. Click "Settings" (设置) → "POP3/SMTP/IMAP"
  • 3. Enable "IMAP/SMTP Service"
  • 4. Copy the authorization password displayed
  • SMTP Server: `smtp.126.com`
  • Port: `465` (SSL) or `25` (SSL)
  • Username: Your full 126 email address
  • SendGrid
  • Password Type: API Key (as password)
  • How to get API Key:
  • 1. Login to SendGrid at https://app.sendgrid.com
  • 2. Go to Settings → API Keys
  • 3. Click "Create API Key"
  • 4. Set permissions → Click "Create & View"
  • 5. Copy the API key (only shown once)
  • SMTP Server: `smtp.sendgrid.net`
  • Port: `587` (TLS) or `465` (SSL)
  • Username: `apikey` (literally this string)
  • Mailgun
  • Password Type: SMTP credentials from dashboard
  • How to get Credentials:
  • 1. Login to Mailgun at https://app.mailgun.com
  • 2. Go to Sending → Domains
  • 3. Select your domain
  • 4. Copy SMTP username and password from the page
  • SMTP Server: `smtp.mailgun.org`
  • Port: `587` (TLS)
  • Username: From Mailgun dashboard
  • Custom SMTP (Other domains)
  • Ask the user to provide:
  • SMTP Server Address
  • SMTP Port
  • Username
  • Password

Step 3: Auto-detect and Handle Markdown Content

  • The script automatically detects if the email content is in Markdown format by looking for common patterns:
  • Headers (`#`, `##`, `###`)
  • Bold/italic text (`bold`, `*italic*`)
  • Lists (`- item` or `1. item`)
  • Code blocks (```)
  • Links (`text`)
  • If Markdown is detected, the content is automatically converted to beautifully styled HTML with:
  • Professional typography and spacing
  • Color-coded headers
  • Styled tables and code blocks
  • Responsive design for email clients

You don't need to manually specify `--content-type html` for Markdown content - it's handled automatically!

Step 4: Collect Optional Information (if needed)

  • `--from-name`: Display name for sender (e.g., "John Doe")
  • `--content-type html`: For HTML formatted emails (defaults to plain text, but auto-converts Markdown)
  • `--attach`: File path(s) to attach (can specify multiple)
  • `--template`: Use template file instead of content
  • `--template-vars`: JSON string of template variables

Step 5: Confirm and Send

Before sending, confirm with the user:

``` Ready to send: From: [Sender Email] To: [Recipient Email] Subject: [Subject] Content Type: [Plain/HTML] Attachments: [List of attachments or None]

Proceed to send? (y/n) ```

If confirmed, execute the send_email.py script with all collected parameters.

Example Conversations

Example 1: Basic Gmail Email

User: Send an email to [email protected] with subject "Hello"

Skill: I can help you send that email. I need a few more details:

  1. Content: What should the email body contain?
  2. Sender Email: What email address should I send from?

User: The content is "Hi John, just saying hello!" and send from [email protected]

Skill: I detected you're using Gmail. For Gmail, you need an App Password (not your regular password).

  1. To get your App Password:
  2. Go to https://myaccount.google.com/apppasswords
  3. Sign in and create an App Password for "Mail"
  4. Copy the 16-character password

Please provide your Gmail App Password:

User: abcd efgh ijkl mnop

Proceed to send? (y/n)

---

Example 2: Markdown Content with Default Sender

User: 发一封邮件给 [email protected],主题是"AR眼镜行业分析",内容是 [用户提供的 Markdown 报告]

Skill: 我来帮您发送这封邮件。检测到您没有指定发件人邮箱,我将使用默认邮箱 `[email protected]` 发送。

同时,我发现您的内容是 Markdown 格式,将自动转换为美观的 HTML 格式,让报告更易读。

为了使用 126 邮箱发送,我需要您提供 SMTP 授权码

  1. 获取授权码步骤:
  2. 登录 126 邮箱 → 设置 → POP3/SMTP/IMAP
  3. 启用 "IMAP/SMTP 服务"
  4. 复制显示的授权密码

请提供 [email protected] 的授权码:

User: [提供授权码]

  • Skill: 准备发送邮件:
  • 发件人: [email protected]
  • 收件人: [email protected]
  • 主题: AR眼镜行业分析
  • 格式: Markdown → HTML (自动转换)
  • 内容预览: 包含标题、列表、表格等格式化内容

确认发送? (y/n)

---

Example 3: Default Sender with Missing Content

User: 发邮件给 [email protected],主题是项目报告

Skill: 我需要收集邮件内容:

邮件正文是什么?

User: 项目已完成,所有里程碑都已达成。

Skill: 我将使用默认邮箱 `[email protected]` 发送。

为了使用 126 邮箱发送,我需要您提供 SMTP 授权码

  1. 获取授权码步骤:
  2. 登录 126 邮箱 → 设置 → POP3/SMTP/IMAP
  3. 启用 "IMAP/SMTP 服务"
  4. 复制显示的授权密码

请提供 [email protected] 的授权码:

User: [提供授权码]

确认发送?(y/n)

---

Example 4: User Specifies Custom Sender Email

User: Send a report to [email protected] from [email protected] about Q4 results, with attachment /home/user/q4_report.pdf

Skill: I'll help you send that email. Please provide the email content:

What should the email say about the Q4 results?

User: Please find attached the Q4 financial report. Let me know if you have any questions.

Skill: I see you're using Outlook. You'll need your Outlook account password (same as web login).

Please provide your Outlook password:

User: mypassword123

  • Skill: Ready to send:
  • From: [email protected]
  • To: [email protected]
  • Subject: Q4 results
  • Content: Please find attached the Q4 financial report. Let me know if you have any questions.
  • Attachment: /home/user/q4_report.pdf

Proceed to send? (y/n)

---

Example 5: Custom SMTP

User: Send email to [email protected] from [email protected]

Skill: I need to gather some information:

  1. Subject: What is the email subject?
  2. Content: What is the email body?

User: Subject is Test Email, content is Hello World

Skill: Since you're using a custom domain ([email protected]), I'll need your SMTP configuration:

  1. SMTP Server: What is your SMTP server address?
  2. SMTP Port: What port should I use?
  3. Username: What is your SMTP username?
  4. Password: What is your SMTP password?

User: Server is smtp.mydomain.com, port 587, username is [email protected], password is secret

Proceed to send? (y/n)

Script Command Reference

Once all information is collected, execute the script with appropriate parameters:

Basic Command

```bash python3 scripts/send_email.py \ --to [email protected] \ --subject "Email Subject" \ --content "Email body content" \ --smtp-server smtp.gmail.com \ --smtp-port 587 \ --username [email protected] \ --password your-password-or-app-password ```

HTML Email

```bash python3 scripts/send_email.py \ --to [email protected] \ --subject "Email Subject" \ --content "<h1>Hello</h1><p>HTML content</p>" \ --content-type html \ --smtp-server smtp.gmail.com \ --smtp-port 587 \ --username [email protected] \ --password your-password ```

Email with Attachments

```bash python3 scripts/send_email.py \ --to [email protected] \ --subject "Email Subject" \ --content "Email body" \ --attach /path/to/file1.pdf \ --attach /path/to/file2.csv \ --smtp-server smtp.gmail.com \ --smtp-port 587 \ --username [email protected] \ --password your-password ```

Email with Template

```bash python3 scripts/send_email.py \ --to [email protected] \ --subject "Email Subject" \ --template assets/simple-notification.html \ --template-vars '{"title":"Notification","message":"Your report is ready!"}' \ --content-type html \ --smtp-server smtp.gmail.com \ --smtp-port 587 \ --username [email protected] \ --password your-password ```

SSL Connection (instead of TLS)

```bash python3 scripts/send_email.py \ --to [email protected] \ --subject "Email Subject" \ --content "Email body" \ --smtp-server smtp.gmail.com \ --smtp-port 465 \ --use-ssl \ --username [email protected] \ --password your-password ```

SMTP Server Configuration Reference

| Provider | SMTP Server | Port | Encryption | Password Type | Username | |----------|-------------|------|------------|---------------|----------| | Gmail | smtp.gmail.com | 587 | TLS | App Password | Full email | | Gmail | smtp.gmail.com | 465 | SSL | App Password | Full email | | Outlook | smtp.office365.com | 587 | TLS | Account Password | Full email | | QQ Mail | smtp.qq.com | 587 | TLS | Authorization Code | Full email | | QQ Mail | smtp.qq.com | 465 | SSL | Authorization Code | Full email | | 163 Mail | smtp.163.com | 465 | SSL | Authorization Code | Full email | | 163 Mail | smtp.163.com | 994 | SSL | Authorization Code | Full email | | 126 Mail | smtp.126.com | 465 | SSL | Authorization Code | Full email | | 126 Mail | smtp.126.com | 25 | SSL | Authorization Code | Full email | | SendGrid | smtp.sendgrid.net | 587 | TLS | API Key | `apikey` | | SendGrid | smtp.sendgrid.net | 465 | SSL | API Key | `apikey` | | Mailgun | smtp.mailgun.org | 587 | TLS | SMTP Password | From dashboard |

Installation

Before using this skill, install the required Python dependencies:

```bash pip install -r requirements.txt ```

This installs the `markdown` library (version ≥3.4.0) which is required for automatic Markdown to HTML conversion.

Resources

scripts/send_email.py

  • Main Python script for sending emails. Supports:
  • Plain text and HTML content
  • Multiple file attachments
  • Email templates with variable substitution
  • TLS and SSL encryption
  • Custom sender names

references/smtp-servers.md

Common SMTP server configurations including Gmail, Outlook, 126, QQ, 163, SendGrid, Mailgun, and Aliyun.

assets/

  • Email templates:
  • `simple-notification.html` - Basic notification template
  • `report-summary.html` - Professional report template with metrics grid

Use Cases

  • Send emails programmatically from AI agent workflows
  • Create and manage email templates for different communication scenarios
  • Draft professional emails based on context and recipient information
  • Automate email composition and sending for routine communications

Pros & Cons

Pros

  • +Solid adoption with 533+ downloads
  • +Clean CLI interface integrates well with automation pipelines and AI agents
  • +Well-structured approach ensures consistent and reliable results
  • +Integrates smoothly into existing workflows

Cons

  • -Focused scope means it may not cover edge cases outside its primary use case
  • -May require adaptation for non-standard project configurations

FAQ

What does Send Email do?
Send emails via SMTP with support for HTML formatting, file attachments, and email templates. Use when users ask to: (1) Send an email, (2) Email someone, (3...
What platforms support Send Email?
Send Email is available on Claude Code, OpenClaw.
What are the use cases for Send Email?
Send emails programmatically from AI agent workflows. Create and manage email templates for different communication scenarios. Draft professional emails based on context and recipient information.

100+ free AI tools

Writing, PDF, image, and developer tools — all in your browser.

Next Step

Use the skill detail page to evaluate fit and install steps. For a direct browser workflow, move into a focused tool route instead of staying in broader support surfaces.