send-email
npx skills add https://github.com/wangyendt/wayne-skills --skill send-email
Agent 安装分布
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
agent_skill_test@126.comwhen 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 | user@example.com |
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 agent_skill_test@126.com 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 agent_skill_test@126.com, 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:
- Go to https://myaccount.google.com/apppasswords
- Sign in to your Google Account
- Select “Mail” and “Other (Custom name)” â Enter a name like “SMTP Script”
- Click “Generate” â Copy the 16-character password
- SMTP Server:
smtp.gmail.com - Port:
587(TLS) or465(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:
- Login to QQ Mail at https://mail.qq.com
- Click “Settings” (设置) â “Account” (è´¦æ·)
- Find “POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV Service”
- Open “POP3/SMTP Service” or “IMAP/SMTP Service”
- Click “Generate Authorization Code” (çæææç )
- Verify identity via SMS â Copy the generated code
- SMTP Server:
smtp.qq.com - Port:
587(TLS) or465(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:
- Login to 163 Mail at https://mail.163.com
- Click “Settings” (设置) â “POP3/SMTP/IMAP”
- Click “Open” next to “IMAP/SMTP Service”
- Verify identity â Click “Get Authorization Code” (è·åææç )
- Copy the 16-character authorization code
- SMTP Server:
smtp.163.com - Port:
465(SSL) or994(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:
- Login to 126 Mail at https://mail.126.com
- Click “Settings” (设置) â “POP3/SMTP/IMAP”
- Enable “IMAP/SMTP Service”
- Copy the authorization password displayed
- SMTP Server:
smtp.126.com - Port:
465(SSL) or25(SSL) - Username: Your full 126 email address
SendGrid
- Password Type: API Key (as password)
- How to get API Key:
- Login to SendGrid at https://app.sendgrid.com
- Go to Settings â API Keys
- Click “Create API Key”
- Set permissions â Click “Create & View”
- Copy the API key (only shown once)
- SMTP Server:
smtp.sendgrid.net - Port:
587(TLS) or465(SSL) - Username:
apikey(literally this string)
Mailgun
- Password Type: SMTP credentials from dashboard
- How to get Credentials:
- Login to Mailgun at https://app.mailgun.com
- Go to Sending â Domains
- Select your domain
- 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 (
- itemor1. item) - Code blocks (“`)
- Links (
[text](url))
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 john@example.com 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 myemail@gmail.com
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: myemail@gmail.com
- To: john@example.com
- Subject: Hello
- Content: Hi John, just saying hello!
Proceed to send? (y/n)
Example 2: Markdown Content with Default Sender
User: åä¸å°é®ä»¶ç» manager@company.com,䏻颿¯”ARç¼éè¡ä¸åæ”,å å®¹æ¯ [ç¨æ·æä¾ç Markdown æ¥å]
Skill: ææ¥å¸®æ¨åéè¿å°é®ä»¶ãæ£æµå°æ¨æ²¡ææå®å件人é®ç®±,æå°ä½¿ç¨é»è®¤é®ç®± agent_skill_test@126.com åéã
åæ¶,æåç°æ¨çå å®¹æ¯ Markdown æ ¼å¼,å°èªå¨è½¬æ¢ä¸ºç¾è§ç HTML æ ¼å¼,让æ¥åæ´æè¯»ã
为äºä½¿ç¨ 126 é®ç®±åé,æéè¦æ¨æä¾ SMTP ææç ã
è·åææç æ¥éª¤:
- ç»å½ 126 é®ç®± â 设置 â POP3/SMTP/IMAP
- å¯ç¨ “IMAP/SMTP æå¡”
- å¤å¶æ¾ç¤ºçææå¯ç
请æä¾ agent_skill_test@126.com çææç :
User: [æä¾ææç ]
Skill: åå¤åéé®ä»¶:
- å件人: agent_skill_test@126.com
- æ¶ä»¶äºº: manager@company.com
- 主é¢: ARç¼éè¡ä¸åæ
- æ ¼å¼: Markdown â HTML (èªå¨è½¬æ¢)
- å 容é¢è§: å 嫿 é¢ãå表ãè¡¨æ ¼çæ ¼å¼åå 容
确认åé? (y/n)
Example 3: Default Sender with Missing Content
User: åé®ä»¶ç» user@company.comï¼ä¸»é¢æ¯é¡¹ç®æ¥å
Skill: æéè¦æ¶éé®ä»¶å 容ï¼
é®ä»¶æ£ææ¯ä»ä¹ï¼
User: 项ç®å·²å®æï¼ææéç¨ç¢é½å·²è¾¾æã
Skill: æå°ä½¿ç¨é»è®¤é®ç®± agent_skill_test@126.com åéã
为äºä½¿ç¨ 126 é®ç®±åéï¼æéè¦æ¨æä¾ SMTP ææç ã
è·åææç æ¥éª¤ï¼
- ç»å½ 126 é®ç®± â 设置 â POP3/SMTP/IMAP
- å¯ç¨ “IMAP/SMTP æå¡”
- å¤å¶æ¾ç¤ºçææå¯ç
请æä¾ agent_skill_test@126.com çææç ï¼
User: [æä¾ææç ]
Skill: åå¤åéé®ä»¶ï¼
- å件人: agent_skill_test@126.com
- æ¶ä»¶äºº: user@company.com
- 主é¢: é¡¹ç®æ¥å
- å 容: 项ç®å·²å®æï¼ææéç¨ç¢é½å·²è¾¾æã
确认åéï¼(y/n)
Example 4: User Specifies Custom Sender Email
User: Send a report to boss@company.com from myname@outlook.com 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: myname@outlook.com
- To: boss@company.com
- 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 test@domain.com from my@domain.com
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 (my@domain.com), 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 my@domain.com, password is secret
Skill: Ready to send:
- From: my@domain.com
- To: test@domain.com
- 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
python3 scripts/send_email.py \
--to recipient@example.com \
--subject "Email Subject" \
--content "Email body content" \
--smtp-server smtp.gmail.com \
--smtp-port 587 \
--username your@email.com \
--password your-password-or-app-password
HTML Email
python3 scripts/send_email.py \
--to recipient@example.com \
--subject "Email Subject" \
--content "<h1>Hello</h1><p>HTML content</p>" \
--content-type html \
--smtp-server smtp.gmail.com \
--smtp-port 587 \
--username your@email.com \
--password your-password
Email with Attachments
python3 scripts/send_email.py \
--to recipient@example.com \
--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 your@email.com \
--password your-password
Email with Template
python3 scripts/send_email.py \
--to recipient@example.com \
--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 your@email.com \
--password your-password
SSL Connection (instead of TLS)
python3 scripts/send_email.py \
--to recipient@example.com \
--subject "Email Subject" \
--content "Email body" \
--smtp-server smtp.gmail.com \
--smtp-port 465 \
--use-ssl \
--username your@email.com \
--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:
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 templatereport-summary.html– Professional report template with metrics grid