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 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…

, # Headers\n r'^\\*{1,3}.+\\*{1,3}

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 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…

, # Bold/italic\n r'^\\s*[-*+]\\s+', # Unordered lists\n r'^\\s*\\d+\\.\\s+', # Ordered lists\n r'^\\s*>\\s+', # Blockquotes\n r'```', # Code blocks\n r'\\[.+\\]\\(.+\\)', # Links\n r'^\\s*---+\\s*

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 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…

, # Horizontal rules\n r'^\\*\\*.+\\*\\*', # Bold\n ]\n\n lines = content.split('\\n')\n markdown_score = 0\n\n for line in lines:\n for pattern in markdown_patterns:\n if re.match(pattern, line.strip(), re.MULTILINE):\n markdown_score += 1\n break\n\n # If more than 20% of lines have markdown syntax, consider it markdown\n return markdown_score > len(lines) * 0.2 or markdown_score > 3\n\n\ndef markdown_to_html(content: str) -> str:\n \"\"\"Convert markdown content to styled HTML.\n\n Args:\n content: Markdown text\n\n Returns:\n HTML formatted content with styling\n \"\"\"\n # Use markdown library with extensions\n html = markdown.markdown(\n content,\n extensions=['extra', 'nl2br', 'sane_lists', 'tables']\n )\n\n # Wrap with email-friendly styling\n styled_html = f\"\"\"\n\u003c!DOCTYPE html>\n\u003chtml>\n\u003chead>\n \u003cmeta charset=\"UTF-8\">\n \u003cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n \u003cstyle>\n body {{\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;\n line-height: 1.6;\n color: #333;\n max-width: 800px;\n margin: 0 auto;\n padding: 20px;\n background-color: #f5f5f5;\n }}\n .email-content {{\n background-color: white;\n padding: 30px;\n border-radius: 8px;\n box-shadow: 0 2px 8px rgba(0,0,0,0.1);\n }}\n h1 {{\n color: #2c3e50;\n border-bottom: 3px solid #3498db;\n padding-bottom: 10px;\n margin-top: 0;\n }}\n h2 {{\n color: #34495e;\n border-bottom: 2px solid #95a5a6;\n padding-bottom: 8px;\n margin-top: 30px;\n }}\n h3 {{\n color: #5d6d7e;\n margin-top: 25px;\n }}\n h4 {{\n color: #7f8c8d;\n }}\n p {{\n margin: 12px 0;\n }}\n ul, ol {{\n margin: 12px 0;\n padding-left: 30px;\n }}\n li {{\n margin: 8px 0;\n }}\n code {{\n background-color: #f8f9fa;\n padding: 2px 6px;\n border-radius: 3px;\n font-family: 'Courier New', monospace;\n font-size: 0.9em;\n color: #e74c3c;\n }}\n pre {{\n background-color: #f8f9fa;\n padding: 15px;\n border-radius: 5px;\n border-left: 4px solid #3498db;\n overflow-x: auto;\n }}\n pre code {{\n background-color: transparent;\n padding: 0;\n color: inherit;\n }}\n blockquote {{\n border-left: 4px solid #3498db;\n padding-left: 20px;\n margin: 15px 0;\n color: #555;\n font-style: italic;\n }}\n strong {{\n color: #2c3e50;\n font-weight: 600;\n }}\n em {{\n color: #34495e;\n }}\n hr {{\n border: none;\n border-top: 2px solid #ecf0f1;\n margin: 30px 0;\n }}\n table {{\n border-collapse: collapse;\n width: 100%;\n margin: 20px 0;\n }}\n th, td {{\n border: 1px solid #ddd;\n padding: 12px;\n text-align: left;\n }}\n th {{\n background-color: #3498db;\n color: white;\n font-weight: 600;\n }}\n tr:nth-child(even) {{\n background-color: #f8f9fa;\n }}\n a {{\n color: #3498db;\n text-decoration: none;\n }}\n a:hover {{\n text-decoration: underline;\n }}\n \u003c/style>\n\u003c/head>\n\u003cbody>\n \u003cdiv class=\"email-content\">\n {html}\n \u003c/div>\n\u003c/body>\n\u003c/html>\n\"\"\"\n return styled_html\n\n\ndef read_template(template_path: str, variables: dict) -> str:\n \"\"\"Read email template and substitute variables.\n\n Template variables should be in format {{variable_name}}.\n\n Args:\n template_path: Path to template file\n variables: Dictionary of variable substitutions\n\n Returns:\n Rendered email content\n \"\"\"\n with open(template_path, 'r', encoding='utf-8') as f:\n content = f.read()\n\n for key, value in variables.items():\n content = content.replace('{{' + key + '}}', str(value))\n\n return content\n\n\ndef send_email(\n to: str,\n subject: str,\n content: str,\n smtp_server: str,\n smtp_port: int,\n username: str,\n password: str,\n from_addr: Optional[str] = None,\n from_name: Optional[str] = None,\n content_type: str = 'html',\n attachments: Optional[list[str]] = None,\n use_tls: bool = True,\n use_ssl: bool = False,\n) -> bool:\n \"\"\"Send email via SMTP.\n\n Args:\n to: Recipient email address\n subject: Email subject\n content: Email body content\n smtp_server: SMTP server hostname\n smtp_port: SMTP server port\n username: SMTP username\n password: SMTP password\n from_addr: Sender email address (defaults to username)\n from_name: Sender display name\n content_type: 'html' or 'plain'\n attachments: List of file paths to attach\n use_tls: Use STARTTLS encryption\n use_ssl: Use SSL encryption (exclusive with use_tls)\n\n Returns:\n True if successful, False otherwise\n \"\"\"\n if from_addr is None:\n from_addr = username\n\n msg = email.message.EmailMessage(policy=email.policy.default)\n\n msg['To'] = to\n msg['Subject'] = subject\n\n if from_name:\n msg['From'] = formataddr((from_name, from_addr))\n else:\n msg['From'] = from_addr\n\n if content_type == 'html':\n msg.set_content(content, subtype='html')\n else:\n msg.set_content(content)\n\n if attachments:\n for filepath in attachments:\n path = Path(filepath)\n if not path.exists():\n print(f\"Warning: Attachment not found: {filepath}\", file=sys.stderr)\n continue\n\n mime_type, encoding = mimetypes.guess_type(filepath)\n if mime_type is None:\n mime_type = 'application/octet-stream'\n\n main_type, sub_type = mime_type.split('/', 1)\n\n with open(filepath, 'rb') as f:\n msg.add_attachment(\n f.read(),\n maintype=main_type,\n subtype=sub_type,\n filename=path.name,\n )\n\n try:\n if use_ssl:\n context = ssl.create_default_context()\n with smtplib.SMTP_SSL(smtp_server, smtp_port, context=context) as server:\n server.login(username, password)\n server.send_message(msg)\n else:\n context = ssl.create_default_context()\n with smtplib.SMTP(smtp_server, smtp_port) as server:\n if use_tls:\n server.starttls(context=context)\n server.login(username, password)\n server.send_message(msg)\n\n print(f\"Email sent successfully to {to}\")\n return True\n\n except Exception as e:\n print(f\"Failed to send email: {e}\", file=sys.stderr)\n return False\n\n\ndef main():\n parser = argparse.ArgumentParser(description='Send email via SMTP')\n parser.add_argument('--to', required=True, help='Recipient email address')\n parser.add_argument('--subject', required=True, help='Email subject')\n parser.add_argument('--content', help='Email body content (or use --template)')\n parser.add_argument('--template', help='Path to email template file')\n parser.add_argument('--template-vars', help='JSON string of template variables')\n parser.add_argument('--smtp-server', required=True, help='SMTP server hostname')\n parser.add_argument('--smtp-port', type=int, required=True, help='SMTP server port')\n parser.add_argument('--username', required=True, help='SMTP username')\n parser.add_argument('--password', required=True, help='SMTP password')\n parser.add_argument('--from-addr', help='Sender email address (default: username)')\n parser.add_argument('--from-name', help='Sender display name')\n parser.add_argument('--content-type', choices=['plain', 'html'], default='plain',\n help='Content type (default: plain)')\n parser.add_argument('--attach', action='append', help='File attachment (can be used multiple times)')\n parser.add_argument('--no-tls', action='store_true', help='Disable STARTTLS')\n parser.add_argument('--use-ssl', action='store_true', help='Use SSL instead of STARTTLS')\n\n args = parser.parse_args()\n\n if args.template and args.content:\n print(\"Error: Cannot specify both --template and --content\", file=sys.stderr)\n sys.exit(1)\n\n if args.template:\n if not args.template_vars:\n print(\"Warning: No template variables provided\", file=sys.stderr)\n variables = {}\n else:\n variables = json.loads(args.template_vars)\n content = read_template(args.template, variables)\n elif args.content:\n content = args.content\n else:\n content = \"\"\n\n # Auto-detect and convert markdown to HTML\n content_type = args.content_type\n if content and content_type == 'plain' and is_markdown_content(content):\n print(\"Detected markdown content, converting to HTML...\", file=sys.stderr)\n content = markdown_to_html(content)\n content_type = 'html'\n\n success = send_email(\n to=args.to,\n subject=args.subject,\n content=content,\n smtp_server=args.smtp_server,\n smtp_port=args.smtp_port,\n username=args.username,\n password=args.password,\n from_addr=args.from_addr,\n from_name=args.from_name,\n content_type=content_type,\n attachments=args.attach,\n use_tls=not args.no_tls,\n use_ssl=args.use_ssl,\n )\n\n sys.exit(0 if success else 1)\n\n\nif __name__ == '__main__':\n main()\n","content_type":"text/x-python; charset=utf-8","language":"python","size":11037,"content_sha256":"a229568325416e470dd9150d6d550cb10e3825a35e062acd38a28abef4c3fbd4"}],"content_json":{"type":"doc","content":[{"type":"heading","attrs":{"level":1},"content":[{"text":"Send Email","type":"text"}]},{"type":"paragraph","content":[{"text":"Send emails via SMTP using Python with support for plain text, HTML formatting, file attachments, and template-based emails.","type":"text"}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"Key Features","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Default Sender Email","type":"text","marks":[{"type":"strong"}]},{"text":": Automatically uses ","type":"text"},{"text":"[email protected]","type":"text","marks":[{"type":"code_inline"}]},{"text":" when no sender is specified","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Automatic Markdown to HTML","type":"text","marks":[{"type":"strong"}]},{"text":": Detects Markdown content and converts to beautifully styled HTML","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Multiple Email Providers","type":"text","marks":[{"type":"strong"}]},{"text":": Supports Gmail, Outlook, QQ Mail, 163/126 Mail, and custom SMTP","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"File Attachments","type":"text","marks":[{"type":"strong"}]},{"text":": Attach multiple files to emails","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Email Templates","type":"text","marks":[{"type":"strong"}]},{"text":": Use template files with variable substitution","type":"text"}]}]}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"Interactive Email Sending Flow","type":"text"}]},{"type":"paragraph","content":[{"text":"This skill guides you through the email sending process step by step.","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"Step 1: Collect Basic Email Information","type":"text"}]},{"type":"paragraph","content":[{"text":"Ask the user for the following required information. If any is missing, prompt the user to provide it:","type":"text"}]},{"type":"table","attrs":{"layout":null},"content":[{"type":"tr","content":[{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Information","type":"text"}]}]},{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Description","type":"text"}]}]},{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Example","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Recipient","type":"text","marks":[{"type":"strong"}]},{"text":" (","type":"text"},{"text":"--to","type":"text","marks":[{"type":"code_inline"}]},{"text":")","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Email address to send to","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"[email protected]","type":"text","marks":[{"type":"code_inline"}]}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Subject","type":"text","marks":[{"type":"strong"}]},{"text":" (","type":"text"},{"text":"--subject","type":"text","marks":[{"type":"code_inline"}]},{"text":")","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Email subject line","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Monthly Report","type":"text","marks":[{"type":"code_inline"}]}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Content","type":"text","marks":[{"type":"strong"}]},{"text":" (","type":"text"},{"text":"--content","type":"text","marks":[{"type":"code_inline"}]},{"text":")","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Email body text or HTML","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Hello, here is your report.","type":"text","marks":[{"type":"code_inline"}]}]}]}]}]},{"type":"paragraph","content":[{"text":"IMPORTANT - Default Sender Email Behavior","type":"text","marks":[{"type":"strong"}]},{"text":":","type":"text"}]},{"type":"paragraph","content":[{"text":"If the user does NOT specify a sender email in their initial request, AUTOMATICALLY use ","type":"text","marks":[{"type":"strong"}]},{"text":"[email protected]","type":"text","marks":[{"type":"code_inline"},{"type":"strong"}]},{"text":" as the default sender. DO NOT ask the user which email to send from.","type":"text","marks":[{"type":"strong"}]}]},{"type":"paragraph","content":[{"text":"Only ask the user for a different sender email if they explicitly mention wanting to use their own email address.","type":"text"}]},{"type":"paragraph","content":[{"text":"When using the default ","type":"text"},{"text":"[email protected]","type":"text","marks":[{"type":"code_inline"}]},{"text":", proceed directly to Step 2 and ask for the 126 email authorization code.","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"Step 2: Identify Email Provider and Collect Credentials","type":"text"}]},{"type":"paragraph","content":[{"text":"Based on the sender's email address domain, identify the email provider and request the appropriate credentials.","type":"text"}]},{"type":"heading","attrs":{"level":4},"content":[{"text":"Email Provider Detection","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":""},"content":[{"text":"@gmail.com, @googlemail.com → Gmail\[email protected], @hotmail.com, @live.com, @office365.com → Outlook/Office 365\[email protected], @vip.qq.com → QQ Mail\[email protected], @126.com → NetEase Mail\[email protected], @aliyun-inc.com → Aliyun Mail\[email protected], @*.sendgrid.net → SendGrid\n@*.mailgun.org → Mailgun\nOther domains → Custom SMTP (ask for server, port, username, password)","type":"text"}]},{"type":"heading","attrs":{"level":4},"content":[{"text":"Provider-Specific Credential Requirements","type":"text"}]},{"type":"paragraph","content":[{"text":"Gmail (@gmail.com, @googlemail.com)","type":"text","marks":[{"type":"strong"}]}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Password Type","type":"text","marks":[{"type":"strong"}]},{"text":": App Password (NOT account password)","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Prerequisite","type":"text","marks":[{"type":"strong"}]},{"text":": Two-factor authentication (2FA) must be enabled","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"How to get App Password","type":"text","marks":[{"type":"strong"}]},{"text":":","type":"text"}]},{"type":"ordered_list","attrs":{"order":1,"listStyle":"number"},"content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Go to https://myaccount.google.com/apppasswords","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Sign in to your Google Account","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Select \"Mail\" and \"Other (Custom name)\" → Enter a name like \"SMTP Script\"","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Click \"Generate\" → Copy the 16-character password","type":"text"}]}]}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"SMTP Server","type":"text","marks":[{"type":"strong"}]},{"text":": ","type":"text"},{"text":"smtp.gmail.com","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Port","type":"text","marks":[{"type":"strong"}]},{"text":": ","type":"text"},{"text":"587","type":"text","marks":[{"type":"code_inline"}]},{"text":" (TLS) or ","type":"text"},{"text":"465","type":"text","marks":[{"type":"code_inline"}]},{"text":" (SSL)","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Username","type":"text","marks":[{"type":"strong"}]},{"text":": Your full Gmail address","type":"text"}]}]}]},{"type":"paragraph","content":[{"text":"Outlook / Office 365 (@outlook.com, @hotmail.com, @live.com, @office365.com)","type":"text","marks":[{"type":"strong"}]}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Password Type","type":"text","marks":[{"type":"strong"}]},{"text":": Account password (same as web login)","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"SMTP Server","type":"text","marks":[{"type":"strong"}]},{"text":": ","type":"text"},{"text":"smtp.office365.com","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Port","type":"text","marks":[{"type":"strong"}]},{"text":": ","type":"text"},{"text":"587","type":"text","marks":[{"type":"code_inline"}]},{"text":" (TLS)","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Username","type":"text","marks":[{"type":"strong"}]},{"text":": Your full Outlook/Office 365 email address","type":"text"}]}]}]},{"type":"paragraph","content":[{"text":"QQ Mail (@qq.com, @vip.qq.com)","type":"text","marks":[{"type":"strong"}]}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Password Type","type":"text","marks":[{"type":"strong"}]},{"text":": SMTP Authorization Code (NOT account password)","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"How to get Authorization Code","type":"text","marks":[{"type":"strong"}]},{"text":":","type":"text"}]},{"type":"ordered_list","attrs":{"order":1,"listStyle":"number"},"content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Login to QQ Mail at https://mail.qq.com","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Click \"Settings\" (设置) → \"Account\" (账户)","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Find \"POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV Service\"","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Open \"POP3/SMTP Service\" or \"IMAP/SMTP Service\"","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Click \"Generate Authorization Code\" (生成授权码)","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Verify identity via SMS → Copy the generated code","type":"text"}]}]}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"SMTP Server","type":"text","marks":[{"type":"strong"}]},{"text":": ","type":"text"},{"text":"smtp.qq.com","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Port","type":"text","marks":[{"type":"strong"}]},{"text":": ","type":"text"},{"text":"587","type":"text","marks":[{"type":"code_inline"}]},{"text":" (TLS) or ","type":"text"},{"text":"465","type":"text","marks":[{"type":"code_inline"}]},{"text":" (SSL)","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Username","type":"text","marks":[{"type":"strong"}]},{"text":": Your full QQ email address","type":"text"}]}]}]},{"type":"paragraph","content":[{"text":"NetEase 163 Mail (@163.com)","type":"text","marks":[{"type":"strong"}]}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Password Type","type":"text","marks":[{"type":"strong"}]},{"text":": SMTP Authorization Code (NOT account password)","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"How to get Authorization Code","type":"text","marks":[{"type":"strong"}]},{"text":":","type":"text"}]},{"type":"ordered_list","attrs":{"order":1,"listStyle":"number"},"content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Login to 163 Mail at https://mail.163.com","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Click \"Settings\" (设置) → \"POP3/SMTP/IMAP\"","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Click \"Open\" next to \"IMAP/SMTP Service\"","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Verify identity → Click \"Get Authorization Code\" (获取授权码)","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Copy the 16-character authorization code","type":"text"}]}]}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"SMTP Server","type":"text","marks":[{"type":"strong"}]},{"text":": ","type":"text"},{"text":"smtp.163.com","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Port","type":"text","marks":[{"type":"strong"}]},{"text":": ","type":"text"},{"text":"465","type":"text","marks":[{"type":"code_inline"}]},{"text":" (SSL) or ","type":"text"},{"text":"994","type":"text","marks":[{"type":"code_inline"}]},{"text":" (IMAP)","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Username","type":"text","marks":[{"type":"strong"}]},{"text":": Your full 163 email address","type":"text"}]}]}]},{"type":"paragraph","content":[{"text":"NetEase 126 Mail (@126.com)","type":"text","marks":[{"type":"strong"}]}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Password Type","type":"text","marks":[{"type":"strong"}]},{"text":": SMTP Authorization Code (NOT account password)","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"How to get Authorization Code","type":"text","marks":[{"type":"strong"}]},{"text":":","type":"text"}]},{"type":"ordered_list","attrs":{"order":1,"listStyle":"number"},"content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Login to 126 Mail at https://mail.126.com","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Click \"Settings\" (设置) → \"POP3/SMTP/IMAP\"","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Enable \"IMAP/SMTP Service\"","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Copy the authorization password displayed","type":"text"}]}]}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"SMTP Server","type":"text","marks":[{"type":"strong"}]},{"text":": ","type":"text"},{"text":"smtp.126.com","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Port","type":"text","marks":[{"type":"strong"}]},{"text":": ","type":"text"},{"text":"465","type":"text","marks":[{"type":"code_inline"}]},{"text":" (SSL) or ","type":"text"},{"text":"25","type":"text","marks":[{"type":"code_inline"}]},{"text":" (SSL)","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Username","type":"text","marks":[{"type":"strong"}]},{"text":": Your full 126 email address","type":"text"}]}]}]},{"type":"paragraph","content":[{"text":"SendGrid","type":"text","marks":[{"type":"strong"}]}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Password Type","type":"text","marks":[{"type":"strong"}]},{"text":": API Key (as password)","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"How to get API Key","type":"text","marks":[{"type":"strong"}]},{"text":":","type":"text"}]},{"type":"ordered_list","attrs":{"order":1,"listStyle":"number"},"content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Login to SendGrid at https://app.sendgrid.com","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Go to Settings → API Keys","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Click \"Create API Key\"","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Set permissions → Click \"Create & View\"","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Copy the API key (only shown once)","type":"text"}]}]}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"SMTP Server","type":"text","marks":[{"type":"strong"}]},{"text":": ","type":"text"},{"text":"smtp.sendgrid.net","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Port","type":"text","marks":[{"type":"strong"}]},{"text":": ","type":"text"},{"text":"587","type":"text","marks":[{"type":"code_inline"}]},{"text":" (TLS) or ","type":"text"},{"text":"465","type":"text","marks":[{"type":"code_inline"}]},{"text":" (SSL)","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Username","type":"text","marks":[{"type":"strong"}]},{"text":": ","type":"text"},{"text":"apikey","type":"text","marks":[{"type":"code_inline"}]},{"text":" (literally this string)","type":"text"}]}]}]},{"type":"paragraph","content":[{"text":"Mailgun","type":"text","marks":[{"type":"strong"}]}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Password Type","type":"text","marks":[{"type":"strong"}]},{"text":": SMTP credentials from dashboard","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"How to get Credentials","type":"text","marks":[{"type":"strong"}]},{"text":":","type":"text"}]},{"type":"ordered_list","attrs":{"order":1,"listStyle":"number"},"content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Login to Mailgun at https://app.mailgun.com","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Go to Sending → Domains","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Select your domain","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Copy SMTP username and password from the page","type":"text"}]}]}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"SMTP Server","type":"text","marks":[{"type":"strong"}]},{"text":": ","type":"text"},{"text":"smtp.mailgun.org","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Port","type":"text","marks":[{"type":"strong"}]},{"text":": ","type":"text"},{"text":"587","type":"text","marks":[{"type":"code_inline"}]},{"text":" (TLS)","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Username","type":"text","marks":[{"type":"strong"}]},{"text":": From Mailgun dashboard","type":"text"}]}]}]},{"type":"paragraph","content":[{"text":"Custom SMTP (Other domains)","type":"text","marks":[{"type":"strong"}]},{"text":" Ask the user to provide:","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"SMTP Server Address","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"SMTP Port","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Username","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Password","type":"text"}]}]}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"Step 3: Auto-detect and Handle Markdown Content","type":"text"}]},{"type":"paragraph","content":[{"text":"The script automatically detects if the email content is in Markdown format by looking for common patterns:","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Headers (","type":"text"},{"text":"#","type":"text","marks":[{"type":"code_inline"}]},{"text":", ","type":"text"},{"text":"##","type":"text","marks":[{"type":"code_inline"}]},{"text":", ","type":"text"},{"text":"###","type":"text","marks":[{"type":"code_inline"}]},{"text":")","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Bold/italic text (","type":"text"},{"text":"**bold**","type":"text","marks":[{"type":"code_inline"}]},{"text":", ","type":"text"},{"text":"*italic*","type":"text","marks":[{"type":"code_inline"}]},{"text":")","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Lists (","type":"text"},{"text":"- item","type":"text","marks":[{"type":"code_inline"}]},{"text":" or ","type":"text"},{"text":"1. item","type":"text","marks":[{"type":"code_inline"}]},{"text":")","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Code blocks (```)","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Links (","type":"text"},{"text":"[text](url)","type":"text","marks":[{"type":"code_inline"}]},{"text":")","type":"text"}]}]}]},{"type":"paragraph","content":[{"text":"If Markdown is detected, the content is automatically converted to beautifully styled HTML with:","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Professional typography and spacing","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Color-coded headers","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Styled tables and code blocks","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Responsive design for email clients","type":"text"}]}]}]},{"type":"paragraph","content":[{"text":"You don't need to manually specify ","type":"text","marks":[{"type":"strong"}]},{"text":"--content-type html","type":"text","marks":[{"type":"code_inline"},{"type":"strong"}]},{"text":" for Markdown content","type":"text","marks":[{"type":"strong"}]},{"text":" - it's handled automatically!","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"Step 4: Collect Optional Information (if needed)","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"--from-name","type":"text","marks":[{"type":"code_inline"}]},{"text":": Display name for sender (e.g., \"John Doe\")","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"--content-type html","type":"text","marks":[{"type":"code_inline"}]},{"text":": For HTML formatted emails (defaults to plain text, but auto-converts Markdown)","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"--attach","type":"text","marks":[{"type":"code_inline"}]},{"text":": File path(s) to attach (can specify multiple)","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"--template","type":"text","marks":[{"type":"code_inline"}]},{"text":": Use template file instead of content","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"--template-vars","type":"text","marks":[{"type":"code_inline"}]},{"text":": JSON string of template variables","type":"text"}]}]}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"Step 5: Confirm and Send","type":"text"}]},{"type":"paragraph","content":[{"text":"Before sending, confirm with the user:","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":""},"content":[{"text":"Ready to send:\nFrom: [Sender Email]\nTo: [Recipient Email]\nSubject: [Subject]\nContent Type: [Plain/HTML]\nAttachments: [List of attachments or None]\n\nProceed to send? (y/n)","type":"text"}]},{"type":"paragraph","content":[{"text":"If confirmed, execute the send_email.py script with all collected parameters.","type":"text"}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"Example Conversations","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"Example 1: Basic Gmail Email","type":"text"}]},{"type":"paragraph","content":[{"text":"User","type":"text","marks":[{"type":"strong"}]},{"text":": Send an email to [email protected] with subject \"Hello\"","type":"text"}]},{"type":"paragraph","content":[{"text":"Skill","type":"text","marks":[{"type":"strong"}]},{"text":": I can help you send that email. I need a few more details:","type":"text"}]},{"type":"ordered_list","attrs":{"order":1,"listStyle":"number"},"content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Content","type":"text","marks":[{"type":"strong"}]},{"text":": What should the email body contain?","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Sender Email","type":"text","marks":[{"type":"strong"}]},{"text":": What email address should I send from?","type":"text"}]}]}]},{"type":"paragraph","content":[{"text":"User","type":"text","marks":[{"type":"strong"}]},{"text":": The content is \"Hi John, just saying hello!\" and send from [email protected]","type":"text"}]},{"type":"paragraph","content":[{"text":"Skill","type":"text","marks":[{"type":"strong"}]},{"text":": I detected you're using Gmail. For Gmail, you need an App Password (not your regular password).","type":"text"}]},{"type":"paragraph","content":[{"text":"To get your App Password:","type":"text"}]},{"type":"ordered_list","attrs":{"order":1,"listStyle":"number"},"content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Go to https://myaccount.google.com/apppasswords","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Sign in and create an App Password for \"Mail\"","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Copy the 16-character password","type":"text"}]}]}]},{"type":"paragraph","content":[{"text":"Please provide your Gmail App Password:","type":"text","marks":[{"type":"strong"}]}]},{"type":"paragraph","content":[{"text":"User","type":"text","marks":[{"type":"strong"}]},{"text":": abcd efgh ijkl mnop","type":"text"}]},{"type":"paragraph","content":[{"text":"Skill","type":"text","marks":[{"type":"strong"}]},{"text":": Ready to send:","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"From: [email protected]","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"To: [email protected]","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Subject: Hello","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Content: Hi John, just saying hello!","type":"text"}]}]}]},{"type":"paragraph","content":[{"text":"Proceed to send? (y/n)","type":"text"}]},{"type":"hr","attrs":{"markup":"---"}},{"type":"heading","attrs":{"level":3},"content":[{"text":"Example 2: Markdown Content with Default Sender","type":"text"}]},{"type":"paragraph","content":[{"text":"User","type":"text","marks":[{"type":"strong"}]},{"text":": 发一封邮件给 [email protected],主题是\"AR眼镜行业分析\",内容是 [用户提供的 Markdown 报告]","type":"text"}]},{"type":"paragraph","content":[{"text":"Skill","type":"text","marks":[{"type":"strong"}]},{"text":": 我来帮您发送这封邮件。检测到您没有指定发件人邮箱,我将使用默认邮箱 ","type":"text"},{"text":"[email protected]","type":"text","marks":[{"type":"code_inline"}]},{"text":" 发送。","type":"text"}]},{"type":"paragraph","content":[{"text":"同时,我发现您的内容是 Markdown 格式,将自动转换为美观的 HTML 格式,让报告更易读。","type":"text"}]},{"type":"paragraph","content":[{"text":"为了使用 126 邮箱发送,我需要您提供 ","type":"text"},{"text":"SMTP 授权码","type":"text","marks":[{"type":"strong"}]},{"text":"。","type":"text"}]},{"type":"paragraph","content":[{"text":"获取授权码步骤:","type":"text"}]},{"type":"ordered_list","attrs":{"order":1,"listStyle":"number"},"content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"登录 126 邮箱 → 设置 → POP3/SMTP/IMAP","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"启用 \"IMAP/SMTP 服务\"","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"复制显示的授权密码","type":"text"}]}]}]},{"type":"paragraph","content":[{"text":"请提供 [email protected] 的授权码:","type":"text","marks":[{"type":"strong"}]}]},{"type":"paragraph","content":[{"text":"User","type":"text","marks":[{"type":"strong"}]},{"text":": [提供授权码]","type":"text"}]},{"type":"paragraph","content":[{"text":"Skill","type":"text","marks":[{"type":"strong"}]},{"text":": 准备发送邮件:","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"发件人: [email protected]","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"收件人: [email protected]","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"主题: AR眼镜行业分析","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"格式: Markdown → HTML (自动转换)","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"内容预览: 包含标题、列表、表格等格式化内容","type":"text"}]}]}]},{"type":"paragraph","content":[{"text":"确认发送? (y/n)","type":"text"}]},{"type":"hr","attrs":{"markup":"---"}},{"type":"heading","attrs":{"level":3},"content":[{"text":"Example 3: Default Sender with Missing Content","type":"text"}]},{"type":"paragraph","content":[{"text":"User","type":"text","marks":[{"type":"strong"}]},{"text":": 发邮件给 [email protected],主题是项目报告","type":"text"}]},{"type":"paragraph","content":[{"text":"Skill","type":"text","marks":[{"type":"strong"}]},{"text":": 我需要收集邮件内容:","type":"text"}]},{"type":"paragraph","content":[{"text":"邮件正文是什么?","type":"text","marks":[{"type":"strong"}]}]},{"type":"paragraph","content":[{"text":"User","type":"text","marks":[{"type":"strong"}]},{"text":": 项目已完成,所有里程碑都已达成。","type":"text"}]},{"type":"paragraph","content":[{"text":"Skill","type":"text","marks":[{"type":"strong"}]},{"text":": 我将使用默认邮箱 ","type":"text"},{"text":"[email protected]","type":"text","marks":[{"type":"code_inline"}]},{"text":" 发送。","type":"text"}]},{"type":"paragraph","content":[{"text":"为了使用 126 邮箱发送,我需要您提供 ","type":"text"},{"text":"SMTP 授权码","type":"text","marks":[{"type":"strong"}]},{"text":"。","type":"text"}]},{"type":"paragraph","content":[{"text":"获取授权码步骤:","type":"text"}]},{"type":"ordered_list","attrs":{"order":1,"listStyle":"number"},"content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"登录 126 邮箱 → 设置 → POP3/SMTP/IMAP","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"启用 \"IMAP/SMTP 服务\"","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"复制显示的授权密码","type":"text"}]}]}]},{"type":"paragraph","content":[{"text":"请提供 [email protected] 的授权码:","type":"text","marks":[{"type":"strong"}]}]},{"type":"paragraph","content":[{"text":"User","type":"text","marks":[{"type":"strong"}]},{"text":": [提供授权码]","type":"text"}]},{"type":"paragraph","content":[{"text":"Skill","type":"text","marks":[{"type":"strong"}]},{"text":": 准备发送邮件:","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"发件人: [email protected]","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"收件人: [email protected]","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"主题: 项目报告","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"内容: 项目已完成,所有里程碑都已达成。","type":"text"}]}]}]},{"type":"paragraph","content":[{"text":"确认发送?(y/n)","type":"text"}]},{"type":"hr","attrs":{"markup":"---"}},{"type":"heading","attrs":{"level":3},"content":[{"text":"Example 4: User Specifies Custom Sender Email","type":"text"}]},{"type":"paragraph","content":[{"text":"User","type":"text","marks":[{"type":"strong"}]},{"text":": Send a report to [email protected] from [email protected] about Q4 results, with attachment /home/user/q4_report.pdf","type":"text"}]},{"type":"paragraph","content":[{"text":"Skill","type":"text","marks":[{"type":"strong"}]},{"text":": I'll help you send that email. Please provide the email content:","type":"text"}]},{"type":"paragraph","content":[{"text":"What should the email say about the Q4 results?","type":"text","marks":[{"type":"strong"}]}]},{"type":"paragraph","content":[{"text":"User","type":"text","marks":[{"type":"strong"}]},{"text":": Please find attached the Q4 financial report. Let me know if you have any questions.","type":"text"}]},{"type":"paragraph","content":[{"text":"Skill","type":"text","marks":[{"type":"strong"}]},{"text":": I see you're using Outlook. You'll need your Outlook account password (same as web login).","type":"text"}]},{"type":"paragraph","content":[{"text":"Please provide your Outlook password:","type":"text","marks":[{"type":"strong"}]}]},{"type":"paragraph","content":[{"text":"User","type":"text","marks":[{"type":"strong"}]},{"text":": mypassword123","type":"text"}]},{"type":"paragraph","content":[{"text":"Skill","type":"text","marks":[{"type":"strong"}]},{"text":": Ready to send:","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"From: [email protected]","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"To: [email protected]","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Subject: Q4 results","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Content: Please find attached the Q4 financial report. Let me know if you have any questions.","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Attachment: /home/user/q4_report.pdf","type":"text"}]}]}]},{"type":"paragraph","content":[{"text":"Proceed to send? (y/n)","type":"text"}]},{"type":"hr","attrs":{"markup":"---"}},{"type":"heading","attrs":{"level":3},"content":[{"text":"Example 5: Custom SMTP","type":"text"}]},{"type":"paragraph","content":[{"text":"User","type":"text","marks":[{"type":"strong"}]},{"text":": Send email to [email protected] from [email protected]","type":"text"}]},{"type":"paragraph","content":[{"text":"Skill","type":"text","marks":[{"type":"strong"}]},{"text":": I need to gather some information:","type":"text"}]},{"type":"ordered_list","attrs":{"order":1,"listStyle":"number"},"content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Subject","type":"text","marks":[{"type":"strong"}]},{"text":": What is the email subject?","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Content","type":"text","marks":[{"type":"strong"}]},{"text":": What is the email body?","type":"text"}]}]}]},{"type":"paragraph","content":[{"text":"User","type":"text","marks":[{"type":"strong"}]},{"text":": Subject is Test Email, content is Hello World","type":"text"}]},{"type":"paragraph","content":[{"text":"Skill","type":"text","marks":[{"type":"strong"}]},{"text":": Since you're using a custom domain ([email protected]), I'll need your SMTP configuration:","type":"text"}]},{"type":"ordered_list","attrs":{"order":1,"listStyle":"number"},"content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"SMTP Server","type":"text","marks":[{"type":"strong"}]},{"text":": What is your SMTP server address?","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"SMTP Port","type":"text","marks":[{"type":"strong"}]},{"text":": What port should I use?","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Username","type":"text","marks":[{"type":"strong"}]},{"text":": What is your SMTP username?","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Password","type":"text","marks":[{"type":"strong"}]},{"text":": What is your SMTP password?","type":"text"}]}]}]},{"type":"paragraph","content":[{"text":"User","type":"text","marks":[{"type":"strong"}]},{"text":": Server is smtp.mydomain.com, port 587, username is [email protected], password is secret","type":"text"}]},{"type":"paragraph","content":[{"text":"Skill","type":"text","marks":[{"type":"strong"}]},{"text":": Ready to send:","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"From: [email protected]","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"To: [email protected]","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Subject: Test Email","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Content: Hello World","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"SMTP Server: smtp.mydomain.com:587","type":"text"}]}]}]},{"type":"paragraph","content":[{"text":"Proceed to send? (y/n)","type":"text"}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"Script Command Reference","type":"text"}]},{"type":"paragraph","content":[{"text":"Once all information is collected, execute the script with appropriate parameters:","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"Basic Command","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"python3 scripts/send_email.py \\\n --to [email protected] \\\n --subject \"Email Subject\" \\\n --content \"Email body content\" \\\n --smtp-server smtp.gmail.com \\\n --smtp-port 587 \\\n --username [email protected] \\\n --password your-password-or-app-password","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"HTML Email","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"python3 scripts/send_email.py \\\n --to [email protected] \\\n --subject \"Email Subject\" \\\n --content \"\u003ch1>Hello\u003c/h1>\u003cp>HTML content\u003c/p>\" \\\n --content-type html \\\n --smtp-server smtp.gmail.com \\\n --smtp-port 587 \\\n --username [email protected] \\\n --password your-password","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"Email with Attachments","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"python3 scripts/send_email.py \\\n --to [email protected] \\\n --subject \"Email Subject\" \\\n --content \"Email body\" \\\n --attach /path/to/file1.pdf \\\n --attach /path/to/file2.csv \\\n --smtp-server smtp.gmail.com \\\n --smtp-port 587 \\\n --username [email protected] \\\n --password your-password","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"Email with Template","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"python3 scripts/send_email.py \\\n --to [email protected] \\\n --subject \"Email Subject\" \\\n --template assets/simple-notification.html \\\n --template-vars '{\"title\":\"Notification\",\"message\":\"Your report is ready!\"}' \\\n --content-type html \\\n --smtp-server smtp.gmail.com \\\n --smtp-port 587 \\\n --username [email protected] \\\n --password your-password","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"SSL Connection (instead of TLS)","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"python3 scripts/send_email.py \\\n --to [email protected] \\\n --subject \"Email Subject\" \\\n --content \"Email body\" \\\n --smtp-server smtp.gmail.com \\\n --smtp-port 465 \\\n --use-ssl \\\n --username [email protected] \\\n --password your-password","type":"text"}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"SMTP Server Configuration Reference","type":"text"}]},{"type":"table","attrs":{"layout":null},"content":[{"type":"tr","content":[{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Provider","type":"text"}]}]},{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"SMTP Server","type":"text"}]}]},{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Port","type":"text"}]}]},{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Encryption","type":"text"}]}]},{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Password Type","type":"text"}]}]},{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Username","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Gmail","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"smtp.gmail.com","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"587","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"TLS","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"App Password","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Full email","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Gmail","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"smtp.gmail.com","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"465","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"SSL","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"App Password","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Full email","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Outlook","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"smtp.office365.com","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"587","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"TLS","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Account Password","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Full email","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"QQ Mail","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"smtp.qq.com","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"587","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"TLS","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Authorization Code","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Full email","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"QQ Mail","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"smtp.qq.com","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"465","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"SSL","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Authorization Code","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Full email","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"163 Mail","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"smtp.163.com","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"465","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"SSL","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Authorization Code","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Full email","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"163 Mail","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"smtp.163.com","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"994","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"SSL","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Authorization Code","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Full email","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"126 Mail","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"smtp.126.com","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"465","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"SSL","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Authorization Code","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Full email","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"126 Mail","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"smtp.126.com","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"25","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"SSL","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Authorization Code","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Full email","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"SendGrid","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"smtp.sendgrid.net","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"587","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"TLS","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"API Key","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"apikey","type":"text","marks":[{"type":"code_inline"}]}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"SendGrid","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"smtp.sendgrid.net","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"465","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"SSL","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"API Key","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"apikey","type":"text","marks":[{"type":"code_inline"}]}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Mailgun","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"smtp.mailgun.org","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"587","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"TLS","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"SMTP Password","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"From dashboard","type":"text"}]}]}]}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"Installation","type":"text"}]},{"type":"paragraph","content":[{"text":"Before using this skill, install the required Python dependencies:","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"pip install -r requirements.txt","type":"text"}]},{"type":"paragraph","content":[{"text":"This installs the ","type":"text"},{"text":"markdown","type":"text","marks":[{"type":"code_inline"}]},{"text":" library (version ≥3.4.0) which is required for automatic Markdown to HTML conversion.","type":"text"}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"Resources","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"scripts/send_email.py","type":"text"}]},{"type":"paragraph","content":[{"text":"Main Python script for sending emails. Supports:","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Plain text and HTML content","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Multiple file attachments","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Email templates with variable substitution","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"TLS and SSL encryption","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Custom sender names","type":"text"}]}]}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"references/smtp-servers.md","type":"text"}]},{"type":"paragraph","content":[{"text":"Common SMTP server configurations including Gmail, Outlook, 126, QQ, 163, SendGrid, Mailgun, and Aliyun.","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"assets/","type":"text"}]},{"type":"paragraph","content":[{"text":"Email templates:","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"simple-notification.html","type":"text","marks":[{"type":"code_inline"}]},{"text":" - Basic notification template","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"report-summary.html","type":"text","marks":[{"type":"code_inline"}]},{"text":" - Professional report template with metrics grid","type":"text"}]}]}]}]},"metadata":{"date":"2026-11-02","name":"send-email","author":"@skillopedia","source":{"stars":9,"repo_name":"wayne-skills","origin_url":"https://github.com/wangyendt/wayne-skills/blob/HEAD/send-email/SKILL.md","repo_owner":"wangyendt","body_sha256":"d5530e2d944c936bf38306b1cf331270fe58390fa47c50dd166c4122e9699135","cluster_key":"d27db63f24721e2e40ff0e2a62799549a9e315c33a27325676c283980c6c22fb","clean_bundle":{"format":"clean-skill-bundle-v1","source":"wangyendt/wayne-skills/send-email/SKILL.md","text_bytes":15631,"source_commit":"072d00f36c1216c1151b753bde19481e93a631f1","skills_sh_rank":16809,"attachment_count":5,"text_attachments":5,"attachment_storage":"skill_attachments","binary_attachments":0},"cluster_size":1,"skill_md_path":"send-email/SKILL.md","import_metadata":{"date":"2026-11-02","author":"@skillopedia","version":"v1","category":"productivity-workflow","category_label":"Productivity"},"exact_dupes_collapsed_into_this":0},"version":"v1","category":"productivity-workflow","import_tag":"skills-sh-top20k-2026-11","description":"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) Send a notification, (4) Use email templates, or (5) Send files via email.","dependencies":"python>=3.8, markdown>=3.4.0"}},"renderedAt":1793661502583}

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 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…