#!/bin/bash #=============================================================================== # ШАГ 13: НАСТРОЙКА ПОЧТЫ (msmtp) #=============================================================================== # Запуск: sudo bash 02-k-git-server-deploy.13.sh # # msmtp - легковесный SMTP-клиент для отправки почты через внешний сервер # Поддерживает: Gmail, Яндекс, Mail.ru, корпоративные SMTP #=============================================================================== SCRIPT_DIR=$(cd "$(dirname "$0")" && pwd) source "$SCRIPT_DIR/02-k-git-server-deploy.00.sh" init_log check_root print_header "ШАГ 13: НАСТРОЙКА ПОЧТЫ (msmtp)" #------------------------------------------------------------------------------- # 13.1 Информация #------------------------------------------------------------------------------- print_subheader "Информация о решении" echo "msmtp - легковесный SMTP-клиент (~0 MB RAM)" echo "" echo "Преимущества:" echo " - Минимальное потребление ресурсов" echo " - Отправка через надёжные внешние SMTP-серверы" echo " - Не нужен DKIM/SPF/DMARC для своего домена" echo " - Простая настройка" echo "" echo "Требуется внешний SMTP-сервер:" echo " - Gmail (требует App Password)" echo " - Яндекс.Почта" echo " - Mail.ru" echo " - Корпоративный SMTP" echo "" read -p "Продолжить настройку почты? [y/N]: " CONTINUE if [[ ! "$CONTINUE" =~ ^[Yy]$ ]]; then print_info "Настройка почты пропущена" exit 0 fi #------------------------------------------------------------------------------- # 13.2 Ввод параметров SMTP #------------------------------------------------------------------------------- print_subheader "Настройка SMTP" echo "Выберите SMTP-провайдера:" echo " 1) Gmail (требует App Password)" echo " 2) Яндекс.Почта" echo " 3) Mail.ru" echo " 4) Корпоративный SMTP" echo " 5) Пропустить (настроить позже)" echo "" read -p "Выбор [1-5]: " SMTP_CHOICE case $SMTP_CHOICE in 1) SMTP_HOST="smtp.gmail.com" SMTP_PORT="587" SMTP_TLS="on" SMTP_STARTTLS="on" read -p "Gmail адрес (user@gmail.com): " SMTP_USER read -s -p "App Password (16 символов): " SMTP_PASS echo "" SMTP_FROM="$SMTP_USER" ;; 2) SMTP_HOST="smtp.yandex.ru" SMTP_PORT="587" SMTP_TLS="on" SMTP_STARTTLS="on" read -p "Яндекс.Почта (user@yandex.ru): " SMTP_USER read -s -p "Пароль приложения: " SMTP_PASS echo "" SMTP_FROM="$SMTP_USER" ;; 3) SMTP_HOST="smtp.mail.ru" SMTP_PORT="587" SMTP_TLS="on" SMTP_STARTTLS="on" read -p "Mail.ru адрес (user@mail.ru): " SMTP_USER read -s -p "Пароль приложения: " SMTP_PASS echo "" SMTP_FROM="$SMTP_USER" ;; 4) read -p "SMTP хост: " SMTP_HOST read -p "SMTP порт [587]: " SMTP_PORT SMTP_PORT=${SMTP_PORT:-587} read -p "SMTP пользователь: " SMTP_USER read -s -p "SMTP пароль: " SMTP_PASS echo "" read -p "Email отправителя: " SMTP_FROM SMTP_TLS="on" SMTP_STARTTLS="on" ;; 5|*) print_info "Настройка почты отложена" echo "" echo "Для ручной настройки отредактируйте:" echo " /etc/msmtprc" echo " /etc/gitea/app.ini" exit 0 ;; esac #------------------------------------------------------------------------------- # 13.3 Установка msmtp #------------------------------------------------------------------------------- print_subheader "Установка msmtp" install_packages msmtp msmtp-mta mailutils print_success "msmtp установлен" #------------------------------------------------------------------------------- # 13.4 Создание конфигурации msmtp #------------------------------------------------------------------------------- print_subheader "Создание конфигурации msmtp" # Backup существующей конфигурации if [[ -f /etc/msmtprc ]]; then cp /etc/msmtprc /etc/msmtprc.backup.$(date +%Y%m%d_%H%M%S) fi cat > /etc/msmtprc << EOF # msmtp configuration for Git Server # Автоматически сгенерировано скриптом 02-k-git-server-deploy.13.sh # Общие настройки defaults auth on tls ${SMTP_TLS} tls_starttls ${SMTP_STARTTLS} tls_trust_file /etc/ssl/certs/ca-certificates.crt logfile /var/log/msmtp.log # Учётная запись по умолчанию account default host ${SMTP_HOST} port ${SMTP_PORT} user ${SMTP_USER} password ${SMTP_PASS} from ${SMTP_FROM} EOF # Права на файл (пароль!) chmod 600 /etc/msmtprc chown root:root /etc/msmtprc print_success "Конфигурация msmtp создана" #------------------------------------------------------------------------------- # 13.5 Настройка алиасов #------------------------------------------------------------------------------- print_subheader "Настройка алиасов" cat > /etc/aliases << EOF # Почтовые алиасы root: ${SMTP_FROM} git: ${SMTP_FROM} gitea: ${SMTP_FROM} EOF newaliases 2>/dev/null || true print_success "Алиасы настроены" #------------------------------------------------------------------------------- # 13.6 Создание лог-файла #------------------------------------------------------------------------------- print_subheader "Создание лог-файла" touch /var/log/msmtp.log chmod 644 /var/log/msmtp.log print_success "Лог-файл создан" #------------------------------------------------------------------------------- # 13.7 Тестовая отправка #------------------------------------------------------------------------------- print_subheader "Тестовая отправка письма" echo "" read -p "Email для тестовой отправки: " TEST_EMAIL if [[ -n "$TEST_EMAIL" ]]; then print_info "Отправка тестового письма на $TEST_EMAIL..." TEST_SUBJECT="Gitea Server Mail Test" TEST_BODY="This is a test email from Gitea Server ($(hostname)). Sent at: $(date) SMTP Host: $SMTP_HOST SMTP User: $SMTP_USER" if echo "$TEST_BODY" | mail -s "$TEST_SUBJECT" "$TEST_EMAIL"; then print_success "Письмо отправлено. Проверьте почтовый ящик $TEST_EMAIL" # Показать лог sleep 2 if [[ -s /var/log/msmtp.log ]]; then echo "" echo "Лог отправки:" tail -5 /var/log/msmtp.log fi else print_error "Ошибка отправки письма" echo "Проверьте лог: /var/log/msmtp.log" fi fi #------------------------------------------------------------------------------- # 13.8 Настройка Gitea #------------------------------------------------------------------------------- print_subheader "Настройка Gitea" if [[ -f "$GITEA_CONFIG" ]]; then # Backup cp "$GITEA_CONFIG" "${GITEA_CONFIG}.backup.$(date +%Y%m%d_%H%M%S)" # Обновить или добавить секцию [mailer] # Удаляем старую секцию mailer если есть sed -i '/^\[mailer\]/,/^\[/{/^\[mailer\]/d;/^\[/!d}' "$GITEA_CONFIG" 2>/dev/null || true # Добавляем новую секцию cat >> "$GITEA_CONFIG" << EOF [mailer] ENABLED = true PROTOCOL = sendmail SENDMAIL_PATH = /usr/bin/msmtp SENDMAIL_ARGS = "-t" FROM = $SMTP_FROM SUBJECT_PREFIX = [Gitea] EOF print_success "Конфигурация Gitea обновлена" # Перезапуск Gitea read -p "Перезапустить Gitea? [Y/n]: " RESTART_GITEA RESTART_GITEA=${RESTART_GITEA:-Y} if [[ "$RESTART_GITEA" =~ ^[Yy]$ ]]; then systemctl restart gitea print_success "Gitea перезапущена" fi else print_warning "Конфигурация Gitea не найдена: $GITEA_CONFIG" fi #------------------------------------------------------------------------------- # 13.9 Итог #------------------------------------------------------------------------------- echo "" echo -e "${GREEN}============================================================${NC}" echo -e "${GREEN} ПОЧТОВЫЙ СЕРВЕР НАСТРОЕН${NC}" echo -e "${GREEN}============================================================${NC}" echo "" echo "SMTP сервер: $SMTP_HOST:$SMTP_PORT" echo "Пользователь: $SMTP_USER" echo "Отправитель: $SMTP_FROM" echo "" echo "Файлы конфигурации:" echo " msmtp: /etc/msmtprc" echo " aliases: /etc/aliases" echo " log: /var/log/msmtp.log" echo "" echo "Тест отправки:" echo " echo 'Test body' | mail -s 'Test subject' user@example.com" echo "" echo "Gitea настройки:" echo " Mailer включён, использует msmtp" echo "" print_success "Шаг 13 завершён: Почта настроена"