#!/bin/sh

mail_uid=${1:-"1"}

out_dir=${2:-/tmp/mail_dir}


host=${3:-astra17.k2}

user=${4:-petrov}

password=${5:-12345678}

folder="INBOX"

echo "unload_mail: ${mail_uid} ${out_dir} [${host} ${user} ${password}]"

export IMAP_UID="${mail_uid}"
export OUT_DIR="${out_dir}"
export IMAP_HOST="${host}"
export IMAP_USER="${user}"
export IMAP_PASS="${password}"
export IMAP_FOLDER="${folder}"


command='
import imaplib
import os
import sys


mail_uid = os.environ.get("IMAP_UID")
out_dir = os.environ.get("OUT_DIR")
host = os.environ.get("IMAP_HOST")
user = os.environ.get("IMAP_USER")
password = os.environ.get("IMAP_PASS")
folder = os.environ.get("IMAP_FOLDER")


if not os.path.exists(out_dir):
    os.makedirs(out_dir)

try:
    mail = imaplib.IMAP4(host) 
    mail.login(user, password)
    mail.select(folder)

    # Используем BODY.PEEK[], чтобы сервер НЕ ставил отметку "Прочитано"
    status, data = mail.uid("fetch", mail_uid, "(BODY.PEEK[])")
    
    if status == "OK" and data and isinstance(data[0],tuple):
        # data[0][1] содержит сырое тело письма в байтах
        raw_email = data[0][1]
        
        # Формируем путь для сохранения (например, /tmp/mail_dir/111.eml)
        filename = f"{mail_uid}.eml"
        filepath = os.path.join(out_dir, filename)
        
        with open(filepath, "wb") as f:
            f.write(raw_email)
            
        print(f"Письмо {mail_uid} успешно выгружено в {filepath}")
    else:
        print(f"unload_mail: Ошибка: Не удалось найти или скачать письмо с UID {mail_uid}", file=sys.stderr)
        mail.logout()
        sys.exit(1)

    mail.logout()
    sys.exit(0)

except Exception as e:
    print("unload_mail: Ошибка при работе с IMAP:", e, file=sys.stderr)
    sys.exit(1)
'




response=$(python3 -c "${command}")
r=$?
if [ $r -ne 0 ]; then
echo "unload_mail: Ошибка выгрузки uid=${mail_uid} ${response}"
exit $r
fi

echo "unload_mail: OK"
exit 0
