⟵ сюдатуда ⟶
  • Мастерклассы
  • Внешние подключения
  • Отправляем сообщение в Slack через n8n.io
  • Создаем и подключаем Telegram бота
  • Подключаемся к Yandex-переводчику
  • Получаем email по IMAP в Totum
  • Устанавливаем Mailcow как SMTP-сервер для Totum
  • Tableau и PowerBI
  • amoCRM
  • Битрикс 24
  • База знаний
  • Устанавливаем Mailcow как SMTP-сервер для Totum

    Устанавливаем mailcow

    Mailcow на GitHub

    Перед арендой виртуалки удостоверьтесь, что хостер разрешает исходящие соединения по 25 и 495 порту. Есть хостеры у которых невозможно развернуть SMTP-сервер. У остальных стандартной практикой является разблокировка порта по запросу в техподдержку!

    Эта инструкция написана и проверена для Ubuntu 24.04

    Создаем сервер не менее 2С х 4G х 20G SSD (mailcow будет потреблять 75% этого объема по памяти и диску).

    Смотрим что занимает 25 порт:

    ss -tulnp | grep :25
    

    Если вывод не пустой то запоминаем PID процесса.

    Смотрим что за процесс (подставляем запомненный PID):

    ps -p PID -o pid,ppid,user,stat,cmd
    

    Смотрим список сервисов и пытаемся понять, что нужно отключить на основе вывода предыдущей команды:

    systemctl list-units --type=service --state=running
    

    Если вы видите что типа:

    exim4.service # в этом случае название сервиса exim4
    
    postfix@-.service # в этом случае название сервиса postfix
    

    Отключаем (например postfix, вы подставляете то, что вы определили как занимающее 25 порт):

    systemctl disable postfix
    

    Проверяете:

    systemctl is-enabled postfix
    

    Проверяем повторно 25 порт:

    ss -tulnp | grep :25
    

    Вывод должен быть пустым!

    Адресуем на сервер smtp.YOUR_HOST домен.

    Устанавливаем ufw и разрешаем 22, 80 и 443 порты:

    apt install ufw
    
    ufw default deny incoming && ufw default allow outgoing && ufw allow 22/tcp && ufw allow 80/tcp && ufw allow 443/tcp
    

    Устанавливаем docker и docker-compose

    Предварительно смотрим номер релиза и заменяем 2.29.2 на номер последнего релиза:

    apt update && apt -y install software-properties-common git nano htop && apt update && apt -y install ca-certificates curl gnupg lsb-release && curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg && echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null && apt-get update && apt-get -y install docker-ce docker-ce-cli containerd.io && curl -L "https://github.com/docker/compose/releases/download/v2.29.2/docker-compose-linux-x86_64" -o /usr/local/bin/docker-compose && chmod +x /usr/local/bin/docker-compose && apt install docker-compose-plugin
    

    Устанавливаем в opt:

    cd /opt && git clone https://github.com/mailcow/mailcow-dockerized && cd mailcow-dockerized
    

    Генерируем конфиг:

    ./generate_config.sh
    

    Указываем домен без протокола, вводим timezone в формате Europe/London и выбираем stable вариант (цифра 1).

    Скачиваем контейнеры:

    docker compose pull
    

    Запускаем:

    docker compose up -d
    

    Ждем пока все создалось и запустилось и останавиваем:

    docker compose down
    

    Отключаем ipv6:

    Эта инструкция предполагает, что будем эксплуатировать по стандартному ipv4

    nano /opt/mailcow-dockerized/docker-compose.yml
    

    Ищем: Ctrl + Wenable_ipv6enter

    Изменяем на false и комментируем строку сети ipv6:

    networks:
      mailcow-network:
        [...]
        enable_ipv6: false # <<< set to false
        ipam:
          driver: default
          config:
            - subnet: ${IPV4_NETWORK:-172.22.1}.0/24
    #       - subnet: ${IPV6_NETWORK:-fd4d:6169:6c63:6f77::/64} # <<< comment out with #
        [...]
    

    Создаем дополнительный файл настроек (тк это yml то пробелы супер-важны! их нельзя просто так добавлять или удалять):

    nano /opt/mailcow-dockerized/docker-compose.override.yml
    
    services:
    
        ipv6nat-mailcow:
          image: bash:latest
          restart: "no"
          entrypoint: ["echo", "ipv6nat disabled in compose.override.yml"]
    

    Отключаем IPv6 в unbound-mailcow:

    nano /opt/mailcow-dockerized/data/conf/unbound/unbound.conf
    

    Ищем: Ctrl + Wdo-ip6enter

    Ставим no:

    server:
      [...]
      do-ip6: no # here put no
      [...]
    

    Отключаем IPv6 в postfix-mailcow:

    nano /opt/mailcow-dockerized/data/conf/postfix/extra.cf
    

    Добавляем строки:

    smtp_address_preference = ipv4
    inet_protocols = ipv4
    

    Корректируем конфиг Nginx, Dovecot и php-fpm:

    sed -i '/::/d' /opt/mailcow-dockerized/data/conf/nginx/listen_* && sed -i '/::/d' /opt/mailcow-dockerized/data/conf/nginx/templates/listen* && sed -i '/::/d' /opt/mailcow-dockerized/data/conf/nginx/dynmaps.conf && sed -i 's/,\[::\]//g' /opt/mailcow-dockerized/data/conf/dovecot/dovecot.conf && sed -i 's/\[::\]://g' /opt/mailcow-dockerized/data/conf/phpfpm/php-fpm.d/pools.conf
    

    Стартуем (по прежнему должны находится в папке cd /opt/mailcow-dockerized):

    docker compose up -d
    

    Смотрим лог получения SSL-сертификата:

    docker compose logs --tail=200 -f acme-mailcow
    

    Должны увидеть какие-то сообщение о получении сертификата нужно подождать пару минут!


    Оригинальная инструкция

    Оригинальная инструкция по сертификату


    Очистка логов docker

    Создаем в папке /opt/mailcow-dockerized скрипт clear_docker_logs.sh:

    nano /opt/mailcow-dockerized/clear_docker_logs.sh
    
    #!/bin/bash
    
    containers=(
      mailcowdockerized-olefy-mailcow-1
      mailcowdockerized-solr-mailcow-1
      mailcowdockerized-sogo-mailcow-1
      mailcowdockerized-memcached-mailcow-1
      mailcowdockerized-redis-mailcow-1
      mailcowdockerized-unbound-mailcow-1
      mailcowdockerized-watchdog-mailcow-1
      mailcowdockerized-dockerapi-mailcow-1
      mailcowdockerized-php-fpm-mailcow-1
      mailcowdockerized-clamd-mailcow-1
      mailcowdockerized-mysql-mailcow-1
      mailcowdockerized-dovecot-mailcow-1
      mailcowdockerized-postfix-mailcow-1
      mailcowdockerized-nginx-mailcow-1
      mailcowdockerized-acme-mailcow-1
      mailcowdockerized-netfilter-mailcow-1
      mailcowdockerized-rspamd-mailcow-1
      mailcowdockerized-ofelia-mailcow-1
      mailcowdockerized-ipv6nat-mailcow-1
    )
    
    for container in "${containers[@]}"; do
      sudo sh -c 'echo "" > $(docker inspect --format="{{.LogPath}}" '"$container"')'
    done
    

    Делаем исполняемым:

    chmod +x /opt/mailcow-dockerized/clear_docker_logs.sh
    

    Ставим на cron:

    crontab -e
    
    0 3 * * 0 /opt/mailcow-dockerized/clear_docker_logs.sh
    

    После запуска

    Идем в админ-панель по указанному при конфигурации домену: https://HOST

    Стандартный логин admin, пароль moohoo.

    Меняем пароль админа в systemconfiguration

    Добавляем домен и ящик:

    Для добавления нового почтового домена, переходим в в раздел ConfigurationMail Setup и нажимаем на зеленую кнопку + Add Domain.

    — домен = YOUR_EMAIL_DOMAIN

    — псевдонимов = 0

    — почтовых ящиков = 1

    — селектор = tcdkim

    Add domain and restart SOGo

    Настраиваем DNS:

    Напротив домена нажимаем DNS и видим таблицу настроек. Ожидаемые значения и значения, полученные сканером.

    Настраиваем на вашем DNS-сервере по рекомендациям.

    PTR-запись важна для почтовых серверов. Через нее владелец ip-пула как-бы подтверждает, что знает про ваш домен. Иногда ее изменение доступно через настройки виртуального сервера (например у https://vultr.com), но иногда нужно писать в поддержку хостера (https://netangels.ru).

    Значение SPF (замените YOUR_SMTP_IP на ip вашего сервера):

    v=spf1 ip4:YOUR_SMTP_IP ~all
    

    Значение DMARC записи:

    v=DMARC1; p=reject;
    

    Добавляем ящик на соседней вкладке:

    no-reply (стандарт) или totum-noreply (здесь рекомендуется вместо totum использовать ваше осмысленное название)

    — выбираем созданный ранее домен

    — создаем пароль

    — отключаем POP, IMAP и Sieve

    — Сохраняем

    Настраиваем отклонение всех входящих писем (только отправка)

    Идем в раздел EmailConfigerationFilters

    Коментируем # все строки в Global prefilter и добавляем в конец:

    require ["reject"];
    
    # Reject all incoming messages
    reject "This SMTP-server does not accept incoming messages!";
    
    

    Нажимаем Validate и потом Save changes.

    Таким образом сервер не будет засоряться входящими спам-сообщениями.

    Настраиваем Conf.php в Totum

    Настройки для emailSend

    В totum параметры smtp надо заполнить в таблице settings в поле custom_smtp_setings_for_schema:

    {
      "host": "ssl://smtp.gmail.com",
      "port": 465,
      "login": "totum@totum.online",
      "password": "password_here"
    }
    

    По умолчанию письма отправляются от адреса no-reply@HOST, но если вы создали другой ящик, или почтовый домен не совпадает с доменом установки Totum то надо указать полный адрес ящика в таблице settings в поле default_email.

    Если вы хотите задать для всех сехм на сервере жесткий smtp то:

    Заполняем в Conf.php параметры SMTP для всех схем:

    nano /home/totum/totum-mit/Conf.php
    

    Переключаем Conf.php на использование SMTP, закоментировав WithPhpMailerTrait и разкомментировав WithPhpMailerSmtpTrait — это отключает custom_smtp_setings_for_schema в таблице settings.

    Разкомментируйте параметры SMTP и заполните вашими данными:

     protected $SmtpData = [
                    'host' => 'ssl://smtp.ttmapp.ru',
                    'port' => 465,
                    'login' => 'no-reply@alliance.ttmapp.ru',
                    'pass' => 'CFbhNe3exyi2hdUfDq',
                ];
    

    Проверка письма на доставляемость

    Используйте https://www.mail-tester.com/ для проверки письма на доставляемость.

    Также рекомендуем включить PRO List-unsubscribe

    Лимит

    Если необходимо увеличить/уменьшить максимальный размер письма (по умолчанию 100 Mb в main.cf):

    nano /opt/mailcow-dockerized/data/conf/postfix/extra.cf
    

    Добавляем параметр:

    message_size_limit = LIMIT_IN_BYTES
    

    Потом необходимо рестартовать postfix:

    cd /opt/mailcow-dockerized && docker-compose restart postfix-mailcow