[[Yggmail]]
 

Yggmail

Это электронная почта, но немного не такая, какой вы ее знаете.

В мире существует множество всевозможных служб обмена сообщениями, но асинхронная связь по-прежнему востребована и широко распространена. Yggmail разработан в соответствии со стандартами, которые большинству людей хорошо знакомы и понятны.

Yggdrasil хорошо подходит для доставки электронной почты и позволяет Yggmail работать даже в закрытых сетях, где Интернет или другие возможности подключения ограничены или просто недоступны. Yggmail гарантирует сквозное шифрование и достаточно хорошо работает в сетях с изменчивой топологией.

Введение

Yggmail - это агент электронной почты, реализованный в одном бинарном файле, который может отправлять и получать сообщения через сеть Yggdrasil.

  • Yggmail можно запустить где угодно — ваш почтовый ящик сохраняется прямо на вашей машине;
  • Реализованы протоколы IMAP и SMTP для отправки и получения почты, таким образом, вы можете использовать свои любимые почтовые клиенты;
  • Для обмена сообщениями Yggmail использует подключения встроенного в него узла Yggdrasil;
  • Обмен сообщениями между двумя узлами Yggmail всегда защищен сквозным шифрованием;
  • Узлы Yggdrasil и Yggmail в одной и той же сети могут обнаруживаются автоматически с помощью отправки широковещательных пакетов (multicast), либо вы можете настроить статическое подключение к желаемым узлам Yggdrasil.
  • Yggmail содержит в себе собственный узел Yggdrasil, но не использует отдельный TUN-адаптер, таким образом, Yggmail можно без проблем запускать на машине, где уже установлен и настроен сам Yggdrasil, а так же на машинах, где Yggdrasil не установлен (Yggmail не использует IP-пакеты, поэтому TUN не нужен; встроенный узел Yggdrasil используется в качестве транспорта, SMTP использует uTP).

Адреса электронной почты формируются на основе ваших публичных ключей. Пример:
617b5772c6d10feda41fc6e0e43b976c4cc9383d3729310d3dc9e1332f0d9acd@yggmail.

Быстрый старт

Используйте последнюю версию Go для установки Yggmail:

go install github.com/neilalexander/yggmail/cmd/yggmail@latest

(подробнее об установке или обновлении Go можно прочесть здесь)

Yggmail будет установлен в директорию, указанную в переменной окружения GOPATH, для удобства вы можете указать этот путь в переменной PATH:

export PATH=$PATH:`go env GOPATH`/bin

Создайте свой почтовый ящик и установите пароль. База данных Yggmail будет автоматически создана в вашей рабочей директории, если она еще не существует:

yggmail -password

Запустите Yggmail, используя созданную в рабочей директории базу данных, указав при запуске либо multicast, либо статический узел Yggdrasil, либо и то и другое:

yggmail -multicast
yggmail -peer=tls://...
yggmail -multicast -peer=tls://...

Адрес вашей электронной почты будет выведен в log при запуске Yggmail. Так же, этот адрес необходимо будет использовать в качестве имени пользователя для подключений SMTP/IMAP.

Подключитесь к Yggmail с помощью вашего почтового клиента. Примеры параметров подключения:

  • SMTP прослушивает TCP-порт 1025, имя пользователя - ваш адрес, аутентификация по паролю простым текстом, не использовать SSL/TLS
  • IMAP прослушивает TCP-порт 1143, имя пользователя - ваш адрес, аутентификация по паролю простым текстом, не использовать SSL/TLS

Теперь вы можете попробовать отправить электронное письмо другому пользователю Yggmail!

