shutdown linux server by mail

by emre - 13.03.2025



important note
this is a template for shutting down linux server by mail. it's not recommended to use as is on production environments.

install isync package to get mails.
apt update; apt install -y isync

customize settings by execute nano .mbsyncrc (or with your favorite editor) at ~.
Expunge Both
SyncState *

IMAPAccount 
Host  #mine is mail.zurrak.com
User @domain.tld
Pass ""
SSLType IMAPS
SSLLevel 2
Port 993

IMAPStore user-remote
Account 

MaildirStore user-local
Subfolders Verbatim
Path ~/mail/
Inbox ~/mail//inbox

Channel user-default
Master :user-remote:
Slave :user-local:
Patterns *
Create Both
SyncState *
Sync All

Group user
Channel user-default

put this bash script to somewhere. you'll need its path for service. mine is at ~.
#!/bin/bash

dir="/root/mail//inbox/new"
from="@domain.tld"
to="@domain.tld"
command="" #it can be "shutdown" or more secure, "shutdown hbehehe". it's to be grepped so just put what you want to send mail to shutdown.

if [ -z "$(ls -A "$dir")" ]; then
    mbsync -a
    sleep 3
fi

attempts=3
while [ $attempts -gt 0 ]; do
    inbox=$(find "$dir" -type f -mmin -2)
    if [ -n "$inbox" ]; then
        break
    fi
    sleep 10
    ((attempts--))
done

for mail in $inbox; do
    if grep -q "$from" "$mail" && grep -q "$to" "$mail" && grep -q "$command" "$mail"; then
        rm -rf "$dir"/*
        shutdown -h now
    fi
done

creating service by nano /etc/systemd/system/shutdownbymail.service. shutdownbymail.service content below.
[Unit]
Description=shutdownbymail

[Service]
User=root
WorkingDirectory=/var/www/html/
ExecStart=/root/shutdownbymail.sh
Restart=always
RestartSec=3

[Install]
WantedBy=multi-user.target

after than that, execute systemctl daemon-reload, systemctl enable shutdownbymail.service and systemctl restart shutdownbymail.service.

let's roll!

if you have questions: contact