Metadata-Version: 2.4
Name: muffinbite
Version: 0.1.3
Home-page: https://github.com/Shivansh-varshney/MuffinBite
Author: Shivansh Varshney
Author-email: shivanshvarshney45@gmail.com
License: MIT
Classifier: Programming Language :: Python :: 3
Classifier: Operating System :: OS Independent
Requires-Python: >=3.8
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: beautifulsoup4==4.13.5
Requires-Dist: build==1.3.0
Requires-Dist: cachetools==5.5.2
Requires-Dist: certifi==2025.1.31
Requires-Dist: cffi==2.0.0
Requires-Dist: charset-normalizer==3.4.1
Requires-Dist: colorama==0.4.6
Requires-Dist: configparser==7.2.0
Requires-Dist: cryptography==45.0.7
Requires-Dist: docutils==0.22.2
Requires-Dist: et_xmlfile==2.0.0
Requires-Dist: google-api-core==2.24.2
Requires-Dist: google-api-python-client==2.167.0
Requires-Dist: google-auth==2.39.0
Requires-Dist: google-auth-httplib2==0.2.0
Requires-Dist: google-auth-oauthlib==1.2.1
Requires-Dist: googleapis-common-protos==1.70.0
Requires-Dist: httplib2==0.22.0
Requires-Dist: id==1.5.0
Requires-Dist: idna==3.10
Requires-Dist: jaraco.classes==3.4.0
Requires-Dist: jaraco.context==6.0.1
Requires-Dist: jaraco.functools==4.3.0
Requires-Dist: jeepney==0.9.0
Requires-Dist: keyring==25.6.0
Requires-Dist: markdown-it-py==4.0.0
Requires-Dist: mdurl==0.1.2
Requires-Dist: more-itertools==10.8.0
Requires-Dist: nh3==0.3.1
Requires-Dist: numpy==2.2.4
Requires-Dist: oauthlib==3.2.2
Requires-Dist: openpyxl==3.1.5
Requires-Dist: packaging==25.0
Requires-Dist: pandas==2.2.3
Requires-Dist: plyer==2.1.0
Requires-Dist: prettytable==3.16.0
Requires-Dist: prompt_toolkit==3.0.52
Requires-Dist: proto-plus==1.26.1
Requires-Dist: protobuf==6.30.2
Requires-Dist: pwinput==1.0.3
Requires-Dist: pyasn1==0.6.1
Requires-Dist: pyasn1_modules==0.4.2
Requires-Dist: pycparser==2.23
Requires-Dist: Pygments==2.19.2
Requires-Dist: pyparsing==3.2.3
Requires-Dist: pyproject_hooks==1.2.0
Requires-Dist: python-dateutil==2.9.0.post0
Requires-Dist: pytz==2025.2
Requires-Dist: readme_renderer==44.0
Requires-Dist: requests==2.32.3
Requires-Dist: requests-oauthlib==2.0.0
Requires-Dist: requests-toolbelt==1.0.0
Requires-Dist: rfc3986==2.0.0
Requires-Dist: rich==14.2.0
Requires-Dist: rsa==4.9.1
Requires-Dist: SecretStorage==3.4.0
Requires-Dist: setuptools==80.9.0
Requires-Dist: six==1.17.0
Requires-Dist: soupsieve==2.8
Requires-Dist: twine==6.2.0
Requires-Dist: typing_extensions==4.15.0
Requires-Dist: tzdata==2025.2
Requires-Dist: uritemplate==4.1.1
Requires-Dist: urllib3==2.4.0
Requires-Dist: watchdog==6.0.0
Requires-Dist: wcwidth==0.2.13
Requires-Dist: wheel==0.45.1
Dynamic: author
Dynamic: author-email
Dynamic: classifier
Dynamic: description
Dynamic: description-content-type
Dynamic: home-page
Dynamic: license
Dynamic: license-file
Dynamic: requires-dist
Dynamic: requires-python

# MuffinBite

MuffinBite is a **CLI-based email automation tool** built in Python. It allows you to send personalized emails in bulk, attach files seamlessly, and manage campaigns with ease. MuffinBite supports the **Gmail API** and any other SMTP service provider, making it flexible for different use cases.  

It’s ideal for small businesses, marketers, or anyone looking to send large-scale emails without hitting restrictive limits.

