Send Email
VerifiedSend 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...
$ 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:
- Content: What should the email body contain?
- 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).
- To get your App Password:
- Go to https://myaccount.google.com/apppasswords
- Sign in and create an App Password for "Mail"
- Copy the 16-character password
Please provide your Gmail App Password:
User: abcd efgh ijkl mnop
- Skill: Ready to send:
- From: [email protected]
- To: [email protected]
- Subject: Hello
- Content: Hi John, just saying hello!
Proceed to send? (y/n)
---
Example 2: Markdown Content with Default Sender
User: 发一封邮件给 [email protected],主题是"AR眼镜行业分析",内容是 [用户提供的 Markdown 报告]
Skill: 我来帮您发送这封邮件。检测到您没有指定发件人邮箱,我将使用默认邮箱 `[email protected]` 发送。
同时,我发现您的内容是 Markdown 格式,将自动转换为美观的 HTML 格式,让报告更易读。
为了使用 126 邮箱发送,我需要您提供 SMTP 授权码。
- 获取授权码步骤:
- 登录 126 邮箱 → 设置 → POP3/SMTP/IMAP
- 启用 "IMAP/SMTP 服务"
- 复制显示的授权密码
请提供 [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 授权码。
- 获取授权码步骤:
- 登录 126 邮箱 → 设置 → POP3/SMTP/IMAP
- 启用 "IMAP/SMTP 服务"
- 复制显示的授权密码
请提供 [email protected] 的授权码:
User: [提供授权码]
- Skill: 准备发送邮件:
- 发件人: [email protected]
- 收件人: [email protected]
- 主题: 项目报告
- 内容: 项目已完成,所有里程碑都已达成。
确认发送?(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:
- Subject: What is the email subject?
- 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:
- SMTP Server: What is your SMTP server address?
- SMTP Port: What port should I use?
- Username: What is your SMTP username?
- Password: What is your SMTP password?
User: Server is smtp.mydomain.com, port 587, username is [email protected], password is secret
- Skill: Ready to send:
- From: [email protected]
- To: [email protected]
- Subject: Test Email
- Content: Hello World
- SMTP Server: smtp.mydomain.com:587
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?
What platforms support Send Email?
What are the use cases for Send Email?
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.