Параметры запуска

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

  • -peer=tls://... or -peer=tcp://... — подключение к указанному узлу Yggdrasil, подобно тому, как настраивается подключение к публичному пиру;
  • -multicast - задействовать multicast peer discovery (автоматическое обнаружение) для узлов Yggdrasil в вашей локальной сети;
  • -database=/path/to/yggmail.db — использовать указанный файл базы данных;
  • -smtp=listenaddr:port — ожидать подключения SMTP на указанных адресе/порте;
  • -imap=listenaddr:port — ожидать подключения IMAP на указанных адресе/порте;
  • -password — установить IMAP/SMTP пароль (не имеет значения запущен Yggmail или нет, просто убедитесь, что Yggmail работает с нужной базой данных или что вы находитесь в нужной рабочей директории).

Пример

При запуске на локальном компьютере без Yggdrasil, достаточно указать один пир (а в настройках почтового клиента - localhost):

yggmail -peer=tls://94.140.114.89:4708

Так можно запустить Yggmail, чтобы он был доступен для подключения по SMTP / IMAP из локальной сети:

yggmail -peer=tls://192.168.1.4:22953 -database=/home/user/go/bin/yggmail.db -smtp=192.168.1.4:1025 -imap=192.168.1.4:1143

Здесь:

  • 192.168.1.4 - адрес в локальной сети устройства, на котором запускается Yggmail (в моём случае, это RaspberryPi); на этом же устройстве запущен пир Yggdrasil, который принимает подключения на порту 22953.
  • /home/user/go/bin/yggmail.db - путь к локальной базе Yggmail (см. выше)

Таким образом мы подключаем Yggmail к нашему пиру Yggdrasil и открываем на этом устройстве в локальной сети порты 1025 и 1143.

На любом другом устройстве в этой локальной сети настраиваем почтовый клиент (например, Thunderbird (notebook) или Почта (iPhone)) для подключения к получившемуся мини почтовому серверу, указав в настройках адрес 192.168.1.4 и соответствующие порты для SMTP и IMAP протоколов: 1025 и 1143.

В дальнейшем работаем, как с любой другой почтой на других серверах.

В этом примере -peer=tls://192.168.1.4:22953 можно заменить на -multicast, тогда Yggmail будет пытаться сам найти Yggdrasil в локальной сети с помощью отправки широковещательных пакетов.

Пример systemd-unit'a для запуска yggmail:

[Unit]
Description=Yggmail
Documentation=https://github.com/neilalexander/yggmail
After=network-online.target

[Service]
Type=simple
ExecStart=/home/user/go/bin/yggmail -peer=tcp://192.168.1.4:22953 -database=/home/user/go/bin/yggmail.db -smtp=192.168.1.4:1025 -imap=192.168.1.4:1143 2>&1
Restart=always
RestartSec=1
TimeoutStopSec=0

[Install]
WantedBy=multi-user.target

Unit нужно сохранить в файл /lib/systemd/system/yggmail.service и выполнить команду: sudo systemctl enable --now yggmail (не забудьте указать корректные пути к yggmail и yggmail.db).
Если все сделано правильно systemctl status yggmail покажет: «Active (running)».

Таким же образом можно установить и запустить Yggmail на VPS [cо статическим («белым») IP-адресом], тогда этот почтовый сервер может стать доступным не только из локальной сети, но и через Интернет, и вы сможете отправлять и получать почту Yggmail со смартфона, находясь, где угодно, имея любое подключение к Интернет. Дополнительно соединения и аутентификацию на SMTP / IMAP можно защитить c помощью VPN.

C учетом описанных ниже ограничений Yggmail [на данный момент] больше подходит для использования с мессенджером Delta Chat, однако другие e-mail клиенты так же можно настроить для работы с ним.

Пример настроек Delta Chat

Мессенджер доступен для популярных настольных операционных систем, а так же для iOS и Android. Ниже пример настроек клиента iOS, с учетом описанного выше.

