From 7ac2a1c3d6cb91eaf7b201982f22a919d3983286 Mon Sep 17 00:00:00 2001 From: Stephen Chin Date: Wed, 25 Feb 2026 23:12:05 -0800 Subject: [PATCH 01/44] feat: add Proton Mail Bridge --- ct/protonmail-bridge.sh | 81 +++++++ frontend/public/json/protonmail-bridge.json | 48 ++++ install/protonmail-bridge-install.sh | 239 ++++++++++++++++++++ 3 files changed, 368 insertions(+) create mode 100644 ct/protonmail-bridge.sh create mode 100644 frontend/public/json/protonmail-bridge.json create mode 100644 install/protonmail-bridge-install.sh diff --git a/ct/protonmail-bridge.sh b/ct/protonmail-bridge.sh new file mode 100644 index 000000000..a47ea3f82 --- /dev/null +++ b/ct/protonmail-bridge.sh @@ -0,0 +1,81 @@ +#!/usr/bin/env bash +COMMUNITY_SCRIPTS_URL="${COMMUNITY_SCRIPTS_URL:-https://git.community-scripts.org/community-scripts/ProxmoxVED/raw/branch/main}" +source <(curl -fsSL "$COMMUNITY_SCRIPTS_URL/misc/build.func") +# Copyright (c) 2021-2026 community-scripts ORG +# Author: Stephen Chin +# License: MIT | https://github.com/community-scripts/ProxmoxVED/raw/main/LICENSE +# Source: https://github.com/ProtonMail/proton-bridge +# Description: Debian LXC that runs Proton Mail Bridge headless and exposes IMAP/SMTP to the LAN via systemd-socket-proxyd. + +APP="ProtonMail-Bridge" +var_tags="${var_tags:-mail;proton}" +var_cpu="${var_cpu:-2}" +var_ram="${var_ram:-768}" +var_disk="${var_disk:-8}" +var_os="${var_os:-debian}" +var_version="${var_version:-13}" +var_unprivileged="${var_unprivileged:-1}" + +header_info "$APP" +variables +color +catch_errors + +function update_script() { + header_info + check_container_storage + check_container_resources + + if [[ ! -x /usr/bin/protonmail-bridge ]]; then + msg_error "No ${APP} Installation Found!" + exit + fi + + if ! check_for_gh_release "protonmail-bridge" "ProtonMail/proton-bridge"; then + msg_ok "No update available." + exit + fi + + + msg_info "Stopping Services" + systemctl stop protonmail-bridge-imap.socket protonmail-bridge-smtp.socket 2>/dev/null || true + systemctl stop protonmail-bridge-imap-proxy.service protonmail-bridge-smtp-proxy.service protonmail-bridge.service 2>/dev/null || true + msg_ok "Stopped Services" + + msg_info "Updating ${APP}" + fetch_and_deploy_gh_release "protonmail-bridge" "ProtonMail/proton-bridge" "binary" "latest" "/tmp" + msg_ok "Updated ${APP}" + + systemctl daemon-reload + + if [[ -f /home/protonbridge/.protonmailbridge-initialized ]]; then + msg_info "Starting Services" + systemctl enable -q --now protonmail-bridge.service + systemctl enable -q --now protonmail-bridge-imap.socket protonmail-bridge-smtp.socket + systemctl start protonmail-bridge-imap-proxy.service protonmail-bridge-smtp-proxy.service + msg_ok "Started Services" + else + msg_ok "Initialization not completed. Services remain disabled." + fi + + msg_ok "Updated successfully!" + exit +} + +start +build_container +description + +msg_ok "Completed successfully!" +echo -e "${CREATING}${GN}${APP} has been successfully installed!${CL}" +echo -e "${INFO}${YW}One-time initialization is required before Bridge services are enabled.${CL}" +echo -e "${INFO}${YW}Initialize the account inside the container:${CL}" +echo -e "${TAB}${YW}protonmailbridge-init${CL}" +echo -e "${INFO}${YW}After initial configuration, use this to access the Bridge CLI:${CL}" +echo -e "${TAB}${YW}protonmailbridge-configure${CL}" +echo -e "${INFO}${YW}LAN-accessible forwarded ports (container IP ${IP}):${CL}" +echo -e "${TAB}${GATEWAY}${BGN}IMAP ${IP}:143${CL}" +echo -e "${TAB}${GATEWAY}${BGN}SMTP ${IP}:587${CL}" +echo -e "${INFO}${YW}Forwarding targets inside the container (Bridge defaults):${CL}" +echo -e "${TAB}${YW}IMAP 127.0.0.1:1143${CL}" +echo -e "${TAB}${YW}SMTP 127.0.0.1:1025${CL}" diff --git a/frontend/public/json/protonmail-bridge.json b/frontend/public/json/protonmail-bridge.json new file mode 100644 index 000000000..8cc3318c0 --- /dev/null +++ b/frontend/public/json/protonmail-bridge.json @@ -0,0 +1,48 @@ +{ + "name": "Proton Mail Bridge", + "slug": "protonmail-bridge", + "categories": [ + 18 + ], + "date_created": "2026-02-22", + "type": "ct", + "updateable": true, + "privileged": false, + "interface_port": null, + "documentation": "https://proton.me/support/bridge-cli-guide", + "website": "https://proton.me/mail/bridge", + "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/proton-mail.webp", + "config_path": "", + "description": "Proton Mail Bridge runs a local IMAP/SMTP service that lets traditional mail clients access a Proton mailbox. This LXC runs Bridge headless and forwards IMAP/SMTP to the LAN using systemd socket activation (systemd-socket-proxyd).", + "install_methods": [ + { + "type": "default", + "script": "ct/protonmail-bridge.sh", + "resources": { + "cpu": 2, + "ram": 768, + "hdd": 8, + "os": "debian", + "version": "13" + } + } + ], + "default_credentials": { + "username": null, + "password": null + }, + "notes": [ + { + "text": "After install, run protonmailbridge-init inside the container to create a pass keychain and log in via the Bridge CLI.", + "type": "info" + }, + { + "text": "LAN forwarding (container IP): IMAP 143 -> 127.0.0.1:1143, SMTP 587 -> 127.0.0.1:1025.", + "type": "info" + }, + { + "text": "Use protonmailbridge-configure to temporarily stop the service and enter the Bridge CLI without running a second instance.", + "type": "info" + } + ] +} diff --git a/install/protonmail-bridge-install.sh b/install/protonmail-bridge-install.sh new file mode 100644 index 000000000..01d94b3a8 --- /dev/null +++ b/install/protonmail-bridge-install.sh @@ -0,0 +1,239 @@ +#!/usr/bin/env bash + +# Copyright (c) 2021-2026 community-scripts ORG +# Author: Stephen Chin +# License: MIT | https://github.com/community-scripts/ProxmoxVED/raw/main/LICENSE +# Source: https://github.com/ProtonMail/proton-bridge +# Description: Installs Proton Mail Bridge, creates systemd services, and exposes IMAP/SMTP via systemd-socket-proxyd. + +source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" +color +verb_ip6 +catch_errors +setting_up_container +network_check +update_os + +# ============================================================================= +# DEPENDENCIES (app-specific only) +# ============================================================================= +msg_info "Installing Dependencies" +$STD apt install -y \ + pass +msg_ok "Installed Dependencies" + +# ============================================================================= +# SERVICE USER +# ============================================================================= +msg_info "Creating Service User" +if ! id -u protonbridge >/dev/null 2>&1; then + useradd -r -m -d /home/protonbridge -s /usr/sbin/nologin protonbridge +fi +install -d -m 0750 -o protonbridge -g protonbridge /home/protonbridge +msg_ok "Created Service User" + +# ============================================================================= +# INSTALL PROTON MAIL BRIDGE (.deb from GitHub Releases) +# ============================================================================= +msg_info "Installing Proton Mail Bridge" +fetch_and_deploy_gh_release "protonmail-bridge" "ProtonMail/proton-bridge" "binary" "latest" "/tmp" +msg_ok "Installed Proton Mail Bridge" + +# ============================================================================= +# SYSTEMD UNITS +# ============================================================================= +msg_info "Creating Services" + +cat > /etc/systemd/system/protonmail-bridge.service <<'EOF' +[Unit] +Description=Proton Mail Bridge (noninteractive) +After=network-online.target +Wants=network-online.target + +ConditionPathExists=/home/protonbridge/.protonmailbridge-initialized + +[Service] +Type=simple +User=protonbridge +Group=protonbridge +WorkingDirectory=/home/protonbridge +Environment=HOME=/home/protonbridge + +ExecStart=/usr/bin/protonmail-bridge --noninteractive + +Restart=always +RestartSec=3 + +NoNewPrivileges=yes +PrivateTmp=yes +ProtectSystem=full +ProtectKernelTunables=yes +ProtectKernelModules=yes +ProtectControlGroups=yes + +[Install] +WantedBy=multi-user.target +EOF + +# IMAP socket (LAN 143) +cat > /etc/systemd/system/protonmail-bridge-imap.socket <<'EOF' +[Unit] +Description=Proton Mail Bridge IMAP Socket (143) +ConditionPathExists=/home/protonbridge/.protonmailbridge-initialized + +[Socket] +ListenStream=143 +Accept=no + +[Install] +WantedBy=sockets.target +EOF + +# IMAP proxy service (143 -> 127.0.0.1:1143) +cat > /etc/systemd/system/protonmail-bridge-imap-proxy.service <<'EOF' +[Unit] +Description=Proton Mail Bridge IMAP Proxy (143 -> 127.0.0.1:1143) +After=protonmail-bridge.service +Requires=protonmail-bridge.service +ConditionPathExists=/home/protonbridge/.protonmailbridge-initialized + +[Service] +Type=simple +ExecStart=/usr/lib/systemd/systemd-socket-proxyd 127.0.0.1:1143 +EOF + +# SMTP socket (LAN 587) +cat > /etc/systemd/system/protonmail-bridge-smtp.socket <<'EOF' +[Unit] +Description=Proton Mail Bridge SMTP Socket (587) +ConditionPathExists=/home/protonbridge/.protonmailbridge-initialized + +[Socket] +ListenStream=587 +Accept=no + +[Install] +WantedBy=sockets.target +EOF + +# SMTP proxy service (587 -> 127.0.0.1:1025) +cat > /etc/systemd/system/protonmail-bridge-smtp-proxy.service <<'EOF' +[Unit] +Description=Proton Mail Bridge SMTP Proxy (587 -> 127.0.0.1:1025) +After=protonmail-bridge.service +Requires=protonmail-bridge.service +ConditionPathExists=/home/protonbridge/.protonmailbridge-initialized + +[Service] +Type=simple +ExecStart=/usr/lib/systemd/systemd-socket-proxyd 127.0.0.1:1025 +EOF + +systemctl daemon-reload +msg_ok "Created Services" + +# ============================================================================= +# INIT + CONFIGURE HELPERS +# ============================================================================= +msg_info "Creating Helper Commands" + +cat > /usr/local/bin/protonmailbridge-init <<'EOF' +#!/usr/bin/env bash +set -euo pipefail + +BRIDGE_USER="protonbridge" +BRIDGE_HOME="/home/${BRIDGE_USER}" +MARKER="${BRIDGE_HOME}/.protonmailbridge-initialized" + +if [[ -f "$MARKER" ]]; then + echo "Already initialized." + echo "To start services:" + echo " systemctl enable --now protonmail-bridge.service" + echo " systemctl enable --now protonmail-bridge-imap.socket protonmail-bridge-smtp.socket" + exit 0 +fi + +# Stop sockets/proxies/bridge daemon if they were manually started +systemctl stop protonmail-bridge-imap.socket protonmail-bridge-smtp.socket 2>/dev/null || true +systemctl stop protonmail-bridge-imap-proxy.service protonmail-bridge-smtp-proxy.service protonmail-bridge.service 2>/dev/null || true + +echo "Initializing pass keychain for ${BRIDGE_USER} (required by Proton Mail Bridge on Linux)." + +install -d -m 0700 -o "${BRIDGE_USER}" -g "${BRIDGE_USER}" "${BRIDGE_HOME}/.gnupg" + +FPR="$(runuser -u "${BRIDGE_USER}" -- env HOME="${BRIDGE_HOME}" GNUPGHOME="${BRIDGE_HOME}/.gnupg" \ + gpg --list-secret-keys --with-colons 2>/dev/null | awk -F: '$1=="fpr"{print $10; exit}')" + +if [[ -z "${FPR}" ]]; then + runuser -u "${BRIDGE_USER}" -- env HOME="${BRIDGE_HOME}" GNUPGHOME="${BRIDGE_HOME}/.gnupg" \ + gpg --batch --pinentry-mode loopback --passphrase '' \ + --quick-gen-key 'ProtonMail Bridge' default default never + + FPR="$(runuser -u "${BRIDGE_USER}" -- env HOME="${BRIDGE_HOME}" GNUPGHOME="${BRIDGE_HOME}/.gnupg" \ + gpg --list-secret-keys --with-colons 2>/dev/null | awk -F: '$1=="fpr"{print $10; exit}')" +fi + +if [[ -z "${FPR}" ]]; then + echo "Failed to detect a GPG key fingerprint for ${BRIDGE_USER}." >&2 + exit 1 +fi + +runuser -u "${BRIDGE_USER}" -- env HOME="${BRIDGE_HOME}" GNUPGHOME="${BRIDGE_HOME}/.gnupg" \ + pass init "${FPR}" + +echo +echo "Starting Proton Mail Bridge CLI for one-time login." +echo "Run: login" +echo "Run: info" +echo "Run: exit" +echo + +runuser -u "${BRIDGE_USER}" -- env HOME="${BRIDGE_HOME}" \ + protonmail-bridge -c + +touch "${MARKER}" +chown "${BRIDGE_USER}:${BRIDGE_USER}" "${MARKER}" +chmod 0644 "${MARKER}" + +systemctl daemon-reload +systemctl enable -q --now protonmail-bridge.service +systemctl enable -q --now protonmail-bridge-imap.socket protonmail-bridge-smtp.socket + +echo "Initialization complete. Services enabled and started." +EOF +chmod +x /usr/local/bin/protonmailbridge-init +ln -sf /usr/local/bin/protonmailbridge-init /usr/bin/protonmailbridge-init + +cat > /usr/local/bin/protonmailbridge-configure <<'EOF' +#!/usr/bin/env bash +set -euo pipefail + +BRIDGE_USER="protonbridge" +BRIDGE_HOME="/home/${BRIDGE_USER}" +MARKER="${BRIDGE_HOME}/.protonmailbridge-initialized" + +if [[ ! -f "${MARKER}" ]]; then + echo "Not initialized yet. Run:" + echo " protonmailbridge-init" + exit 1 +fi + +systemctl stop protonmail-bridge-imap.socket protonmail-bridge-smtp.socket 2>/dev/null || true +systemctl stop protonmail-bridge-imap-proxy.service protonmail-bridge-smtp-proxy.service protonmail-bridge.service 2>/dev/null || true + +runuser -u "${BRIDGE_USER}" -- env HOME="${BRIDGE_HOME}" \ + protonmail-bridge -c + +systemctl daemon-reload +systemctl enable -q --now protonmail-bridge.service +systemctl enable -q --now protonmail-bridge-imap.socket protonmail-bridge-smtp.socket +EOF +chmod +x /usr/local/bin/protonmailbridge-configure +ln -sf /usr/local/bin/protonmailbridge-configure /usr/bin/protonmailbridge-configure + +msg_ok "Created Helper Commands" + +motd_ssh +customize +cleanup_lxc + From fb3186640c7b69bfac64a8e8af0e343177e93999 Mon Sep 17 00:00:00 2001 From: Stephen Chin Date: Sat, 7 Mar 2026 14:34:07 -0800 Subject: [PATCH 02/44] Update ct/protonmail-bridge.sh Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com> --- ct/protonmail-bridge.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ct/protonmail-bridge.sh b/ct/protonmail-bridge.sh index a47ea3f82..6d47e61d6 100644 --- a/ct/protonmail-bridge.sh +++ b/ct/protonmail-bridge.sh @@ -42,9 +42,9 @@ function update_script() { systemctl stop protonmail-bridge-imap-proxy.service protonmail-bridge-smtp-proxy.service protonmail-bridge.service 2>/dev/null || true msg_ok "Stopped Services" - msg_info "Updating ${APP}" + msg_info "Updating Proton Mail Bridge" fetch_and_deploy_gh_release "protonmail-bridge" "ProtonMail/proton-bridge" "binary" "latest" "/tmp" - msg_ok "Updated ${APP}" + msg_ok "Updated Proton Mail Bridge" systemctl daemon-reload From 575c54283300ea56e679b70a2402c085bf2ad5dc Mon Sep 17 00:00:00 2001 From: Stephen Chin Date: Sat, 7 Mar 2026 14:34:54 -0800 Subject: [PATCH 03/44] Update ct/protonmail-bridge.sh Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com> --- ct/protonmail-bridge.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ct/protonmail-bridge.sh b/ct/protonmail-bridge.sh index 6d47e61d6..eee173e87 100644 --- a/ct/protonmail-bridge.sh +++ b/ct/protonmail-bridge.sh @@ -66,8 +66,8 @@ start build_container description -msg_ok "Completed successfully!" -echo -e "${CREATING}${GN}${APP} has been successfully installed!${CL}" +msg_ok "Completed successfully!\n" +echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}" echo -e "${INFO}${YW}One-time initialization is required before Bridge services are enabled.${CL}" echo -e "${INFO}${YW}Initialize the account inside the container:${CL}" echo -e "${TAB}${YW}protonmailbridge-init${CL}" From a3a0f6df56c1c77de819c4329bafc68edc79f957 Mon Sep 17 00:00:00 2001 From: Stephen Chin Date: Sat, 7 Mar 2026 14:35:03 -0800 Subject: [PATCH 04/44] Update install/protonmail-bridge-install.sh Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com> --- install/protonmail-bridge-install.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install/protonmail-bridge-install.sh b/install/protonmail-bridge-install.sh index 01d94b3a8..847660789 100644 --- a/install/protonmail-bridge-install.sh +++ b/install/protonmail-bridge-install.sh @@ -44,7 +44,7 @@ msg_ok "Installed Proton Mail Bridge" # ============================================================================= msg_info "Creating Services" -cat > /etc/systemd/system/protonmail-bridge.service <<'EOF' +cat <<'EOF'> /etc/systemd/system/protonmail-bridge.service [Unit] Description=Proton Mail Bridge (noninteractive) After=network-online.target From 41792306a275945b3bf0cd4d0f7db37112b6db56 Mon Sep 17 00:00:00 2001 From: Stephen Chin Date: Sat, 7 Mar 2026 14:35:33 -0800 Subject: [PATCH 05/44] Update install/protonmail-bridge-install.sh Co-authored-by: Tobias <96661824+CrazyWolf13@users.noreply.github.com> --- install/protonmail-bridge-install.sh | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/install/protonmail-bridge-install.sh b/install/protonmail-bridge-install.sh index 847660789..b3d7eb42e 100644 --- a/install/protonmail-bridge-install.sh +++ b/install/protonmail-bridge-install.sh @@ -18,8 +18,7 @@ update_os # DEPENDENCIES (app-specific only) # ============================================================================= msg_info "Installing Dependencies" -$STD apt install -y \ - pass +$STD apt install -y pass msg_ok "Installed Dependencies" # ============================================================================= From 2ce43a7e0fb0bcd0f6935e1606831175eca85734 Mon Sep 17 00:00:00 2001 From: Stephen Chin Date: Sat, 7 Mar 2026 14:35:58 -0800 Subject: [PATCH 06/44] Update install/protonmail-bridge-install.sh Co-authored-by: Tobias <96661824+CrazyWolf13@users.noreply.github.com> --- install/protonmail-bridge-install.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install/protonmail-bridge-install.sh b/install/protonmail-bridge-install.sh index b3d7eb42e..8b3bb4e26 100644 --- a/install/protonmail-bridge-install.sh +++ b/install/protonmail-bridge-install.sh @@ -89,7 +89,7 @@ WantedBy=sockets.target EOF # IMAP proxy service (143 -> 127.0.0.1:1143) -cat > /etc/systemd/system/protonmail-bridge-imap-proxy.service <<'EOF' +cat </etc/systemd/system/protonmail-bridge-imap-proxy.service [Unit] Description=Proton Mail Bridge IMAP Proxy (143 -> 127.0.0.1:1143) After=protonmail-bridge.service From f1300e25d718e5f8f3c4783b117bef130d71de3e Mon Sep 17 00:00:00 2001 From: Stephen Chin Date: Sat, 7 Mar 2026 14:36:33 -0800 Subject: [PATCH 07/44] Update ct/protonmail-bridge.sh Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com> --- ct/protonmail-bridge.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ct/protonmail-bridge.sh b/ct/protonmail-bridge.sh index eee173e87..54cb2d095 100644 --- a/ct/protonmail-bridge.sh +++ b/ct/protonmail-bridge.sh @@ -38,8 +38,8 @@ function update_script() { msg_info "Stopping Services" - systemctl stop protonmail-bridge-imap.socket protonmail-bridge-smtp.socket 2>/dev/null || true - systemctl stop protonmail-bridge-imap-proxy.service protonmail-bridge-smtp-proxy.service protonmail-bridge.service 2>/dev/null || true + systemctl stop protonmail-bridge-imap.socket protonmail-bridge-smtp.socket 2>/dev/null + systemctl stop protonmail-bridge-imap-proxy.service protonmail-bridge-smtp-proxy.service protonmail-bridge.service 2>/dev/null msg_ok "Stopped Services" msg_info "Updating Proton Mail Bridge" From c5d10eaaafde945f351052a98c544b06ea61d688 Mon Sep 17 00:00:00 2001 From: Stephen Chin Date: Sat, 7 Mar 2026 14:39:53 -0800 Subject: [PATCH 08/44] Removed section headers --- install/protonmail-bridge-install.sh | 15 --------------- 1 file changed, 15 deletions(-) diff --git a/install/protonmail-bridge-install.sh b/install/protonmail-bridge-install.sh index 8b3bb4e26..67c737303 100644 --- a/install/protonmail-bridge-install.sh +++ b/install/protonmail-bridge-install.sh @@ -14,16 +14,10 @@ setting_up_container network_check update_os -# ============================================================================= -# DEPENDENCIES (app-specific only) -# ============================================================================= msg_info "Installing Dependencies" $STD apt install -y pass msg_ok "Installed Dependencies" -# ============================================================================= -# SERVICE USER -# ============================================================================= msg_info "Creating Service User" if ! id -u protonbridge >/dev/null 2>&1; then useradd -r -m -d /home/protonbridge -s /usr/sbin/nologin protonbridge @@ -31,16 +25,10 @@ fi install -d -m 0750 -o protonbridge -g protonbridge /home/protonbridge msg_ok "Created Service User" -# ============================================================================= -# INSTALL PROTON MAIL BRIDGE (.deb from GitHub Releases) -# ============================================================================= msg_info "Installing Proton Mail Bridge" fetch_and_deploy_gh_release "protonmail-bridge" "ProtonMail/proton-bridge" "binary" "latest" "/tmp" msg_ok "Installed Proton Mail Bridge" -# ============================================================================= -# SYSTEMD UNITS -# ============================================================================= msg_info "Creating Services" cat <<'EOF'> /etc/systemd/system/protonmail-bridge.service @@ -131,9 +119,6 @@ EOF systemctl daemon-reload msg_ok "Created Services" -# ============================================================================= -# INIT + CONFIGURE HELPERS -# ============================================================================= msg_info "Creating Helper Commands" cat > /usr/local/bin/protonmailbridge-init <<'EOF' From c71157316b37c0f99b44dc4260ca8eb492f618f3 Mon Sep 17 00:00:00 2001 From: Stephen Chin Date: Sat, 7 Mar 2026 14:42:47 -0800 Subject: [PATCH 09/44] Changed fetch location --- install/protonmail-bridge-install.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install/protonmail-bridge-install.sh b/install/protonmail-bridge-install.sh index 67c737303..03f93a023 100644 --- a/install/protonmail-bridge-install.sh +++ b/install/protonmail-bridge-install.sh @@ -26,7 +26,7 @@ install -d -m 0750 -o protonbridge -g protonbridge /home/protonbridge msg_ok "Created Service User" msg_info "Installing Proton Mail Bridge" -fetch_and_deploy_gh_release "protonmail-bridge" "ProtonMail/proton-bridge" "binary" "latest" "/tmp" +fetch_and_deploy_gh_release "protonmail-bridge" "ProtonMail/proton-bridge" "binary" "latest" "/opt/protonmail-bridge" msg_ok "Installed Proton Mail Bridge" msg_info "Creating Services" From 8293bcaa025ad526d635edf4d43bcdec3552e6a0 Mon Sep 17 00:00:00 2001 From: Stephen Chin Date: Sat, 7 Mar 2026 14:43:40 -0800 Subject: [PATCH 10/44] Update protonmail-bridge-install.sh Comments removed --- install/protonmail-bridge-install.sh | 2 -- 1 file changed, 2 deletions(-) diff --git a/install/protonmail-bridge-install.sh b/install/protonmail-bridge-install.sh index 03f93a023..03447c682 100644 --- a/install/protonmail-bridge-install.sh +++ b/install/protonmail-bridge-install.sh @@ -62,7 +62,6 @@ ProtectControlGroups=yes WantedBy=multi-user.target EOF -# IMAP socket (LAN 143) cat > /etc/systemd/system/protonmail-bridge-imap.socket <<'EOF' [Unit] Description=Proton Mail Bridge IMAP Socket (143) @@ -76,7 +75,6 @@ Accept=no WantedBy=sockets.target EOF -# IMAP proxy service (143 -> 127.0.0.1:1143) cat </etc/systemd/system/protonmail-bridge-imap-proxy.service [Unit] Description=Proton Mail Bridge IMAP Proxy (143 -> 127.0.0.1:1143) From 8bb917572cffa730e0e7b8db998440eea626403e Mon Sep 17 00:00:00 2001 From: Stephen Chin Date: Sat, 7 Mar 2026 21:39:01 -0800 Subject: [PATCH 11/44] Update protonmail-bridge.sh --- ct/protonmail-bridge.sh | 52 ++++++++++++++++++----------------------- 1 file changed, 23 insertions(+), 29 deletions(-) diff --git a/ct/protonmail-bridge.sh b/ct/protonmail-bridge.sh index 54cb2d095..9de1a8b8e 100644 --- a/ct/protonmail-bridge.sh +++ b/ct/protonmail-bridge.sh @@ -27,38 +27,32 @@ function update_script() { check_container_resources if [[ ! -x /usr/bin/protonmail-bridge ]]; then - msg_error "No ${APP} Installation Found!" + msg_error "No Proton Mail Bridge Installation Found!" exit fi - if ! check_for_gh_release "protonmail-bridge" "ProtonMail/proton-bridge"; then - msg_ok "No update available." - exit + if check_for_gh_release "protonmail-bridge" "ProtonMail/proton-bridge"; then + msg_info "Stopping Services" + systemctl stop protonmail-bridge-imap.socket protonmail-bridge-smtp.socket + systemctl stop protonmail-bridge-imap-proxy.service protonmail-bridge-smtp-proxy.service protonmail-bridge.service + msg_ok "Stopped Services" + + msg_info "Updating Proton Mail Bridge" + fetch_and_deploy_gh_release "protonmail-bridge" "ProtonMail/proton-bridge" "binary" + msg_ok "Updated Proton Mail Bridge" + + if [[ -f /home/protonbridge/.protonmailbridge-initialized ]]; then + msg_info "Starting Services" + systemctl start protonmail-bridge.service + systemctl start protonmail-bridge-imap.socket protonmail-bridge-smtp.socket + systemctl start protonmail-bridge-imap-proxy.service protonmail-bridge-smtp-proxy.service + msg_ok "Started Services" + else + msg_ok "Initialization not completed. Services remain disabled." + fi + + msg_ok "Updated successfully!" fi - - - msg_info "Stopping Services" - systemctl stop protonmail-bridge-imap.socket protonmail-bridge-smtp.socket 2>/dev/null - systemctl stop protonmail-bridge-imap-proxy.service protonmail-bridge-smtp-proxy.service protonmail-bridge.service 2>/dev/null - msg_ok "Stopped Services" - - msg_info "Updating Proton Mail Bridge" - fetch_and_deploy_gh_release "protonmail-bridge" "ProtonMail/proton-bridge" "binary" "latest" "/tmp" - msg_ok "Updated Proton Mail Bridge" - - systemctl daemon-reload - - if [[ -f /home/protonbridge/.protonmailbridge-initialized ]]; then - msg_info "Starting Services" - systemctl enable -q --now protonmail-bridge.service - systemctl enable -q --now protonmail-bridge-imap.socket protonmail-bridge-smtp.socket - systemctl start protonmail-bridge-imap-proxy.service protonmail-bridge-smtp-proxy.service - msg_ok "Started Services" - else - msg_ok "Initialization not completed. Services remain disabled." - fi - - msg_ok "Updated successfully!" exit } @@ -67,7 +61,7 @@ build_container description msg_ok "Completed successfully!\n" -echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}" +echo -e "${CREATING}${GN}Proton Mail Bridge setup has been successfully initialized!${CL}" echo -e "${INFO}${YW}One-time initialization is required before Bridge services are enabled.${CL}" echo -e "${INFO}${YW}Initialize the account inside the container:${CL}" echo -e "${TAB}${YW}protonmailbridge-init${CL}" From 6e26f7d4c8acd66638469b948362cd442588f433 Mon Sep 17 00:00:00 2001 From: Stephen Chin Date: Sat, 7 Mar 2026 21:40:28 -0800 Subject: [PATCH 12/44] Update protonmail-bridge-install.sh --- install/protonmail-bridge-install.sh | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/install/protonmail-bridge-install.sh b/install/protonmail-bridge-install.sh index 03447c682..94a152aaa 100644 --- a/install/protonmail-bridge-install.sh +++ b/install/protonmail-bridge-install.sh @@ -26,7 +26,7 @@ install -d -m 0750 -o protonbridge -g protonbridge /home/protonbridge msg_ok "Created Service User" msg_info "Installing Proton Mail Bridge" -fetch_and_deploy_gh_release "protonmail-bridge" "ProtonMail/proton-bridge" "binary" "latest" "/opt/protonmail-bridge" +fetch_and_deploy_gh_release "protonmail-bridge" "ProtonMail/proton-bridge" "binary" msg_ok "Installed Proton Mail Bridge" msg_info "Creating Services" @@ -62,6 +62,7 @@ ProtectControlGroups=yes WantedBy=multi-user.target EOF +# IMAP socket (LAN 143) cat > /etc/systemd/system/protonmail-bridge-imap.socket <<'EOF' [Unit] Description=Proton Mail Bridge IMAP Socket (143) @@ -70,12 +71,14 @@ ConditionPathExists=/home/protonbridge/.protonmailbridge-initialized [Socket] ListenStream=143 Accept=no +Service=protonmail-bridge-imap-proxy.service [Install] WantedBy=sockets.target EOF -cat </etc/systemd/system/protonmail-bridge-imap-proxy.service +# IMAP proxy service (143 -> 127.0.0.1:1143) +cat <<'EOF'>/etc/systemd/system/protonmail-bridge-imap-proxy.service [Unit] Description=Proton Mail Bridge IMAP Proxy (143 -> 127.0.0.1:1143) After=protonmail-bridge.service @@ -84,7 +87,10 @@ ConditionPathExists=/home/protonbridge/.protonmailbridge-initialized [Service] Type=simple +Sockets=protonmail-bridge-imap.socket ExecStart=/usr/lib/systemd/systemd-socket-proxyd 127.0.0.1:1143 +NoNewPrivileges=yes +PrivateTmp=yes EOF # SMTP socket (LAN 587) @@ -96,13 +102,14 @@ ConditionPathExists=/home/protonbridge/.protonmailbridge-initialized [Socket] ListenStream=587 Accept=no +Service=protonmail-bridge-smtp-proxy.service [Install] WantedBy=sockets.target EOF # SMTP proxy service (587 -> 127.0.0.1:1025) -cat > /etc/systemd/system/protonmail-bridge-smtp-proxy.service <<'EOF' +cat <<'EOF'>/etc/systemd/system/protonmail-bridge-smtp-proxy.service [Unit] Description=Proton Mail Bridge SMTP Proxy (587 -> 127.0.0.1:1025) After=protonmail-bridge.service @@ -111,7 +118,10 @@ ConditionPathExists=/home/protonbridge/.protonmailbridge-initialized [Service] Type=simple +Sockets=protonmail-bridge-smtp.socket ExecStart=/usr/lib/systemd/systemd-socket-proxyd 127.0.0.1:1025 +NoNewPrivileges=yes +PrivateTmp=yes EOF systemctl daemon-reload @@ -218,4 +228,3 @@ msg_ok "Created Helper Commands" motd_ssh customize cleanup_lxc - From bfdb602826235bfc8ceef9ee4afd295b761575a8 Mon Sep 17 00:00:00 2001 From: Stephen Chin Date: Sun, 8 Mar 2026 13:52:42 -0700 Subject: [PATCH 13/44] Removed description Co-authored-by: Tobias <96661824+CrazyWolf13@users.noreply.github.com> --- ct/protonmail-bridge.sh | 1 - 1 file changed, 1 deletion(-) diff --git a/ct/protonmail-bridge.sh b/ct/protonmail-bridge.sh index 9de1a8b8e..4b02110be 100644 --- a/ct/protonmail-bridge.sh +++ b/ct/protonmail-bridge.sh @@ -5,7 +5,6 @@ source <(curl -fsSL "$COMMUNITY_SCRIPTS_URL/misc/build.func") # Author: Stephen Chin # License: MIT | https://github.com/community-scripts/ProxmoxVED/raw/main/LICENSE # Source: https://github.com/ProtonMail/proton-bridge -# Description: Debian LXC that runs Proton Mail Bridge headless and exposes IMAP/SMTP to the LAN via systemd-socket-proxyd. APP="ProtonMail-Bridge" var_tags="${var_tags:-mail;proton}" From 269060341bda9ac294c6ad0cdb54ab9a3f5a3732 Mon Sep 17 00:00:00 2001 From: Stephen Chin Date: Sun, 8 Mar 2026 13:53:18 -0700 Subject: [PATCH 14/44] Switched back to ${APP} Co-authored-by: Tobias <96661824+CrazyWolf13@users.noreply.github.com> --- ct/protonmail-bridge.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ct/protonmail-bridge.sh b/ct/protonmail-bridge.sh index 4b02110be..64062495d 100644 --- a/ct/protonmail-bridge.sh +++ b/ct/protonmail-bridge.sh @@ -26,7 +26,7 @@ function update_script() { check_container_resources if [[ ! -x /usr/bin/protonmail-bridge ]]; then - msg_error "No Proton Mail Bridge Installation Found!" + msg_error "No ${APP} Installation Found!" exit fi From 8e0f6fcb213c60dfee6b0f0e3ef97890605c72b7 Mon Sep 17 00:00:00 2001 From: Stephen Chin Date: Sun, 8 Mar 2026 13:55:02 -0700 Subject: [PATCH 15/44] Removed extra messages. Co-authored-by: Tobias <96661824+CrazyWolf13@users.noreply.github.com> --- ct/protonmail-bridge.sh | 2 -- 1 file changed, 2 deletions(-) diff --git a/ct/protonmail-bridge.sh b/ct/protonmail-bridge.sh index 64062495d..98053ed62 100644 --- a/ct/protonmail-bridge.sh +++ b/ct/protonmail-bridge.sh @@ -36,9 +36,7 @@ function update_script() { systemctl stop protonmail-bridge-imap-proxy.service protonmail-bridge-smtp-proxy.service protonmail-bridge.service msg_ok "Stopped Services" - msg_info "Updating Proton Mail Bridge" fetch_and_deploy_gh_release "protonmail-bridge" "ProtonMail/proton-bridge" "binary" - msg_ok "Updated Proton Mail Bridge" if [[ -f /home/protonbridge/.protonmailbridge-initialized ]]; then msg_info "Starting Services" From 63622ece3801bc6a172ff4e8595cda37ada5e2f0 Mon Sep 17 00:00:00 2001 From: Stephen Chin Date: Sun, 8 Mar 2026 13:57:07 -0700 Subject: [PATCH 16/44] Removed types on service start Co-authored-by: Tobias <96661824+CrazyWolf13@users.noreply.github.com> --- ct/protonmail-bridge.sh | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/ct/protonmail-bridge.sh b/ct/protonmail-bridge.sh index 98053ed62..1713c0824 100644 --- a/ct/protonmail-bridge.sh +++ b/ct/protonmail-bridge.sh @@ -40,9 +40,7 @@ function update_script() { if [[ -f /home/protonbridge/.protonmailbridge-initialized ]]; then msg_info "Starting Services" - systemctl start protonmail-bridge.service - systemctl start protonmail-bridge-imap.socket protonmail-bridge-smtp.socket - systemctl start protonmail-bridge-imap-proxy.service protonmail-bridge-smtp-proxy.service + systemctl start protonmail-bridge protonmail-bridge-imap protonmail-bridge-smtp protonmail-bridge-imap-proxy protonmail-bridge-smtp-proxy msg_ok "Started Services" else msg_ok "Initialization not completed. Services remain disabled." From 86af319d32a5dcce3507b9444ad39aab3b6b2630 Mon Sep 17 00:00:00 2001 From: Stephen Chin Date: Sun, 8 Mar 2026 13:58:28 -0700 Subject: [PATCH 17/44] Remove types on service stop Co-authored-by: Tobias <96661824+CrazyWolf13@users.noreply.github.com> --- ct/protonmail-bridge.sh | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/ct/protonmail-bridge.sh b/ct/protonmail-bridge.sh index 1713c0824..69efca09c 100644 --- a/ct/protonmail-bridge.sh +++ b/ct/protonmail-bridge.sh @@ -32,8 +32,7 @@ function update_script() { if check_for_gh_release "protonmail-bridge" "ProtonMail/proton-bridge"; then msg_info "Stopping Services" - systemctl stop protonmail-bridge-imap.socket protonmail-bridge-smtp.socket - systemctl stop protonmail-bridge-imap-proxy.service protonmail-bridge-smtp-proxy.service protonmail-bridge.service + systemctl stop protonmail-bridge-imap protonmail-bridge-smtp protonmail-bridge-imap-proxy protonmail-bridge-smtp-proxy protonmail-bridge msg_ok "Stopped Services" fetch_and_deploy_gh_release "protonmail-bridge" "ProtonMail/proton-bridge" "binary" From f87a90b9596c9144d70c24a5feeefaf262b72a69 Mon Sep 17 00:00:00 2001 From: Stephen Chin Date: Sun, 8 Mar 2026 13:59:14 -0700 Subject: [PATCH 18/44] Remove extra message Co-authored-by: Tobias <96661824+CrazyWolf13@users.noreply.github.com> --- ct/protonmail-bridge.sh | 1 - 1 file changed, 1 deletion(-) diff --git a/ct/protonmail-bridge.sh b/ct/protonmail-bridge.sh index 69efca09c..8d7d989d6 100644 --- a/ct/protonmail-bridge.sh +++ b/ct/protonmail-bridge.sh @@ -44,7 +44,6 @@ function update_script() { else msg_ok "Initialization not completed. Services remain disabled." fi - msg_ok "Updated successfully!" fi exit From daecf37e3b2a47b45291bc3f4ee85b273b9711ef Mon Sep 17 00:00:00 2001 From: Stephen Chin Date: Sun, 8 Mar 2026 14:01:50 -0700 Subject: [PATCH 19/44] Added GitHub username in parenthesis --- ct/protonmail-bridge.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ct/protonmail-bridge.sh b/ct/protonmail-bridge.sh index 8d7d989d6..7c900de0a 100644 --- a/ct/protonmail-bridge.sh +++ b/ct/protonmail-bridge.sh @@ -2,7 +2,7 @@ COMMUNITY_SCRIPTS_URL="${COMMUNITY_SCRIPTS_URL:-https://git.community-scripts.org/community-scripts/ProxmoxVED/raw/branch/main}" source <(curl -fsSL "$COMMUNITY_SCRIPTS_URL/misc/build.func") # Copyright (c) 2021-2026 community-scripts ORG -# Author: Stephen Chin +# Author: Stephen Chin (steveonjava) # License: MIT | https://github.com/community-scripts/ProxmoxVED/raw/main/LICENSE # Source: https://github.com/ProtonMail/proton-bridge From 546ab5154795e0386136ce0e90160f92f7d4adf8 Mon Sep 17 00:00:00 2001 From: Stephen Chin Date: Sun, 8 Mar 2026 14:03:59 -0700 Subject: [PATCH 20/44] Updated memory requirements to 1GB --- frontend/public/json/protonmail-bridge.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/public/json/protonmail-bridge.json b/frontend/public/json/protonmail-bridge.json index 8cc3318c0..c1a99d44c 100644 --- a/frontend/public/json/protonmail-bridge.json +++ b/frontend/public/json/protonmail-bridge.json @@ -20,7 +20,7 @@ "script": "ct/protonmail-bridge.sh", "resources": { "cpu": 2, - "ram": 768, + "ram": 1024, "hdd": 8, "os": "debian", "version": "13" From 7977f5589def23673d8f45d87f3b2ba6b841cb2d Mon Sep 17 00:00:00 2001 From: Stephen Chin Date: Sun, 8 Mar 2026 14:04:54 -0700 Subject: [PATCH 21/44] Added GitHuib username in parenthesis --- install/protonmail-bridge-install.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install/protonmail-bridge-install.sh b/install/protonmail-bridge-install.sh index 94a152aaa..a441b83d0 100644 --- a/install/protonmail-bridge-install.sh +++ b/install/protonmail-bridge-install.sh @@ -1,7 +1,7 @@ #!/usr/bin/env bash # Copyright (c) 2021-2026 community-scripts ORG -# Author: Stephen Chin +# Author: Stephen Chin (steveonjava) # License: MIT | https://github.com/community-scripts/ProxmoxVED/raw/main/LICENSE # Source: https://github.com/ProtonMail/proton-bridge # Description: Installs Proton Mail Bridge, creates systemd services, and exposes IMAP/SMTP via systemd-socket-proxyd. From 4931c393493dd0657e2c008d8fb935fb2dfa5266 Mon Sep 17 00:00:00 2001 From: Stephen Chin Date: Sun, 8 Mar 2026 14:39:58 -0700 Subject: [PATCH 22/44] Apply suggestion from @CrazyWolf13 Co-authored-by: Tobias <96661824+CrazyWolf13@users.noreply.github.com> --- install/protonmail-bridge-install.sh | 1 - 1 file changed, 1 deletion(-) diff --git a/install/protonmail-bridge-install.sh b/install/protonmail-bridge-install.sh index a441b83d0..d979178ad 100644 --- a/install/protonmail-bridge-install.sh +++ b/install/protonmail-bridge-install.sh @@ -4,7 +4,6 @@ # Author: Stephen Chin (steveonjava) # License: MIT | https://github.com/community-scripts/ProxmoxVED/raw/main/LICENSE # Source: https://github.com/ProtonMail/proton-bridge -# Description: Installs Proton Mail Bridge, creates systemd services, and exposes IMAP/SMTP via systemd-socket-proxyd. source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" color From 69596eb7f3cabef12908471614df79a4528cecc6 Mon Sep 17 00:00:00 2001 From: Stephen Chin Date: Sun, 8 Mar 2026 14:41:13 -0700 Subject: [PATCH 23/44] Removed check for user already existing --- install/protonmail-bridge-install.sh | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/install/protonmail-bridge-install.sh b/install/protonmail-bridge-install.sh index d979178ad..d84ad345d 100644 --- a/install/protonmail-bridge-install.sh +++ b/install/protonmail-bridge-install.sh @@ -18,9 +18,7 @@ $STD apt install -y pass msg_ok "Installed Dependencies" msg_info "Creating Service User" -if ! id -u protonbridge >/dev/null 2>&1; then - useradd -r -m -d /home/protonbridge -s /usr/sbin/nologin protonbridge -fi +useradd -r -m -d /home/protonbridge -s /usr/sbin/nologin protonbridge install -d -m 0750 -o protonbridge -g protonbridge /home/protonbridge msg_ok "Created Service User" From 42ee142ebf761c7aecacef118828a426b4a1e08d Mon Sep 17 00:00:00 2001 From: Stephen Chin Date: Sun, 8 Mar 2026 14:42:19 -0700 Subject: [PATCH 24/44] Apply suggestion from @CrazyWolf13 Co-authored-by: Tobias <96661824+CrazyWolf13@users.noreply.github.com> --- install/protonmail-bridge-install.sh | 2 -- 1 file changed, 2 deletions(-) diff --git a/install/protonmail-bridge-install.sh b/install/protonmail-bridge-install.sh index d84ad345d..9fc376889 100644 --- a/install/protonmail-bridge-install.sh +++ b/install/protonmail-bridge-install.sh @@ -22,9 +22,7 @@ useradd -r -m -d /home/protonbridge -s /usr/sbin/nologin protonbridge install -d -m 0750 -o protonbridge -g protonbridge /home/protonbridge msg_ok "Created Service User" -msg_info "Installing Proton Mail Bridge" fetch_and_deploy_gh_release "protonmail-bridge" "ProtonMail/proton-bridge" "binary" -msg_ok "Installed Proton Mail Bridge" msg_info "Creating Services" From 172a72c9efd3746a457997427bb2dbd7f585af1e Mon Sep 17 00:00:00 2001 From: Stephen Chin Date: Sun, 8 Mar 2026 14:42:32 -0700 Subject: [PATCH 25/44] Apply suggestion from @CrazyWolf13 Co-authored-by: Tobias <96661824+CrazyWolf13@users.noreply.github.com> --- install/protonmail-bridge-install.sh | 1 - 1 file changed, 1 deletion(-) diff --git a/install/protonmail-bridge-install.sh b/install/protonmail-bridge-install.sh index 9fc376889..7e495eacf 100644 --- a/install/protonmail-bridge-install.sh +++ b/install/protonmail-bridge-install.sh @@ -25,7 +25,6 @@ msg_ok "Created Service User" fetch_and_deploy_gh_release "protonmail-bridge" "ProtonMail/proton-bridge" "binary" msg_info "Creating Services" - cat <<'EOF'> /etc/systemd/system/protonmail-bridge.service [Unit] Description=Proton Mail Bridge (noninteractive) From 11c7f88a3c39f34b9a8c3f39e003dd3730f48094 Mon Sep 17 00:00:00 2001 From: Stephen Chin Date: Sun, 8 Mar 2026 14:43:39 -0700 Subject: [PATCH 26/44] Apply suggestions from code review Co-authored-by: Tobias <96661824+CrazyWolf13@users.noreply.github.com> --- install/protonmail-bridge-install.sh | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/install/protonmail-bridge-install.sh b/install/protonmail-bridge-install.sh index 7e495eacf..0c83614cf 100644 --- a/install/protonmail-bridge-install.sh +++ b/install/protonmail-bridge-install.sh @@ -25,7 +25,7 @@ msg_ok "Created Service User" fetch_and_deploy_gh_release "protonmail-bridge" "ProtonMail/proton-bridge" "binary" msg_info "Creating Services" -cat <<'EOF'> /etc/systemd/system/protonmail-bridge.service +cat < /etc/systemd/system/protonmail-bridge.service [Unit] Description=Proton Mail Bridge (noninteractive) After=network-online.target @@ -122,7 +122,6 @@ systemctl daemon-reload msg_ok "Created Services" msg_info "Creating Helper Commands" - cat > /usr/local/bin/protonmailbridge-init <<'EOF' #!/usr/bin/env bash set -euo pipefail From 70a40bb9584f8ff98868cafd3fa55a273bdfb0f5 Mon Sep 17 00:00:00 2001 From: Stephen Chin Date: Sun, 8 Mar 2026 15:00:24 -0700 Subject: [PATCH 27/44] Changed to use the github raw content instead of gitea server --- ct/protonmail-bridge.sh | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/ct/protonmail-bridge.sh b/ct/protonmail-bridge.sh index 7c900de0a..10b4b447a 100644 --- a/ct/protonmail-bridge.sh +++ b/ct/protonmail-bridge.sh @@ -1,6 +1,5 @@ #!/usr/bin/env bash -COMMUNITY_SCRIPTS_URL="${COMMUNITY_SCRIPTS_URL:-https://git.community-scripts.org/community-scripts/ProxmoxVED/raw/branch/main}" -source <(curl -fsSL "$COMMUNITY_SCRIPTS_URL/misc/build.func") +source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVED/main/misc/build.func) # Copyright (c) 2021-2026 community-scripts ORG # Author: Stephen Chin (steveonjava) # License: MIT | https://github.com/community-scripts/ProxmoxVED/raw/main/LICENSE From 7df0d109e7732fe1c6bbe40c4461d3e6a979a222 Mon Sep 17 00:00:00 2001 From: Stephen Chin Date: Sun, 8 Mar 2026 15:02:24 -0700 Subject: [PATCH 28/44] Changed ram to 1024 to match the json --- ct/protonmail-bridge.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ct/protonmail-bridge.sh b/ct/protonmail-bridge.sh index 10b4b447a..9ffaf69cb 100644 --- a/ct/protonmail-bridge.sh +++ b/ct/protonmail-bridge.sh @@ -8,7 +8,7 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV APP="ProtonMail-Bridge" var_tags="${var_tags:-mail;proton}" var_cpu="${var_cpu:-2}" -var_ram="${var_ram:-768}" +var_ram="${var_ram:-1024}" var_disk="${var_disk:-8}" var_os="${var_os:-debian}" var_version="${var_version:-13}" From 1e32c49bf0f52dbcdb34680ebd19610baafe9f5b Mon Sep 17 00:00:00 2001 From: Stephen Chin Date: Sun, 8 Mar 2026 15:02:58 -0700 Subject: [PATCH 29/44] Added exit code value --- ct/protonmail-bridge.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ct/protonmail-bridge.sh b/ct/protonmail-bridge.sh index 9ffaf69cb..8d385b699 100644 --- a/ct/protonmail-bridge.sh +++ b/ct/protonmail-bridge.sh @@ -26,7 +26,7 @@ function update_script() { if [[ ! -x /usr/bin/protonmail-bridge ]]; then msg_error "No ${APP} Installation Found!" - exit + exit 1 fi if check_for_gh_release "protonmail-bridge" "ProtonMail/proton-bridge"; then From bed63617699ec1671b3a9481ddc989d524aa6643 Mon Sep 17 00:00:00 2001 From: Stephen Chin Date: Sun, 8 Mar 2026 15:21:45 -0700 Subject: [PATCH 30/44] Updated the end of install messages to be more consistent. --- ct/protonmail-bridge.sh | 13 ++----------- 1 file changed, 2 insertions(+), 11 deletions(-) diff --git a/ct/protonmail-bridge.sh b/ct/protonmail-bridge.sh index 8d385b699..ee54e551a 100644 --- a/ct/protonmail-bridge.sh +++ b/ct/protonmail-bridge.sh @@ -53,15 +53,6 @@ build_container description msg_ok "Completed successfully!\n" -echo -e "${CREATING}${GN}Proton Mail Bridge setup has been successfully initialized!${CL}" +echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}" echo -e "${INFO}${YW}One-time initialization is required before Bridge services are enabled.${CL}" -echo -e "${INFO}${YW}Initialize the account inside the container:${CL}" -echo -e "${TAB}${YW}protonmailbridge-init${CL}" -echo -e "${INFO}${YW}After initial configuration, use this to access the Bridge CLI:${CL}" -echo -e "${TAB}${YW}protonmailbridge-configure${CL}" -echo -e "${INFO}${YW}LAN-accessible forwarded ports (container IP ${IP}):${CL}" -echo -e "${TAB}${GATEWAY}${BGN}IMAP ${IP}:143${CL}" -echo -e "${TAB}${GATEWAY}${BGN}SMTP ${IP}:587${CL}" -echo -e "${INFO}${YW}Forwarding targets inside the container (Bridge defaults):${CL}" -echo -e "${TAB}${YW}IMAP 127.0.0.1:1143${CL}" -echo -e "${TAB}${YW}SMTP 127.0.0.1:1025${CL}" +echo -e "${TAB}${YW}Run this command in the container: protonmailbridge-init${CL}" From 54ba42afcefd33e5a737eb1dbeeb3e03780ac7b1 Mon Sep 17 00:00:00 2001 From: Stephen Chin Date: Sun, 8 Mar 2026 15:47:41 -0700 Subject: [PATCH 31/44] Converted to heredoc style --- install/protonmail-bridge-install.sh | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/install/protonmail-bridge-install.sh b/install/protonmail-bridge-install.sh index 0c83614cf..4a145708e 100644 --- a/install/protonmail-bridge-install.sh +++ b/install/protonmail-bridge-install.sh @@ -57,7 +57,7 @@ WantedBy=multi-user.target EOF # IMAP socket (LAN 143) -cat > /etc/systemd/system/protonmail-bridge-imap.socket <<'EOF' +cat <<'EOF' > /etc/systemd/system/protonmail-bridge-imap.socket [Unit] Description=Proton Mail Bridge IMAP Socket (143) ConditionPathExists=/home/protonbridge/.protonmailbridge-initialized @@ -88,7 +88,7 @@ PrivateTmp=yes EOF # SMTP socket (LAN 587) -cat > /etc/systemd/system/protonmail-bridge-smtp.socket <<'EOF' +cat <<'EOF' > /etc/systemd/system/protonmail-bridge-smtp.socket [Unit] Description=Proton Mail Bridge SMTP Socket (587) ConditionPathExists=/home/protonbridge/.protonmailbridge-initialized @@ -122,7 +122,7 @@ systemctl daemon-reload msg_ok "Created Services" msg_info "Creating Helper Commands" -cat > /usr/local/bin/protonmailbridge-init <<'EOF' +cat <<'EOF' > /usr/local/bin/protonmailbridge-init #!/usr/bin/env bash set -euo pipefail @@ -189,7 +189,7 @@ EOF chmod +x /usr/local/bin/protonmailbridge-init ln -sf /usr/local/bin/protonmailbridge-init /usr/bin/protonmailbridge-init -cat > /usr/local/bin/protonmailbridge-configure <<'EOF' +cat <<'EOF' > /usr/local/bin/protonmailbridge-configure #!/usr/bin/env bash set -euo pipefail From 0bed845d6d5fcafc52baf935e3686f0ecb640f36 Mon Sep 17 00:00:00 2001 From: Stephen Chin Date: Sun, 8 Mar 2026 17:36:45 -0700 Subject: [PATCH 32/44] Fixed the update script to leave services in the same state they were before it was called. --- ct/protonmail-bridge.sh | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/ct/protonmail-bridge.sh b/ct/protonmail-bridge.sh index ee54e551a..ff6010005 100644 --- a/ct/protonmail-bridge.sh +++ b/ct/protonmail-bridge.sh @@ -30,6 +30,23 @@ function update_script() { fi if check_for_gh_release "protonmail-bridge" "ProtonMail/proton-bridge"; then + local -a bridge_units=( + protonmail-bridge + protonmail-bridge-imap + protonmail-bridge-smtp + protonmail-bridge-imap-proxy + protonmail-bridge-smtp-proxy + ) + local unit + declare -A was_active + for unit in "${bridge_units[@]}"; do + if systemctl is-active --quiet "$unit" 2>/dev/null; then + was_active["$unit"]=1 + else + was_active["$unit"]=0 + fi + done + msg_info "Stopping Services" systemctl stop protonmail-bridge-imap protonmail-bridge-smtp protonmail-bridge-imap-proxy protonmail-bridge-smtp-proxy protonmail-bridge msg_ok "Stopped Services" @@ -38,7 +55,11 @@ function update_script() { if [[ -f /home/protonbridge/.protonmailbridge-initialized ]]; then msg_info "Starting Services" - systemctl start protonmail-bridge protonmail-bridge-imap protonmail-bridge-smtp protonmail-bridge-imap-proxy protonmail-bridge-smtp-proxy + for unit in "${bridge_units[@]}"; do + if [[ "${was_active[$unit]:-0}" == "1" ]]; then + systemctl start "$unit" + fi + done msg_ok "Started Services" else msg_ok "Initialization not completed. Services remain disabled." From 70344e5f8f1de4c35387de925dc6c790de9740ba Mon Sep 17 00:00:00 2001 From: Stephen Chin Date: Sun, 8 Mar 2026 18:28:35 -0700 Subject: [PATCH 33/44] Use protonmailbridge-configure for both initialization and later configuration. --- ct/protonmail-bridge.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ct/protonmail-bridge.sh b/ct/protonmail-bridge.sh index ff6010005..793fc64cd 100644 --- a/ct/protonmail-bridge.sh +++ b/ct/protonmail-bridge.sh @@ -75,5 +75,5 @@ description msg_ok "Completed successfully!\n" echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}" -echo -e "${INFO}${YW}One-time initialization is required before Bridge services are enabled.${CL}" -echo -e "${TAB}${YW}Run this command in the container: protonmailbridge-init${CL}" +echo -e "${INFO}${YW}One-time configuration is required before Bridge services are enabled.${CL}" +echo -e "${TAB}${YW}Run this command in the container: protonmailbridge-configure${CL}" From 46e01073922e4145284144e6f8c655b5572b7d0a Mon Sep 17 00:00:00 2001 From: Stephen Chin Date: Sun, 8 Mar 2026 18:29:29 -0700 Subject: [PATCH 34/44] Use protonmailbridge-configure for both initialization and later configuration. --- frontend/public/json/protonmail-bridge.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/frontend/public/json/protonmail-bridge.json b/frontend/public/json/protonmail-bridge.json index c1a99d44c..51847b26f 100644 --- a/frontend/public/json/protonmail-bridge.json +++ b/frontend/public/json/protonmail-bridge.json @@ -33,7 +33,7 @@ }, "notes": [ { - "text": "After install, run protonmailbridge-init inside the container to create a pass keychain and log in via the Bridge CLI.", + "text": "After install, run protonmailbridge-configure inside the container for first-time setup.", "type": "info" }, { @@ -41,7 +41,7 @@ "type": "info" }, { - "text": "Use protonmailbridge-configure to temporarily stop the service and enter the Bridge CLI without running a second instance.", + "text": "You can later use protonmailbridge-configure to temporarily stop the service and enter the Bridge CLI.", "type": "info" } ] From fb687c5d226623df8384bd1e57a5f99dc328723f Mon Sep 17 00:00:00 2001 From: Stephen Chin Date: Sun, 8 Mar 2026 18:30:30 -0700 Subject: [PATCH 35/44] Use protonmailbridge-configure for both initialization and later configuration. --- install/protonmail-bridge-install.sh | 94 +++++++++++----------------- 1 file changed, 37 insertions(+), 57 deletions(-) diff --git a/install/protonmail-bridge-install.sh b/install/protonmail-bridge-install.sh index 4a145708e..1a1bc7650 100644 --- a/install/protonmail-bridge-install.sh +++ b/install/protonmail-bridge-install.sh @@ -122,52 +122,53 @@ systemctl daemon-reload msg_ok "Created Services" msg_info "Creating Helper Commands" -cat <<'EOF' > /usr/local/bin/protonmailbridge-init + +cat <<'EOF' > /usr/local/bin/protonmailbridge-configure #!/usr/bin/env bash set -euo pipefail BRIDGE_USER="protonbridge" BRIDGE_HOME="/home/${BRIDGE_USER}" +GNUPG_HOME="${BRIDGE_HOME}/.gnupg" MARKER="${BRIDGE_HOME}/.protonmailbridge-initialized" -if [[ -f "$MARKER" ]]; then - echo "Already initialized." - echo "To start services:" - echo " systemctl enable --now protonmail-bridge.service" - echo " systemctl enable --now protonmail-bridge-imap.socket protonmail-bridge-smtp.socket" - exit 0 +FIRST_TIME=0 +if [[ ! -f "${MARKER}" ]]; then + FIRST_TIME=1 fi # Stop sockets/proxies/bridge daemon if they were manually started systemctl stop protonmail-bridge-imap.socket protonmail-bridge-smtp.socket 2>/dev/null || true systemctl stop protonmail-bridge-imap-proxy.service protonmail-bridge-smtp-proxy.service protonmail-bridge.service 2>/dev/null || true -echo "Initializing pass keychain for ${BRIDGE_USER} (required by Proton Mail Bridge on Linux)." +if [[ "${FIRST_TIME}" == "1" ]]; then + echo "First-time setup: initializing pass keychain for ${BRIDGE_USER} (required by Proton Mail Bridge on Linux)." -install -d -m 0700 -o "${BRIDGE_USER}" -g "${BRIDGE_USER}" "${BRIDGE_HOME}/.gnupg" + install -d -m 0700 -o "${BRIDGE_USER}" -g "${BRIDGE_USER}" "${GNUPG_HOME}" -FPR="$(runuser -u "${BRIDGE_USER}" -- env HOME="${BRIDGE_HOME}" GNUPGHOME="${BRIDGE_HOME}/.gnupg" \ - gpg --list-secret-keys --with-colons 2>/dev/null | awk -F: '$1=="fpr"{print $10; exit}')" - -if [[ -z "${FPR}" ]]; then - runuser -u "${BRIDGE_USER}" -- env HOME="${BRIDGE_HOME}" GNUPGHOME="${BRIDGE_HOME}/.gnupg" \ - gpg --batch --pinentry-mode loopback --passphrase '' \ - --quick-gen-key 'ProtonMail Bridge' default default never - - FPR="$(runuser -u "${BRIDGE_USER}" -- env HOME="${BRIDGE_HOME}" GNUPGHOME="${BRIDGE_HOME}/.gnupg" \ + FPR="$(runuser -u "${BRIDGE_USER}" -- env HOME="${BRIDGE_HOME}" GNUPGHOME="${GNUPG_HOME}" \ gpg --list-secret-keys --with-colons 2>/dev/null | awk -F: '$1=="fpr"{print $10; exit}')" -fi -if [[ -z "${FPR}" ]]; then - echo "Failed to detect a GPG key fingerprint for ${BRIDGE_USER}." >&2 - exit 1 -fi + if [[ -z "${FPR}" ]]; then + runuser -u "${BRIDGE_USER}" -- env HOME="${BRIDGE_HOME}" GNUPGHOME="${GNUPG_HOME}" \ + gpg --batch --pinentry-mode loopback --passphrase '' \ + --quick-gen-key 'ProtonMail Bridge' default default never -runuser -u "${BRIDGE_USER}" -- env HOME="${BRIDGE_HOME}" GNUPGHOME="${BRIDGE_HOME}/.gnupg" \ - pass init "${FPR}" + FPR="$(runuser -u "${BRIDGE_USER}" -- env HOME="${BRIDGE_HOME}" GNUPGHOME="${GNUPG_HOME}" \ + gpg --list-secret-keys --with-colons 2>/dev/null | awk -F: '$1=="fpr"{print $10; exit}')" + fi + + if [[ -z "${FPR}" ]]; then + echo "Failed to detect a GPG key fingerprint for ${BRIDGE_USER}." >&2 + exit 1 + fi + + runuser -u "${BRIDGE_USER}" -- env HOME="${BRIDGE_HOME}" GNUPGHOME="${GNUPG_HOME}" \ + pass init "${FPR}" +fi echo -echo "Starting Proton Mail Bridge CLI for one-time login." +echo "Starting Proton Mail Bridge CLI." echo "Run: login" echo "Run: info" echo "Run: exit" @@ -176,42 +177,21 @@ echo runuser -u "${BRIDGE_USER}" -- env HOME="${BRIDGE_HOME}" \ protonmail-bridge -c -touch "${MARKER}" -chown "${BRIDGE_USER}:${BRIDGE_USER}" "${MARKER}" -chmod 0644 "${MARKER}" - -systemctl daemon-reload -systemctl enable -q --now protonmail-bridge.service -systemctl enable -q --now protonmail-bridge-imap.socket protonmail-bridge-smtp.socket - -echo "Initialization complete. Services enabled and started." -EOF -chmod +x /usr/local/bin/protonmailbridge-init -ln -sf /usr/local/bin/protonmailbridge-init /usr/bin/protonmailbridge-init - -cat <<'EOF' > /usr/local/bin/protonmailbridge-configure -#!/usr/bin/env bash -set -euo pipefail - -BRIDGE_USER="protonbridge" -BRIDGE_HOME="/home/${BRIDGE_USER}" -MARKER="${BRIDGE_HOME}/.protonmailbridge-initialized" - -if [[ ! -f "${MARKER}" ]]; then - echo "Not initialized yet. Run:" - echo " protonmailbridge-init" - exit 1 +if [[ "${FIRST_TIME}" == "1" ]]; then + touch "${MARKER}" + chown "${BRIDGE_USER}:${BRIDGE_USER}" "${MARKER}" + chmod 0644 "${MARKER}" fi -systemctl stop protonmail-bridge-imap.socket protonmail-bridge-smtp.socket 2>/dev/null || true -systemctl stop protonmail-bridge-imap-proxy.service protonmail-bridge-smtp-proxy.service protonmail-bridge.service 2>/dev/null || true - -runuser -u "${BRIDGE_USER}" -- env HOME="${BRIDGE_HOME}" \ - protonmail-bridge -c - systemctl daemon-reload systemctl enable -q --now protonmail-bridge.service systemctl enable -q --now protonmail-bridge-imap.socket protonmail-bridge-smtp.socket + +if [[ "${FIRST_TIME}" == "1" ]]; then + echo "Initialization complete. Services enabled and started." +else + echo "Configuration complete. Services enabled and started." +fi EOF chmod +x /usr/local/bin/protonmailbridge-configure ln -sf /usr/local/bin/protonmailbridge-configure /usr/bin/protonmailbridge-configure From 5b496a28d24cf1f33f8ef3b7ef665d901a121c95 Mon Sep 17 00:00:00 2001 From: Stephen Chin Date: Sun, 8 Mar 2026 23:08:32 -0700 Subject: [PATCH 36/44] Removed extraneous .service postfixes and improved messages. --- install/protonmail-bridge-install.sh | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/install/protonmail-bridge-install.sh b/install/protonmail-bridge-install.sh index 1a1bc7650..0860d08e2 100644 --- a/install/protonmail-bridge-install.sh +++ b/install/protonmail-bridge-install.sh @@ -137,9 +137,9 @@ if [[ ! -f "${MARKER}" ]]; then FIRST_TIME=1 fi -# Stop sockets/proxies/bridge daemon if they were manually started +# Stop sockets/proxies/bridge daemon before configuration systemctl stop protonmail-bridge-imap.socket protonmail-bridge-smtp.socket 2>/dev/null || true -systemctl stop protonmail-bridge-imap-proxy.service protonmail-bridge-smtp-proxy.service protonmail-bridge.service 2>/dev/null || true +systemctl stop protonmail-bridge-imap-proxy protonmail-bridge-smtp-proxy protonmail-bridge 2>/dev/null || true if [[ "${FIRST_TIME}" == "1" ]]; then echo "First-time setup: initializing pass keychain for ${BRIDGE_USER} (required by Proton Mail Bridge on Linux)." @@ -165,14 +165,20 @@ if [[ "${FIRST_TIME}" == "1" ]]; then runuser -u "${BRIDGE_USER}" -- env HOME="${BRIDGE_HOME}" GNUPGHOME="${GNUPG_HOME}" \ pass init "${FPR}" -fi -echo -echo "Starting Proton Mail Bridge CLI." -echo "Run: login" -echo "Run: info" -echo "Run: exit" -echo + echo + echo "To do initial configuration of the Proton Mail Bridge:" + echo "Run: login" + echo "Run: info" + echo "Run: exit" + echo +else + echo + echo "Launching Proton Mail Bridge CLI for configuration." + echo "External access is disabled until you exit." + echo "Run: exit" + echo +fi runuser -u "${BRIDGE_USER}" -- env HOME="${BRIDGE_HOME}" \ protonmail-bridge -c From a7f7d961fb1ccd542f29a64cdfa43b815d5f860a Mon Sep 17 00:00:00 2001 From: Stephen Chin Date: Sun, 8 Mar 2026 23:09:07 -0700 Subject: [PATCH 37/44] Added missing .socket postfixes --- ct/protonmail-bridge.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/ct/protonmail-bridge.sh b/ct/protonmail-bridge.sh index 793fc64cd..8a85e3d52 100644 --- a/ct/protonmail-bridge.sh +++ b/ct/protonmail-bridge.sh @@ -32,8 +32,8 @@ function update_script() { if check_for_gh_release "protonmail-bridge" "ProtonMail/proton-bridge"; then local -a bridge_units=( protonmail-bridge - protonmail-bridge-imap - protonmail-bridge-smtp + protonmail-bridge-imap.socket + protonmail-bridge-smtp.socket protonmail-bridge-imap-proxy protonmail-bridge-smtp-proxy ) @@ -48,7 +48,7 @@ function update_script() { done msg_info "Stopping Services" - systemctl stop protonmail-bridge-imap protonmail-bridge-smtp protonmail-bridge-imap-proxy protonmail-bridge-smtp-proxy protonmail-bridge + systemctl stop protonmail-bridge-imap.socket protonmail-bridge-smtp.socket protonmail-bridge-imap-proxy protonmail-bridge-smtp-proxy protonmail-bridge msg_ok "Stopped Services" fetch_and_deploy_gh_release "protonmail-bridge" "ProtonMail/proton-bridge" "binary" From f7efc94f34d3070ff3ca4af3f2b4cd9b8837b8a9 Mon Sep 17 00:00:00 2001 From: Stephen Chin Date: Mon, 9 Mar 2026 00:43:38 -0700 Subject: [PATCH 38/44] Improved display of message --- ct/protonmail-bridge.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ct/protonmail-bridge.sh b/ct/protonmail-bridge.sh index 8a85e3d52..3bcf518ca 100644 --- a/ct/protonmail-bridge.sh +++ b/ct/protonmail-bridge.sh @@ -76,4 +76,4 @@ description msg_ok "Completed successfully!\n" echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}" echo -e "${INFO}${YW}One-time configuration is required before Bridge services are enabled.${CL}" -echo -e "${TAB}${YW}Run this command in the container: protonmailbridge-configure${CL}" +echo -e "${INFO}${YW}Run this command in the container: protonmailbridge-configure${CL}" From 8aee8f0af7b488c0817dcc933dafc9fa7f153da6 Mon Sep 17 00:00:00 2001 From: Stephen Chin Date: Mon, 9 Mar 2026 01:08:53 -0700 Subject: [PATCH 39/44] Fixes for review comments. --- install/protonmail-bridge-install.sh | 21 +++------------------ 1 file changed, 3 insertions(+), 18 deletions(-) diff --git a/install/protonmail-bridge-install.sh b/install/protonmail-bridge-install.sh index 0860d08e2..84664cb54 100644 --- a/install/protonmail-bridge-install.sh +++ b/install/protonmail-bridge-install.sh @@ -30,7 +30,6 @@ cat < /etc/systemd/system/protonmail-bridge.service Description=Proton Mail Bridge (noninteractive) After=network-online.target Wants=network-online.target - ConditionPathExists=/home/protonbridge/.protonmailbridge-initialized [Service] @@ -39,12 +38,9 @@ User=protonbridge Group=protonbridge WorkingDirectory=/home/protonbridge Environment=HOME=/home/protonbridge - ExecStart=/usr/bin/protonmail-bridge --noninteractive - Restart=always RestartSec=3 - NoNewPrivileges=yes PrivateTmp=yes ProtectSystem=full @@ -70,8 +66,6 @@ Service=protonmail-bridge-imap-proxy.service [Install] WantedBy=sockets.target EOF - -# IMAP proxy service (143 -> 127.0.0.1:1143) cat <<'EOF'>/etc/systemd/system/protonmail-bridge-imap-proxy.service [Unit] Description=Proton Mail Bridge IMAP Proxy (143 -> 127.0.0.1:1143) @@ -86,8 +80,6 @@ ExecStart=/usr/lib/systemd/systemd-socket-proxyd 127.0.0.1:1143 NoNewPrivileges=yes PrivateTmp=yes EOF - -# SMTP socket (LAN 587) cat <<'EOF' > /etc/systemd/system/protonmail-bridge-smtp.socket [Unit] Description=Proton Mail Bridge SMTP Socket (587) @@ -101,8 +93,6 @@ Service=protonmail-bridge-smtp-proxy.service [Install] WantedBy=sockets.target EOF - -# SMTP proxy service (587 -> 127.0.0.1:1025) cat <<'EOF'>/etc/systemd/system/protonmail-bridge-smtp-proxy.service [Unit] Description=Proton Mail Bridge SMTP Proxy (587 -> 127.0.0.1:1025) @@ -117,8 +107,6 @@ ExecStart=/usr/lib/systemd/systemd-socket-proxyd 127.0.0.1:1025 NoNewPrivileges=yes PrivateTmp=yes EOF - -systemctl daemon-reload msg_ok "Created Services" msg_info "Creating Helper Commands" @@ -138,8 +126,8 @@ if [[ ! -f "${MARKER}" ]]; then fi # Stop sockets/proxies/bridge daemon before configuration -systemctl stop protonmail-bridge-imap.socket protonmail-bridge-smtp.socket 2>/dev/null || true -systemctl stop protonmail-bridge-imap-proxy protonmail-bridge-smtp-proxy protonmail-bridge 2>/dev/null || true +systemctl stop protonmail-bridge-imap.socket protonmail-bridge-smtp.socket +systemctl stop protonmail-bridge-imap-proxy protonmail-bridge-smtp-proxy protonmail-bridge if [[ "${FIRST_TIME}" == "1" ]]; then echo "First-time setup: initializing pass keychain for ${BRIDGE_USER} (required by Proton Mail Bridge on Linux)." @@ -189,9 +177,7 @@ if [[ "${FIRST_TIME}" == "1" ]]; then chmod 0644 "${MARKER}" fi -systemctl daemon-reload -systemctl enable -q --now protonmail-bridge.service -systemctl enable -q --now protonmail-bridge-imap.socket protonmail-bridge-smtp.socket +systemctl enable -q --now protonmail-bridge.service protonmail-bridge-imap.socket protonmail-bridge-smtp.socket if [[ "${FIRST_TIME}" == "1" ]]; then echo "Initialization complete. Services enabled and started." @@ -201,7 +187,6 @@ fi EOF chmod +x /usr/local/bin/protonmailbridge-configure ln -sf /usr/local/bin/protonmailbridge-configure /usr/bin/protonmailbridge-configure - msg_ok "Created Helper Commands" motd_ssh From 5d17a0baa62e3377212aa8a48b92d29c6e9c82d3 Mon Sep 17 00:00:00 2001 From: Stephen Chin Date: Mon, 9 Mar 2026 02:00:16 -0700 Subject: [PATCH 40/44] Removed comment --- install/protonmail-bridge-install.sh | 2 -- 1 file changed, 2 deletions(-) diff --git a/install/protonmail-bridge-install.sh b/install/protonmail-bridge-install.sh index 84664cb54..10e1b741a 100644 --- a/install/protonmail-bridge-install.sh +++ b/install/protonmail-bridge-install.sh @@ -51,8 +51,6 @@ ProtectControlGroups=yes [Install] WantedBy=multi-user.target EOF - -# IMAP socket (LAN 143) cat <<'EOF' > /etc/systemd/system/protonmail-bridge-imap.socket [Unit] Description=Proton Mail Bridge IMAP Socket (143) From e488a160775a485f37b33d1ea053f7fcd5493b75 Mon Sep 17 00:00:00 2001 From: Stephen Chin Date: Mon, 9 Mar 2026 02:01:01 -0700 Subject: [PATCH 41/44] Apply suggestion from @CrazyWolf13 Co-authored-by: Tobias <96661824+CrazyWolf13@users.noreply.github.com> --- install/protonmail-bridge-install.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install/protonmail-bridge-install.sh b/install/protonmail-bridge-install.sh index 10e1b741a..be10d9fee 100644 --- a/install/protonmail-bridge-install.sh +++ b/install/protonmail-bridge-install.sh @@ -64,7 +64,7 @@ Service=protonmail-bridge-imap-proxy.service [Install] WantedBy=sockets.target EOF -cat <<'EOF'>/etc/systemd/system/protonmail-bridge-imap-proxy.service +cat <<'EOF' >/etc/systemd/system/protonmail-bridge-imap-proxy.service [Unit] Description=Proton Mail Bridge IMAP Proxy (143 -> 127.0.0.1:1143) After=protonmail-bridge.service From 320886faadde90e59ec1667ddd22fc0122ba127c Mon Sep 17 00:00:00 2001 From: Stephen Chin Date: Mon, 9 Mar 2026 02:03:07 -0700 Subject: [PATCH 42/44] Fixed EOFs to match style guidelines --- install/protonmail-bridge-install.sh | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/install/protonmail-bridge-install.sh b/install/protonmail-bridge-install.sh index be10d9fee..973dfea1c 100644 --- a/install/protonmail-bridge-install.sh +++ b/install/protonmail-bridge-install.sh @@ -51,7 +51,7 @@ ProtectControlGroups=yes [Install] WantedBy=multi-user.target EOF -cat <<'EOF' > /etc/systemd/system/protonmail-bridge-imap.socket +cat <<'EOF'> /etc/systemd/system/protonmail-bridge-imap.socket [Unit] Description=Proton Mail Bridge IMAP Socket (143) ConditionPathExists=/home/protonbridge/.protonmailbridge-initialized @@ -64,7 +64,7 @@ Service=protonmail-bridge-imap-proxy.service [Install] WantedBy=sockets.target EOF -cat <<'EOF' >/etc/systemd/system/protonmail-bridge-imap-proxy.service +cat <<'EOF'> /etc/systemd/system/protonmail-bridge-imap-proxy.service [Unit] Description=Proton Mail Bridge IMAP Proxy (143 -> 127.0.0.1:1143) After=protonmail-bridge.service @@ -78,7 +78,7 @@ ExecStart=/usr/lib/systemd/systemd-socket-proxyd 127.0.0.1:1143 NoNewPrivileges=yes PrivateTmp=yes EOF -cat <<'EOF' > /etc/systemd/system/protonmail-bridge-smtp.socket +cat <<'EOF'> /etc/systemd/system/protonmail-bridge-smtp.socket [Unit] Description=Proton Mail Bridge SMTP Socket (587) ConditionPathExists=/home/protonbridge/.protonmailbridge-initialized @@ -91,7 +91,7 @@ Service=protonmail-bridge-smtp-proxy.service [Install] WantedBy=sockets.target EOF -cat <<'EOF'>/etc/systemd/system/protonmail-bridge-smtp-proxy.service +cat <<'EOF'> /etc/systemd/system/protonmail-bridge-smtp-proxy.service [Unit] Description=Proton Mail Bridge SMTP Proxy (587 -> 127.0.0.1:1025) After=protonmail-bridge.service @@ -109,7 +109,7 @@ msg_ok "Created Services" msg_info "Creating Helper Commands" -cat <<'EOF' > /usr/local/bin/protonmailbridge-configure +cat <<'EOF'> /usr/local/bin/protonmailbridge-configure #!/usr/bin/env bash set -euo pipefail From fc6cf2b11ec1807f8faa4dad3ef49e3be7805239 Mon Sep 17 00:00:00 2001 From: Stephen Chin Date: Tue, 10 Mar 2026 01:40:55 -0700 Subject: [PATCH 43/44] Fixed heredoc syntax --- install/protonmail-bridge-install.sh | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/install/protonmail-bridge-install.sh b/install/protonmail-bridge-install.sh index 973dfea1c..c5ef37d4a 100644 --- a/install/protonmail-bridge-install.sh +++ b/install/protonmail-bridge-install.sh @@ -51,7 +51,7 @@ ProtectControlGroups=yes [Install] WantedBy=multi-user.target EOF -cat <<'EOF'> /etc/systemd/system/protonmail-bridge-imap.socket +cat <<'EOF' >/etc/systemd/system/protonmail-bridge-imap.socket [Unit] Description=Proton Mail Bridge IMAP Socket (143) ConditionPathExists=/home/protonbridge/.protonmailbridge-initialized @@ -64,7 +64,7 @@ Service=protonmail-bridge-imap-proxy.service [Install] WantedBy=sockets.target EOF -cat <<'EOF'> /etc/systemd/system/protonmail-bridge-imap-proxy.service +cat <<'EOF' >/etc/systemd/system/protonmail-bridge-imap-proxy.service [Unit] Description=Proton Mail Bridge IMAP Proxy (143 -> 127.0.0.1:1143) After=protonmail-bridge.service @@ -78,7 +78,7 @@ ExecStart=/usr/lib/systemd/systemd-socket-proxyd 127.0.0.1:1143 NoNewPrivileges=yes PrivateTmp=yes EOF -cat <<'EOF'> /etc/systemd/system/protonmail-bridge-smtp.socket +cat <<'EOF' >/etc/systemd/system/protonmail-bridge-smtp.socket [Unit] Description=Proton Mail Bridge SMTP Socket (587) ConditionPathExists=/home/protonbridge/.protonmailbridge-initialized @@ -91,7 +91,7 @@ Service=protonmail-bridge-smtp-proxy.service [Install] WantedBy=sockets.target EOF -cat <<'EOF'> /etc/systemd/system/protonmail-bridge-smtp-proxy.service +cat <<'EOF' >/etc/systemd/system/protonmail-bridge-smtp-proxy.service [Unit] Description=Proton Mail Bridge SMTP Proxy (587 -> 127.0.0.1:1025) After=protonmail-bridge.service @@ -109,7 +109,7 @@ msg_ok "Created Services" msg_info "Creating Helper Commands" -cat <<'EOF'> /usr/local/bin/protonmailbridge-configure +cat <<'EOF' >/usr/local/bin/protonmailbridge-configure #!/usr/bin/env bash set -euo pipefail From c65429f2f8708a2218eb15df41ba9e307c647fbc Mon Sep 17 00:00:00 2001 From: Tobias <96661824+CrazyWolf13@users.noreply.github.com> Date: Tue, 10 Mar 2026 10:06:10 +0100 Subject: [PATCH 44/44] fix: correcting file write --- install/protonmail-bridge-install.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install/protonmail-bridge-install.sh b/install/protonmail-bridge-install.sh index c5ef37d4a..baba5dfe0 100644 --- a/install/protonmail-bridge-install.sh +++ b/install/protonmail-bridge-install.sh @@ -25,7 +25,7 @@ msg_ok "Created Service User" fetch_and_deploy_gh_release "protonmail-bridge" "ProtonMail/proton-bridge" "binary" msg_info "Creating Services" -cat < /etc/systemd/system/protonmail-bridge.service +cat </etc/systemd/system/protonmail-bridge.service [Unit] Description=Proton Mail Bridge (noninteractive) After=network-online.target