Source: conversionmediagroup/findyourjobnow ยท src/findyourjobnow/templates/emails/
{% templatetag %} syntax. Variables like {{title}}, {{body}}, {{url}} are filled at send time. Images reference {{SITE_URL}}/static/ so logos won't render here. The alert emails also use coldmail.app as the actual sending service (not SES directly).
common/emails.py โ basic_email() โ Uses basic.html via SES with X-SES-CONFIGURATION-SET: FYJNcommon/emails.py โ alert_email() โ Uses basic_alert.html via SESalerts/tasks.py โ send_alert_mail() โ Uses basic_alert.html via ColdMail (not SES)integrations/services/cold_mail_send_service.py โ ColdMail API for drip campaignsWelcome to Find Your Job Now! Thanks for signing up. We have thousands of job listings waiting for you. Click below to start your job search today. https://findyourjobnow.com/search?keyword=Sales&zip=10006
<!-- Base email layout structure -->
1. Preheader text (hidden, for email client preview)
2. Centered table (max 600px)
3. Logo area:
- LIGHT mode: fyjn_email_logo_light.png (default)
- DARK mode: fyjn_email_logo_dark.png (via CSS @media prefers-color-scheme)
4. {% block email_body %} โ child template content goes here
5. Footer (from footer.html)
Dark mode support:
- Apple Mail: uses <style> @media (prefers-color-scheme: dark)
- Gmail: uses u + .body filter for brightness inversion
Font: "Pangram" (custom, loaded from /static/fonts/), fallback: Helvetica, Arial, sans-serif
Contains:
- Viewport meta tags
- x-apple-disable-message-reformatting
- color-scheme: light dark
- Custom font @font-face (Pangram Bold + Regular from /static/fonts/)
- Full CSS reset for email clients
- Button styles (.button, .button--green, .button--red)
- Dark mode overrides (@media prefers-color-scheme: dark)
โ body bg โ #333, text โ #FFF
โ .attributes_content bg โ #222
- MSO (Outlook) fallback font: Arial
- Responsive: @media max-width 600px โ full width tables
Total: ~350 lines of CSS
Two sending paths:
1. SES Direct (common/emails.py)
โโ basic_email() / alert_email()
โโ Uses Django's EmailMultiAlternatives
โโ Header: X-SES-CONFIGURATION-SET: FYJN
โโ FROM: settings.DEFAULT_FROM_EMAIL
โโ For: Transactional (signup, password reset, etc.)
2. ColdMail API (alerts/tasks.py โ cold_mail_send_service.py)
โโ https://my.coldmail.app/api/v1
โโ Mailbox pool with round-robin rotation
โโ Pixel tracking via ColdMail
โโ For: Drip campaigns, job alerts, re-engagement
โโ Templates stored in DB: EmailAlertsTemplate model
โโ Scheduling: AdminAlertSchedule โ Celery tasks
โโ Stagger: 1.2s per email + random 0.1-0.4s jitter
Email alert flow:
Celery beat โ check_admin_alerts_schedule()
โ validate_schedule() (checks day-of-week, date range)
โ get_users_or_leads() (filters by edu status, source, etc.)
โ broadcast_email() (fans out with stagger)
โ process_and_send_email()
โ get_email_template() (picks next template in flow, respects repeat limit)
โ send_alert_mail()
โ render basic_alert.html with template body
โ send_email_via_coldmail()
Models:
- EmailAlertsTemplate: subject + body_template (Django template syntax)
- EmailAlertsTemplatesFlow: ordered sequence per schedule
- AdminAlertSchedule: frequency, target audience, date range
- AdminAlertLogs: sent/opened tracking per recipient