Параметр Значение
Адрес эл. почты 36ef9bc3a91ffbcc511b33faa3bb72b31c140f18e3ef143559a0128be440de49@yggmail
Пароль *** (ваш пароль)
Дополнительные параметры
Параметры безопасности IMAP Выкл.
IMAP логин 36ef9bc3a91ffbcc511b33faa3bb72b31c140f18e3ef143559a0128be440de49@yggmail
IMAP сервер 192.168.1.4
IMAP порт 1143
Параметры безопасности SMTP Выкл.
SMTP логин 36ef9bc3a91ffbcc511b33faa3bb72b31c140f18e3ef143559a0128be440de49@yggmail
SMTP пароль *** (ваш пароль)
SMTP сервер 192.168.1.4
SMTP порт 1025
Проверка сертификатов Принимать недействительный

Настройки Delta Chat

Пример настроек аккаунта электронной почты в Mozilla Thunderbird

Настройки аккаунта Yggmail в Mozilla Thunderbird

Для настроенного аккаунта можно в его свойствах задать отображаемое имя (Account Name), чтобы выглядело примерно так:

Как выглядит аккаунт в Thunderbird

Резервные копии

Чтобы полностью сохранить копию аккаунта и почтовые сообщения для переноса или восстановления - достаточно скопировать файл, указанный при инициализации сервера:

yggmail -database=/path/to/yggmail.db

Если данный путь не указан явно, файл можно найти в домашней директории профиля.

Приватный ключ (private_key) и хеш пароля (password) расположены в таблице config.

Также нужно отдельно сохранить пароль инициализации базы данных (при выполнении команды yggmail -password), поскольку в исходном виде он не сохраняется.

Замечания

Несколько важных замечаний:

  • Yggmail должен быть запущен, чтобы была возможность получать входящие сообщения. По этой причине важно запускать Yggmail там, где он будет запущен постоянно, 24/7 [ возможно, информация устарела ];
  • Yggmail пытается гарантировать, что отправители - это те, за кого они себя выдают, поэтому заголовок 'From address' в отправляемых сообщениях должен соответствовать вашему Yggmail-адресу;
  • Вы можете обмениваться сообщениями только с другими пользователями Yggmail, обычные адреса электронной почты в Интернет и других сетях не поддерживаются;
  • Вы должны настроить свой почтовый клиент так, чтобы он использовал «insecure» (небезопасную) или «plaintext» (простым текстом) аутентификацию для IMAP/SMTP — это потому, что мы не используем SSL/TLS для IMAP/SMTP-протоколов, трафик Yggdrasil зашифрован;
  • На данный момент Yggmail поддерживает отправку сообщений, объемом не более 1MB.
  • Попытка отправить тестовое письмо на собственный адрес приведет к ошибке (#33, #35)

Известные проблемы

Вероятно, Yggmail содержит большее количество багов, ниже упомянуты пара из них:

  • Поведение IMAP может не вполне соответствовать спецификации в некоторых случаях, таким образом, в различных почтовых клиентах могут наблюдаться различные проблемы;
  • Поиск в IMAP на данным момент не реализован полностью и вместо этого будет возвращать все известные адреса.

Так же, код немного запутан, простите нас за это ;) (neilalexander)

Адреса пользователей

Желающие могут оставить здесь свой адрес, чтобы другие пользователи могли его найти и связаться с вами.
(если в таблице наберется большое количество контактов, перенесём её на отдельную страницу, а здесь оставим ссылку)

Никнейм / Имя Адрес
TomasGl f6065c4d768d5b40e40c942ca77bd40079ed3cc2df266562b9f4546ebe2c13d6@yggmail
BiGLapa b6c2beb9ed1d8847bd5dba85d0623200435625fb2f9e155b8dd703a53b8c734d@yggmail

Ссылки

Репозиторий проекта на GitHub: https://github.com/neilalexander/yggmail

Обсуждение

d4708, 2023/09/19 20:12
Как-то не разу не довелось попробовать

В чем основное преимущество использования yggmail вместо обычного почтового сервера посредством yggdrasil?

newbie, 2023/09/19 23:16
Децентрализация. Здесь вы не будете зависеть от работы какого-то центрального сервера.

