Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .github/workflows/generic_publish.yml
Original file line number Diff line number Diff line change
Expand Up @@ -24,9 +24,12 @@ jobs:
- name: 'Prepare tags'
id: prep
uses: docker/metadata-action@v6.0.0
env:
DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }}
with:
images: |
ghcr.io/${{ github.repository }}
${{ env.DOCKER_USERNAME != '' && 'webyhomelab/docker-mailserver-gui' || '' }}
tags: |
type=edge,branch=master
type=semver,pattern={{major}}
Expand Down
21 changes: 20 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,19 @@ flowchart LR

---

## 📸 Interface Preview

<p align="center">
<img src="docker-mailserver-gui-1.png" alt="Docker Mailserver GUI - Webmail Login Screen" width="48%">
<img src="docker-mailserver-gui-2.png" alt="Docker Mailserver GUI - Mailbox Inbox Interface" width="48%">
</p>
<p align="center">
<img src="docker-mailserver-gui-3.png" alt="Docker Mailserver GUI - Email Composition View" width="48%">
<img src="docker-mailserver-gui-4.png" alt="Docker Mailserver GUI - Settings and Account Configuration" width="48%">
Comment on lines +75 to +80
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

The README.md references four new image files (docker-mailserver-gui-1.png through docker-mailserver-gui-4.png) for the interface preview, but these files are not included in the pull request. This will result in broken images in the documentation. Please ensure the screenshot files are added to the repository.

</p>

---

## 🚀 Quick Start

Deploying your secure mail server takes less than 5 minutes.
Expand Down Expand Up @@ -113,10 +126,16 @@ docker exec -ti dms-core setup email add user@yourdomain.com <password>
- **Instant Inbound:** `Postgrey` (greylisting) is disabled by default to allow immediate email delivery without the standard 10-minute delay.
- **Docker 29+ Compatibility:** Explicitly configured Traefik with `DOCKER_API_VERSION=1.41` to support modern container engines.
- **No Hardcoded Passwords:** The Supervisor UNIX socket credentials have been removed to prevent local privilege escalation.
- **Automatic Sync:** SSL certificates are reloaded automatically by the dumper without stopping the mail server.
- **Automatic SSL Sync:** SSL certificates are monitored and reloaded automatically by the `dms-cert-dumper` sidecar using a highly robust `alpine:3.18`-based image equipped with `docker-cli`.
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

The description of the dms-cert-dumper sidecar as 'highly robust' and 'equipped with docker-cli' is inaccurate. The current implementation in docker-compose.yml (line 87) performs runtime installation of docker-cli and downloads a binary from GitHub without integrity checks, which is fragile and poses a security risk. Additionally, the sidecar requires mounting /var/run/docker.sock, which is a significant security concern that contradicts the 'Zero Trust' architecture mentioned in the project. It is recommended to use a custom Dockerfile to pre-install dependencies and to investigate more secure ways of reloading the mail server.

- **Persistent Webmail Config:** SnappyMail data is explicitly persisted to `./snappymail-data` on the host, preventing the loss of settings/accounts across restarts.
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

The persistence of SnappyMail data to ./snappymail-data may encounter permission issues. The setup-gui.sh script creates this directory (likely as root), but the webmail service in docker-compose.yml is configured to run with PUID=1000. This will result in 'Permission denied' errors when the container attempts to write to the volume. It is recommended to update the setup scripts to chown the created directories to the appropriate user.

- **Dual Registry Publishing:** Automatic package deployment publishes container images to both GitHub Container Registry (GHCR) and Docker Hub (`webyhomelab/docker-mailserver-gui`).
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

This line mentions 'Dual Registry Publishing' and the PR description states that workflows were updated, but no GitHub Action workflow files are included in this PR. Without these files, the automated publishing and the security scanning mentioned in SECURITY.md (lines 36-37) cannot be verified or executed. Please include the missing workflow configurations.


---

### ⚖️ Legal Disclaimer

*All product names, logos, brands, and trademarks referenced in this repository are the property of their respective owners. All company, product, and service names used in this project are for identification purposes only. Use of these names, logos, and brands does not imply endorsement.*

<br>
<p align="center">
Built in Ukraine under air raid sirens & blackouts ⚡<br>
Expand Down
6 changes: 3 additions & 3 deletions SECURITY.md
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,6 @@ We aim to acknowledge all reports within 48 hours and provide a fix or mitigatio

## Security Audit Status

- **Static Analysis:** The codebase is regularly scanned with `hadolint`, `shellcheck`, and `eclint`.
- **Dependency Scanning:** We use `OSV-Scanner` and GitHub dependabot to monitor for vulnerable packages.
- **Manual Audit:** The `supervisord.conf` and `setup.sh` scripts have been manually audited for credential leaks as of May 2026.
- **Static Analysis:** The codebase is regularly scanned with `hadolint`, `shellcheck`, and `eclint` to ensure shell scripts and Dockerfiles adhere to security guidelines.
- **Dependency Scanning:** We use `OSV-Scanner`, GitHub Dependabot, and vulnerability-scan actions to monitor for CVEs in base images and packages.
- **Manual Audit:** The `supervisord.conf` process manager and `setup-gui.sh` configuration scripts have been manually audited for privilege escalation paths and credential leaks as of the `v0.9.6` release in May 2026.
Binary file added docker-mailserver-gui-1.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docker-mailserver-gui-2.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docker-mailserver-gui-3.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docker-mailserver-gui-4.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.