Production-grade, project-aware automated outreach system with LLM-powered email personalization.
- Project-Aware AI: Every email references YOUR specific projects
- Semantic Matching: Vector embeddings match projects to job roles
- Selection Reasoning: LLM explains WHY each project was chosen
- Quality Controls: Word limits, forbidden phrases, project mention enforcement
- Rate Limiting: Safe sending at scale (50/hour, 500/day default)
- Preview Mode: Review emails before sending
cd Mail_Agent
pip install -e .cp .env.example .env
# Edit .env with your OpenAI API key and SMTP credentialsmail-agent validate-csv your_contacts.csvmail-agent preview your_contacts.csv your_resume.pdf --limit 3# Dry run first
mail-agent send contacts.csv resume.pdf --dry-run
# Actually send
mail-agent send contacts.csv resume.pdf --delay 5company_name,hr_name,email,job_role,company_domain
Stripe,Alex Chen,alex@stripe.com,Software Engineering Intern,stripe.comRequired columns: company_name, hr_name, email, job_role
Optional: company_domain
Set in .env:
OPENAI_API_KEY=sk-...
SMTP_HOST=smtp.gmail.com
SMTP_PORT=587
SMTP_USERNAME=you@gmail.com
SMTP_PASSWORD=your-app-password
MAX_EMAILS_PER_HOUR=50
MAX_EMAILS_PER_DAY=500| Command | Description |
|---|---|
preview |
Generate and preview emails without sending |
send |
Generate and send emails |
test-smtp |
Test SMTP connection |
validate-csv |
Validate CSV schema |
- Resume Parsing: Extracts all projects with structured schema
- Vector Indexing: Embeds projects in ChromaDB for semantic search
- Role Analysis: LLM extracts requirements from job role
- Project Selection: Semantic + skill matching, with reasoning
- Email Generation: Context-injected LLM with quality validation
- Rate-Limited Sending: SMTP with attachments
MIT