I built Zmail System myself: aggregating Gmail/QQ/Outlook into a single web page on Serv00

Previously, I made a help post in this thread (“Are there any good open-source unified email inboxes?”) looking for a lightweight solution that could run on Serv00 and aggregate multiple email accounts. Are there any good open-source unified email inboxes? - Technology & Creation / Open Source - NodeLoc

After looking around:

  • Roundcube is too heavy and troublesome to configure
  • Some open-source projects require Docker / a VPS
  • There are pure-PHP options, but most only support one email account, or require plugins for multiple accounts
  • Serv00’s free hosting is also unsuitable for running persistent processes

In the end, I had no choice but to write one myself.


:open_mailbox_with_raised_flag: Zmail System

In one sentence: A multi-email aggregation system deployed on shared hosting that puts Gmail, QQ, Outlook, and 163 into a single web interface.

No Docker or VPS is required—any shared host supporting PHP + IMAP will work.

:sparkles: Features

  • :open_mailbox_with_raised_flag: Multi-email aggregation — Gmail / QQ / Outlook / 163 / 126 / custom IMAP
  • :magnifying_glass_tilted_left: Local filtering — Emails containing keywords such as “unsubscribe” and “opt out” are filtered locally only; cloud emails are left completely untouched
  • :paperclip: Attachment downloads — Automatically downloads attachments, with one-click downloads from the web interface
  • :shuffle_tracks_button: Email forwarding — Automatically forwards emails containing keywords to Telegram / Server酱 / Webhook
  • :star: Labels — Starred / important / unread, switch between them anytime
  • :crescent_moon: Dark mode — Switch with one click
  • :mobile_phone: Mobile support — Drawer-style layout, with the list and details displayed in split view
  • :alarm_clock: Automatic email fetching — Scheduled fetching via Cron, with a minimum interval of 1 minute
  • :broom: Scheduled cleanup — Automatically deletes expired emails and attachments

:camera_with_flash: Screenshots

(Insert a screenshot of the dark-mode inbox here)

:rocket: Three-step deployment

1. Upload the code

Upload the project folder to public_html/mail/.

2. Open the installation wizard

https://your-domain/mail/install.php

Complete the five steps: environment check → create database → create administrator → add email account → finish.

3. Configure Cron

* * * * * /usr/local/bin/php /home/username/public_html/mail/fetch_mail.php

It runs very reliably on Serv00 in my testing, with very low CPU / memory usage.

:postbox: Requirements

  • PHP 7.4+ (8.0+ recommended)
  • Extensions: imap, pdo_sqlite, mbstring, curl, session
  • Works with Serv00 / Baota / cPanel

:file_folder: Project

GitHub - zybnb/Zmail-system: Lightweight multi-email aggregation system supporting Gmail/QQ/Outlook/163 and other IMAP mailboxes, local filtering, attachment downloads, and automatic forwarding · GitHub

MIT licensed—modify it and use it however you like.


Some design trade-offs

I intentionally made several decisions while writing it, so here’s an explanation:

1. Why SQLite instead of MySQL?

Applying for a database is troublesome for shared-hosting users. SQLite handles everything in a single file, without needing to create a database or users. It’s more than sufficient on Serv00.

2. Why Cron instead of a persistent connection?

Serv00’s free hosting does not allow persistent processes, so a persistent imap_open + IMAP IDLE connection won’t work. Polling every minute with Cron is the only viable solution, with a delay of ≤1 minute.

3. Why “local filtering” instead of cloud deletion?

Some aggregation tools delete emails containing “unsubscribe” directly from the cloud. But if there’s a false positive, you’ll lose that email permanently. My approach is to filter locally only while keeping the cloud copy unchanged—when you check Gmail/QQ in a browser, the email is still there.

4. Why not make it a Docker image?

The target users are shared-hosting users. Docker would only raise the barrier to entry.


Welcome to try it and share feedback

If you encounter problems deploying it on Serv00 or another shared host, feel free to reply here or open an issue. PRs are welcome.

If this project helps you, give it a :star: to show your support :slight_smile:




5 Likes

Not bad—study seriously.

2 Likes

Impressive!

2 Likes

Thanks for sharing, legend!

2 Likes

Thanks for sharing

2 Likes

Thanks for sharing

2 Likes

Impressive!

2 Likes

Thanks for sharing

2 Likes

Impressive!

2 Likes

Thanks for sharing, but the project is returning a 404.

2 Likes

Send a screenshot so I can take a look.

2 Likes

I got tired of using the web to send and receive email, so I use an email client. It can handle dozens of accounts.

2 Likes

You’re amazing, boss!

This is pretty good—definitely worth having!!!

2 Likes

That’s way too fast.

1 Like

Not logged in means a 404.

2 Likes

Sorry, I sent the wrong link :sweat_smile:

2 Likes

It should work now.

3 Likes