Однако, на данный момент, в этой реализации есть пара недостатков:
- yggmail получателя должен быть обязательно в сети на момент отправки ему сообщения, иначе сообщение уйдет в небытие и ни получатель, ни отправитель об этом не узнают
- ограничение на объем сообщения - 1 мб

Если это поправят, это будет отличная штука.

d4708, 2023/09/19 23:35, 2023/09/19 23:36
Ну если нужен онлайн 2/2 точек, то это не совсем децентрализованный севис.. может другие узлы там только как транзитные

> - yggmail получателя должен быть обязательно в сети на момент отправки ему сообщения, иначе сообщение уйдет в небытие и ни получатель, ни отправитель об этом не узнают

здесь конечно нужен какой то протокол ответа получателя, повторная попытка отправки со стороны клиента отправителя
еще и объем 1 мб, ладно Bitmessage, где все перебирают общую свалку хешей своим ключем, но там вроде как не уходило в небытие сообщение, некоторое время

вообще доставка это во всех безсерверных клиентах трабла, так и не нашел удобной альтернативы почте и комбайну thunderbird.
дельтачат интересен, но пока не потянул нагрузки в рабочих переписках - плохо переваривает сообщения с html и тд

newbie, 2023/09/19 23:53
> Ну если нужен онлайн 2/2 точек, то это не совсем децентрализованный севис.. может другие узлы там только как транзитные

Ну, почему же? Как раз децентрализация.
Для того, чтобы Пете отправить сообщение Васе, нужно чтобы и у Пети, и у Васи были запущены yggmail. Всё, никаких центральных серверов. Письма хранятся в базе SQLite на устройстве с yggmail.

d4708, 2023/11/15 14:20
Думаю сделать внутресетевой почтовый адрес.

Насколько понимаю, с помощью Postfix можно сделать адрес вида user@[ipv6], отправляться и приниматься само собой будет только на клиенте и сервере с предустановленным Yggdrasil

Тут начал сомневаться, не использовать ли Yggmail, но не вижу преимуществ - по сути такой же SMTP сервер, точно также требует аптайм, только запускает еще один инстанс Yggdrasil и расходует ресурс, при этом требует от других использование того же софта, вместо универсальных протоколов

Даже не знаю, вопрос давний, интересный но с какой стороны подходить.. жаль что у Tutanota закрытый сервер-сайд, внутрисетевой почтовый сервер с JS шифрованием был бы к стати.

d4708, 2023/11/18 13:28
Пробую настроить, клиент вроде подключил, но при отправке сервер Yggmail пишет:
error: smtp.NewClient: Application error 0x0 (remote): Connection replaced

Тестовое сообщение отправляю на тот же Yggmail адрес.

d4708, 2024/02/07 00:50
Сообщения себе нельзя пока что отправлять, дополню материал

Тикеты #33 #35

d4708, 2024/02/07 00:49, 2024/02/07 00:57
> Yggmail должен быть запущен, чтобы была возможность получать входящие сообщения. По этой причине важно запускать Yggmail там, где он будет запущен постоянно, 24/7;

Мне видится не критически важным держать сервер 24/7, возможно информация устарела, так как сообщение сохраняется в таблице queue (SQLite) до тех пор, пока не будет отправлено.

Не редактирую в виду отсутствия опыта в использовании, только добавил аннотацию.

d4708, 2024/02/07 01:18, 2024/02/07 01:19
Добавил самый простой пример для локалхоста с одним пиром, но мультикаст не тестировал.

Не понимаю как сервер узнает о публичных пирах, если локально не запущен уже настроенный Yggdrasil?

Fyodor Ustinov, 2024/02/07 03:49
А почему ты решил, что он о них узнаёт?
Только авторизованные участники могут оставлять комментарии.
yggdrasil/email/yggmail.txt · Последнее изменение: 2024/02/07 01:08 — d4708
 
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki