#!/bin/bash

# Удаляем sendmail, если установлен
echo "Удаление sendmail..."
rpm -e --nodeps sendmail

# Устанавливаем Postfix и необходимые пакеты
echo "Установка Postfix и необходимых пакетов..."
yum install -y postfix cyrus-sasl cyrus-sasl-lib cyrus-sasl-plain

# Перекомпилируем базу алиасов
echo "Перекомпиляция базы алиасов..."
cd /etc
newaliases

# Изменяем sendmail_path в /etc/php.d/bitrixenv.ini
echo "Изменение sendmail_path в /etc/php.d/bitrixenv.ini..."
sed -i 's|^sendmail_path.*|sendmail_path = /usr/sbin/sendmail -t -i|' /etc/php.d/bitrixenv.ini

# Резервное копирование конфигурационного файла Postfix
cp /etc/postfix/main.cf /etc/postfix/main.cf.bak

# Настройка Postfix: добавление новых параметров и удаление дублирующих
echo "Настройка конфигурации Postfix..."

# Комментируем старые параметры и добавляем новые
sed -i 's/^smtp_sender_dependent_authentication.*$/#&/' /etc/postfix/main.cf
sed -i 's/^sender_dependent_relayhost_maps.*$/#&/' /etc/postfix/main.cf
sed -i 's/^relayhost.*$/#&/' /etc/postfix/main.cf
sed -i 's/^smtp_sasl_auth_enable.*$/#&/' /etc/postfix/main.cf
sed -i 's/^smtp_sasl_password_maps.*$/#&/' /etc/postfix/main.cf
sed -i 's/^smtp_sasl_security_options.*$/#&/' /etc/postfix/main.cf
sed -i 's/^smtp_tls_CAfile.*$/#&/' /etc/postfix/main.cf
sed -i 's/^smtp_use_tls.*$/#&/' /etc/postfix/main.cf
sed -i 's/^smtp_tls_security_level.*$/#&/' /etc/postfix/main.cf
sed -i 's/^inet_protocols.*$/#&/' /etc/postfix/main.cf

# Добавляем новые параметры
cat >> /etc/postfix/main.cf <<EOL

# Аутентификация отправителя
smtp_sender_dependent_authentication = yes
sender_dependent_relayhost_maps = hash:/etc/postfix/sender_relay

# Релей хост по умолчанию
relayhost = [smtp.mail.ru]:465

# SMTP аутентификация
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options = noanonymous
smtp_sasl_mechanism_filter = plain

# TLS настройки
smtp_tls_CAfile = /etc/pki/tls/certs/ca-bundle.crt
smtp_use_tls = yes
smtp_tls_wrappermode = yes
smtp_tls_security_level = encrypt

inet_protocols = ipv4
EOL

# Создание или очистка файлов /etc/postfix/sender_relay и /etc/postfix/sasl_passwd
echo "Очистка существующих файлов..."
> /etc/postfix/sender_relay
> /etc/postfix/sasl_passwd

# Функция для добавления почтового аккаунта
add_mail_account() {
  echo "Введите адрес электронной почты:"
  read EMAIL
  echo "Введите пароль для $EMAIL:"
  read -s PASSWORD

  # Сохраняем данные во временные массивы
  MAIL_ACCOUNTS+=("$EMAIL [smtp.mail.ru]:465")
  MAIL_PASSWORDS+=("$EMAIL $EMAIL:$PASSWORD")
}

# Основной цикл для добавления аккаунтов
MAIL_ACCOUNTS=()
MAIL_PASSWORDS=()
while true; do
  add_mail_account

  echo "Добавить еще один почтовый аккаунт? (yes/no)"
  read ANSWER
  if [[ "$ANSWER" != "yes" ]]; then
    break
  fi
done

# Запись данных из массивов в файлы
for i in "${!MAIL_ACCOUNTS[@]}"; do
  echo "${MAIL_ACCOUNTS[$i]}" >> /etc/postfix/sender_relay
  echo "${MAIL_PASSWORDS[$i]}" >> /etc/postfix/sasl_passwd
done

# Преобразуем файлы в формат, используемый Postfix
echo "Преобразование файлов в бинарный формат..."
postmap /etc/postfix/sender_relay
postmap /etc/postfix/sasl_passwd

# Включаем автозапуск и перезапускаем Postfix
echo "Включение автозапуска и перезапуск Postfix..."
systemctl enable postfix
systemctl restart postfix

# Настройка ограничений для хостов
echo "Настройка ограничения для хостов..."
cat > /etc/postfix/mynetworks <<EOL
127.0.0.1
EOL

# Устанавливаем настройки для mynetworks
echo "Настройка mynetworks..."
sed -i 's|^mynetworks.*|mynetworks = hash:/etc/postfix/mynetworks|' /etc/postfix/main.cf

# Преобразуем файл mynetworks в бинарный формат
postmap /etc/postfix/mynetworks

# Перезапуск Postfix
echo "Перезапуск Postfix..."
systemctl restart postfix

# Раскомментируем нужные строки в master.cf
echo "Настройка /etc/postfix/master.cf..."
sed -i 's/^#smtp      inet  n       -       n       -       -       smtpd$/smtp      inet  n       -       n       -       -       smtpd/' /etc/postfix/master.cf
sed -i 's/^#submission inet n       -       n       -       -       smtpd$/submission inet n       -       n       -       -       smtpd/' /etc/postfix/master.cf
sed -i 's/^#  -o smtpd_sasl_auth_enable=yes$/  -o smtpd_sasl_auth_enable=yes/' /etc/postfix/master.cf
sed -i 's/^#smtps     inet  n       -       n       -       -       smtpd$/smtps     inet  n       -       n       -       -       smtpd/' /etc/postfix/master.cf
sed -i 's/^#  -o smtpd_tls_wrappermode=yes$/  -o smtpd_tls_wrappermode=yes/' /etc/postfix/master.cf
sed -i 's/^#  -o smtpd_sasl_auth_enable=yes$/  -o smtpd_sasl_auth_enable=yes/' /etc/postfix/master.cf

# Перезапуск Postfix для применения изменений в master.cf
echo "Перезапуск Postfix..."
systemctl restart postfix

# Проверка логов
echo "Проверьте логи почты в /var/log/maillog для диагностики."
