2025-09-09 21:19:25 +05:30

📧 Mail Composer

GitHub stars GitHub forks GitHub issues GitHub license

A modern, feature-rich email composer application built with vanilla JavaScript, HTML, CSS, and Firebase for real email sending capabilities.

Mail Composer Demo

🚀 Live Demo

Try Mail Composer Live (Coming Soon)

Features

✉️ Core Email Functionality

  • Real email sending - Powered by Firebase Functions and Nodemailer
  • To, CC, BCC fields - Support for multiple recipients
  • Subject line - Required field validation
  • Priority levels - Normal, High, Low priority options
  • Rich text editor - Bold, italic, underline formatting
  • Link insertion - Add clickable links to your emails

📎 Attachments

  • File upload support - Drag and drop or click to select
  • File type validation - PDF, DOC, DOCX, TXT, JPG, PNG, GIF
  • Size limits - Maximum 10MB per file
  • Visual file list - See attached files with remove options

💾 Draft Management

  • Cloud sync - Drafts stored in Firebase Firestore
  • Manual save - Save drafts manually anytime
  • Auto-save - Automatic draft saving every 30 seconds
  • Draft loading - Load and continue editing saved drafts
  • Draft deletion - Remove unwanted drafts
  • Local backup - Drafts also persist in localStorage

🔥 Firebase Integration

  • Real email sending - Firebase Functions with Nodemailer
  • Cloud storage - Firestore for drafts and email logs
  • Error handling - Comprehensive error reporting
  • Email logging - Track sent emails for analytics
  • Multiple providers - Support for Gmail, SendGrid, Mailgun, etc.

🎨 User Experience

  • Responsive design - Works on desktop and mobile devices
  • Modern UI - Clean, professional interface
  • Real-time validation - Instant feedback on form fields
  • Character counter - Track message length
  • Keyboard shortcuts - Ctrl+B (bold), Ctrl+I (italic), Ctrl+U (underline), Ctrl+S (save)
  • Loading states - Visual feedback during operations

🔒 Data Safety

  • Form validation - Prevents sending incomplete emails
  • Unsaved changes warning - Alerts before leaving page with unsaved content
  • Error handling - Graceful handling of failures

🎯 Quick Start

# Clone the repository
git clone https://github.com/Gowtham-Darkseid/MailComposer.git

# Navigate to project directory
cd MailComposer

# Install dependencies
npm install

# Start development server
npm run dev

📧 Enable Real Email Sending

  1. Create free EmailJS account
  2. Set up email service (Gmail recommended)
  3. Create email template with variables: {{to_email}}, {{subject}}, {{message}}
  4. Update emailjs-config.js with your credentials
  5. Start sending real emails!

See EmailJS Setup Guide for detailed instructions.

Building for Production

npm run build

The built files will be in the dist directory.

Preview Production Build

npm run preview

Usage

Composing an Email

  1. Fill in recipients - Enter email addresses in To, CC, or BCC fields (separate multiple emails with commas)
  2. Add subject - Enter a descriptive subject line
  3. Compose message - Use the rich text editor to write your email
  4. Format text - Use toolbar buttons or keyboard shortcuts for formatting
  5. Attach files - Click the attachment area or drag files to attach them
  6. Set priority - Choose email priority level
  7. Send or save - Click Send to send immediately, or Save Draft to save for later

Working with Drafts

  • Auto-save: Drafts are automatically saved every 30 seconds while composing
  • Manual save: Click "Save Draft" to save immediately
  • Load draft: Click "Load" on any saved draft to continue editing
  • Delete draft: Click "Delete" to remove unwanted drafts

Keyboard Shortcuts

  • Ctrl+B / Cmd+B - Bold
  • Ctrl+I / Cmd+I - Italic
  • Ctrl+U / Cmd+U - Underline
  • Ctrl+S / Cmd+S - Save draft

Technical Details

Technologies Used

  • Frontend: Vanilla JavaScript (ES6+), HTML5, CSS3
  • Backend: Firebase Functions (Node.js)
  • Database: Firebase Firestore
  • Email Service: Nodemailer with Gmail/SMTP support
  • Build Tool: Vite
  • Storage: Firestore + localStorage for draft persistence
  • Styling: CSS Custom Properties (CSS Variables)
  • Icons: Unicode emojis and custom SVG

Browser Support

  • Chrome 60+
  • Firefox 55+
  • Safari 12+
  • Edge 79+

File Structure

├── index.html              # Main HTML file
├── style.css               # Styles and layout
├── main.js                 # Application logic
├── firebase-config.js      # Firebase configuration
├── package.json            # Dependencies and scripts
├── firebase.json           # Firebase project configuration
├── firestore.rules         # Firestore security rules
├── firestore.indexes.json  # Firestore indexes
├── .env.example            # Environment variables template
├── FIREBASE_SETUP.md       # Firebase setup guide
├── functions/              # Firebase Functions
│   ├── index.js            # Cloud Functions code
│   └── package.json        # Functions dependencies
├── public/
│   └── vite.svg            # App icon
└── README.md               # This file

Customization

Styling

Modify CSS custom properties in style.css to change colors, fonts, and layout:

:root {
  --primary-color: #3b82f6;
  --success-color: #10b981;
  --error-color: #ef4444;
  /* ... other variables */
}

Email Service Integration

The application now includes Firebase Functions for real email sending. Supported email services:

Gmail (Default)

// Already configured in functions/index.js
// Just set your Gmail credentials in Firebase Functions config

SendGrid

// In functions/index.js, add SendGrid configuration:
const sgMail = require('@sendgrid/mail');
sgMail.setApiKey(process.env.SENDGRID_API_KEY);

Mailgun

// In functions/index.js, add Mailgun configuration:
const mailgun = require('mailgun-js');
const mg = mailgun({
  apiKey: process.env.MAILGUN_API_KEY,
  domain: process.env.MAILGUN_DOMAIN
});

Custom SMTP

// Modify the transporter in functions/index.js:
const transporter = nodemailer.createTransporter({
  host: 'your-smtp-host.com',
  port: 587,
  secure: false,
  auth: {
    user: process.env.EMAIL_USER,
    pass: process.env.EMAIL_PASSWORD
  }
});

File Upload Limits

Modify file size and type restrictions in the validateFile() method:

const maxSize = 10 * 1024 * 1024; // 10MB
const allowedTypes = [
  'application/pdf',
  // ... add more types
];

Contributing

  1. Fork the repository
  2. Create a feature branch (git checkout -b feature/amazing-feature)
  3. Commit your changes (git commit -m 'Add amazing feature')
  4. Push to the branch (git push origin feature/amazing-feature)
  5. Open a Pull Request

License

This project is open source and available under the MIT License.

Support

If you encounter any issues or have questions, please:

  1. Check the existing issues in the repository
  2. Create a new issue with detailed information about the problem
  3. Include steps to reproduce the issue

Roadmap

  • Email templates
  • Spell check integration
  • Emoji picker
  • Scheduled sending
  • Email signatures
  • Contact management
  • Dark mode theme
  • Offline support
S
Description
No description provided
Readme 67 KiB
Languages
JavaScript 68.8%
CSS 19.7%
HTML 11.5%