---

## Features
- Send bulk emails using the Gmail API  
- SMTP support for ESPs such as Brevo, Mailgun, Postmark, and others  
- Create, list, show, and delete campaigns with subject, template, attachments, CC/BCC, etc.  
- Send bulk HTML template emails with embedded images (base64 supported)  
- Personalize email content using CSV/Excel data sources  
- Insert variables into subject lines and email bodies for dynamic outreach  
- Attach unlimited files of any type  
- Add custom HTML signatures to all outgoing emails (with enable/disable toggle)  
- Set a custom time delay between sending emails to avoid spam filters  
- Test mode: send emails using test data files before running real campaigns  
- Real-time directory watching: automatically refreshes session data when files in Attachments or DataFiles change  
- Log successful and failed email attempts to CSV files  
- Detailed error logging to file when debug mode is enabled  
- Configure all settings (user, provider, debug, delay, signature, etc.) via CLI  
- Run shell commands directly from the MuffinBite CLI using `!<command>`
---

## Upcoming Features

- Fetch drafts directly from Gmail  
- Google Sheets integration for recipient data  
- Unit Tests support
---
## Available commands
    Available MuffinBite commands:

        build - Create the necessary directories and files for the working of the project

        camp - Maintains campaign
            Example:
                camp --create                   (creates new campaign)
                camp --show   'campaign_name'   (shows a specific campaign)
                camp --delete 'campaign_name'   (delete a specific campaign)
                camp --list                     (list all the campaigns)

        send - Sends emails 
            Example:
                send --test (sends emails from test data)
                send --real (sends emails from real data)

        config - Configure settings.
            Example:
                config --user-name name                             (resets user email)
                config --user-email firstname.lastname@example.com  (resets the user email)
                config --service-provider-name provider_name        (resets service provider name)
                config --service-provider-server server_address     (resets service provider server address)
                config --service-provider-login login               (resets service provider login ID)
                config --service-provider-port 000                  (resets service provider port number)
                config --signature <html>                           (add signature to all the outgoing mails)
                config --signature-on                               (turn signatures ON)
                config --signature-off                              (turn signatures OFF)
                config --time-delay 0.00                            (time gap between two emails)
                config --show                                       (shows the current configurations)
                config --debug True/False                           (switches debug mode for error logs)

        exit - Exit the MuffinBite

        reset - Deletes the config file

        help - Shows all the available commands and their uses
    Use !<command> for direct shell commands like `ls`, `clear`, `pwd`, etc.
---

---
## Folder Structure
```
repo_root/
├── muffinbite/
│   ├── commands/            # CLI commands
│   │   ├── __init__.py
│   │   ├── build.py
│   │   ├── campaign.py
│   │   ├── configure.py
│   │   ├── quit.py
│   │   ├── reset_config.py
│   │   └── send.py
│   │
│   ├── esp/                 # Email service providers integration
│   │   ├── __init__.py
│   │   ├── google_esp.py
│   │   └── smtp_esp.py
│   │
│   ├── management/          # Core management and CLI setup
│   │   ├── __init__.py
│   │   ├── cli.py
│   │   ├── session_watcher.py
│   │   └── settings.py
│   │
│   ├── sender/              # Email sending logic
│   │   ├── __init__.py
│   │   └── sender.py
│   │
│   └── utils/               # Helper functions and abstract classes
│       ├── __init__.py
│       ├── abstracts.py
│       ├── helpers.py
│       └── hybridcompleter.py
│
├── LICENSE
├── MANIFEST.in
├── README.md
├── requirements.txt
└── setup.py

```
---
## Setup Instructions

### 1. Clone the repository locally

```
git clone https://github.com/Shivansh-varshney/MuffinBite
```

### 2. Install the cloned project in your virtual environment
```
pip install /path/to/muffinbite/
```

### 3. Enter the MuffinBite CLI
```
(environment) shivansh@shivansh:~/Desktop/all_codes/tryMuffinBite$ bite
```
### 4. For the first time run 'build' or 'help'
```
bite> build
bite> help
```

> Put the credentials for Google Gmail Api in credentials.json file in the working directory.
> If you are using gmail api then first run will open a browser window for logging in and generate token.json for authentication.
