email-send-bulk
$
npx mdskill add aAAaqwq/AGI-Super-Team/email-send-bulkExecute Gmail API bulk sends after user confirmation.
- Handles email campaigns and direct message requests.
- Requires Python 3.12 and Google OAuth credentials.
- Filters sheet rows by status and email availability.
- Displays full email details before requesting approval.
SKILL.md
.github/skills/email-send-bulkView on GitHub ↗
--- name: email-send-bulk description: Gmail API bulk email sending --- # Email Send Bulk > Bulk email sending via Gmail API from Google Sheets ## When to use - "send email" - "write an email" - "email campaign" - When `preferred_channel = Email` in data ## IMPORTANT: Confirmation rule **ALWAYS show the email text (To, Subject, Body) and ask for user confirmation BEFORE sending.** Never send an email without an explicit "yes" / "send it" from the user. ## Dependencies - Python 3.12+ (venv: `$GOOGLE_TOOLS_PATH/.venv/bin/python3`) - google-api-python-client, google-auth-oauthlib - Google OAuth token with Gmail scope ## Paths | What | Path | |------|------| | Script | `$GOOGLE_TOOLS_PATH/send_emails.py` | | Token | `$GOOGLE_TOOLS_PATH/token.json` | | Credentials | `$GOOGLE_TOOLS_PATH/credentials.json` | ## Spreadsheet Config - **ID:** `YOUR_SPREADSHEET_ID` - **Sheet:** `Form Responses (1)` | Column | Index | Purpose | |--------|-------|---------| | B | 1 | Name | | C | 2 | Email | | T | 19 | Email Status | | U | 20 | Email text | ## How to run ```bash cd $GOOGLE_TOOLS_PATH .venv/bin/python3 send_emails.py 5 # send 5 emails .venv/bin/python3 send_emails.py 10 # send 10 emails .venv/bin/python3 send_emails.py # default 5 ``` ## How it works 1. Reads Google Sheet 2. Filters: `status != Sent` AND `email` is not empty AND `text` is not empty 3. Composes email from `Your Name <your@email.com>` 4. Sends via Gmail API 5. Updates status in column T 6. **1 sec delay** between emails ## Subject Hardcoded in script: ``` Data labeling training from YourCompany Inc. ``` To change -- edit `SUBJECT` in the script. ## Statuses (column T) - `Sent` -- success - `Error: ...` -- error details ## Sender ``` From: Your Name <your@email.com> ``` ## Limits - Gmail limit: ~500 emails/day - ~2000 emails/day for Google Workspace - 1 sec delay (can be reduced) ## How to prepare email text Text is taken from column U. Can be prepared via: ```python # $GOOGLE_TOOLS_PATH/prepare_emails.py # Generates personalized text for each recipient ``` ## Troubleshooting | Problem | Solution | |---------|----------| | 401 Unauthorized | Refresh token: `google-auth` | | Daily limit exceeded | Wait 24 hours | | Invalid email | Check format in spreadsheet | ## Related skills - `telegram-send` -- alternative channel - `google-auth` -- if authorization issues - `update-lead` -- update status after campaign
More from aAAaqwq/AGI-Super-Team
- a-fund-monitor监控 A 股基金实时估值与盘后净值,自动判断交易日并生成提醒或分析。
- account-executive>
- add-leadAdd company/person/relationship to CRM
- adsComprehensive ad account analysis across all major platforms (Google, Meta
- ads-agentAI-агент для управления Facebook рекламой. Вызывай для анализа, оптимизации, создания кампаний и отчётов.
- afrexai-compliance-auditRun internal compliance audits against major governance and security
- afrexai-personal-financeComplete personal finance system — budgeting, debt payoff, investing, tax optimization, net worth tracking, and financial independence planning. Use when managing money, building wealth, paying off debt, planning retirement, or optimizing taxes. Zero dependencies.
- after-salesUse when managing post-purchase experience, building customer loyalty, or increasing repeat purchases
- agent-contactsAI agent contacts — add, list, remove MCP contacts. Use when someone gives an agent URL, or when you need to view/remove contacts.
- agent-model-switcher批量查看和切换子 agent 的模型配置,用于统一调整多 agent 的 provider/model 设置。