2024-02-10 12:53:55 +00:00

186 lines
18 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

====== Yggmail ======
Это [[yggdrasil:email|электронная почта]], но немного не такая, какой вы ее знаете.
В мире существует множество всевозможных служб обмена сообщениями, но асинхронная связь по-прежнему востребована и широко распространена. Yggmail разработан в соответствии со стандартами, которые большинству людей хорошо знакомы и понятны.
[[Yggdrasil:Yggdrasil]] хорошо подходит для доставки электронной почты и позволяет Yggmail работать даже в закрытых сетях, где Интернет или другие возможности подключения ограничены или просто недоступны. Yggmail гарантирует сквозное шифрование и достаточно хорошо работает в сетях с изменчивой топологией.
===== Введение =====
**Yggmail** - это агент электронной почты, реализованный в одном бинарном файле, который может отправлять и получать сообщения через сеть [[Yggdrasil:Yggdrasil]].
* Yggmail можно запустить где угодно — ваш почтовый ящик сохраняется прямо на вашей машине;
* Реализованы протоколы IMAP и SMTP для отправки и получения почты, таким образом, вы можете использовать свои любимые почтовые клиенты;
* Для обмена сообщениями Yggmail использует подключения встроенного в него узла Yggdrasil;
* Обмен сообщениями между двумя узлами Yggmail всегда защищен сквозным шифрованием;
* Узлы Yggdrasil и Yggmail в одной и той же сети могут обнаруживаются автоматически с помощью отправки широковещательных пакетов ([[yggdrasil:mpd|multicast]]), либо вы можете настроить статическое подключение к желаемым узлам Yggdrasil.
* Yggmail содержит в себе собственный узел Yggdrasil, но не использует отдельный TUN-адаптер, таким образом, Yggmail можно без проблем запускать на машине, где уже установлен и настроен сам Yggdrasil, а так же на машинах, где Yggdrasil не установлен (Yggmail не использует IP-пакеты, поэтому TUN не нужен; встроенный узел Yggdrasil используется в качестве транспорта, SMTP использует uTP).
Адреса электронной почты формируются на основе ваших публичных ключей. Пример: \\ ''%%617b5772c6d10feda41fc6e0e43b976c4cc9383d3729310d3dc9e1332f0d9acd@yggmail%%''.
===== Быстрый старт =====
Используйте последнюю версию [[go:go|Go]] для установки Yggmail:
<code>go install github.com/neilalexander/yggmail/cmd/yggmail@latest</code>
(подробнее об установке или обновлении Go можно прочесть [[go:go_installation|здесь]])
Yggmail будет установлен в директорию, указанную в переменной окружения GOPATH, для удобства вы можете указать этот путь в переменной PATH:
<code>export PATH=$PATH:`go env GOPATH`/bin</code>
Создайте свой почтовый ящик и установите пароль. База данных Yggmail будет автоматически создана в вашей рабочей директории, если она еще не существует:
<code>yggmail -password</code>
Запустите Yggmail, используя созданную в рабочей директории базу данных, указав при запуске либо multicast, либо статический узел Yggdrasil, либо и то и другое:
<code>yggmail -multicast
yggmail -peer=tls://...
yggmail -multicast -peer=tls://...</code>
Адрес вашей электронной почты будет выведен в log при запуске Yggmail. Так же, этот адрес необходимо будет использовать в качестве имени пользователя для подключений SMTP/IMAP.
Подключитесь к Yggmail с помощью вашего почтового клиента. Примеры параметров подключения:
* SMTP прослушивает TCP-порт 1025, имя пользователя - ваш адрес, аутентификация по паролю простым текстом, не использовать SSL/TLS
* IMAP прослушивает TCP-порт 1143, имя пользователя - ваш адрес, аутентификация по паролю простым текстом, не использовать SSL/TLS
Теперь вы можете попробовать отправить электронное письмо другому пользователю Yggmail!
===== Параметры запуска =====
Поддерживаются следующие параметры командной строки:
* ''%%-peer=tls://... or -peer=tcp://...%%'' — подключение к указанному узлу Yggdrasil, подобно тому, как настраивается подключение к [[yggdrasil:public_peer|публичному пиру]];
* ''%%-multicast%%'' - задействовать multicast peer discovery (автоматическое обнаружение) для узлов Yggdrasil в вашей локальной сети;
* ''%%-database=/path/to/yggmail.db%%'' — использовать указанный файл базы данных;
* ''%%-smtp=listenaddr:port%%'' — ожидать подключения SMTP на указанных адресе/порте;
* ''%%-imap=listenaddr:port%%'' — ожидать подключения IMAP на указанных адресе/порте;
* ''%%-password%%'' — установить IMAP/SMTP пароль (не имеет значения запущен Yggmail или нет, просто убедитесь, что Yggmail работает с нужной базой данных или что вы находитесь в нужной рабочей директории).
===== Пример =====
При запуске на локальном компьютере без Yggdrasil, достаточно указать один [[https://publicpeers.neilalexander.dev/|пир]] (а в настройках почтового клиента - localhost):
<code>yggmail -peer=tls://94.140.114.89:4708</code>
Так можно запустить Yggmail, чтобы он был доступен для подключения по SMTP / IMAP из локальной сети:
<code>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</code>
Здесь:
* 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:
<code>
[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
</code>
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#Замечания|ограничений]] Yggmail [на данный момент] больше подходит для использования с мессенджером [[https://delta.chat/ru/|Delta Chat]], однако другие e-mail клиенты так же можно настроить для работы с ним.
==== Пример настроек Delta Chat ====
Мессенджер доступен для популярных настольных операционных систем, а так же для [[wpru>IOS|iOS]] и [[wpru>Android]]. Ниже пример настроек клиента iOS, с учетом описанного выше.
<WRAP group>
<WRAP column>
^ Параметр ^ Значение ^
| Адрес эл. почты | 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 |
| Проверка сертификатов| Принимать недействительный |
</WRAP>
<WRAP column>
{{ yggdrasil:email:deltachat_settings.png?183&direct|Настройки Delta Chat }}
</WRAP>
</WRAP>
==== Пример настроек аккаунта электронной почты в Mozilla Thunderbird ====
{{yggdrasil:email:yggmail_tb_acc_settings.png?350&direct|Настройки аккаунта Yggmail в Mozilla Thunderbird}}
Для настроенного аккаунта можно в его свойствах задать отображаемое имя (Account Name), чтобы выглядело примерно так:
{{yggdrasil:email:yggmail_tb_acc_view.png?350&direct|Как выглядит аккаунт в Thunderbird}}
===== Резервные копии =====
Чтобы полностью сохранить копию аккаунта и почтовые сообщения для переноса или восстановления - достаточно скопировать файл, указанный при инициализации сервера:
<code>yggmail -database=/path/to/yggmail.db</code>
Если данный путь не указан явно, файл можно найти в домашней директории профиля.
Приватный ключ (private_key) и хеш пароля (password) расположены в таблице config.
Также нужно отдельно сохранить пароль инициализации базы данных (при выполнении команды yggmail -password), поскольку в исходном виде он не сохраняется.
===== Замечания =====
Несколько важных замечаний:
* Yggmail должен быть запущен, чтобы была возможность получать входящие сообщения. По этой причине важно запускать Yggmail там, где он будет запущен постоянно, 24/7 [ //возможно, информация [[https://github.com/neilalexander/yggmail/issues/1#issuecomment-1930768430|устарела]]// ];
* Yggmail пытается гарантировать, что отправители - это те, за кого они себя выдают, поэтому заголовок 'From address' в отправляемых сообщениях должен соответствовать вашему Yggmail-адресу;
* Вы можете обмениваться сообщениями только с другими пользователями Yggmail, обычные адреса электронной почты в Интернет и других сетях не поддерживаются;
* Вы должны настроить свой почтовый клиент так, чтобы он использовал "insecure" (небезопасную) или "plaintext" (простым текстом) аутентификацию для IMAP/SMTP — это потому, что мы не используем SSL/TLS для IMAP/SMTP-протоколов, трафик Yggdrasil зашифрован;
* На данный момент Yggmail поддерживает отправку сообщений, объемом не более 1MB.
* Попытка отправить тестовое письмо на собственный адрес приведет к ошибке ([[https://github.com/neilalexander/yggmail/issues/33|#33]], [[https://github.com/neilalexander/yggmail/issues/35|#35]])
===== Известные проблемы =====
Вероятно, Yggmail содержит большее количество багов, ниже упомянуты пара из них:
* Поведение IMAP может не вполне соответствовать спецификации в некоторых случаях, таким образом, в различных почтовых клиентах могут наблюдаться различные проблемы;
* Поиск в IMAP на данным момент не реализован полностью и вместо этого будет возвращать все известные адреса.
Так же, код немного запутан, простите нас за это ;) ([[https://github.com/neilalexander|neilalexander]])
===== Адреса пользователей =====
Желающие могут оставить здесь свой адрес, чтобы другие пользователи могли его найти и связаться с вами. \\
(если в таблице наберется большое количество контактов, перенесём её на отдельную страницу, а здесь оставим ссылку)
^ Никнейм / Имя ^ Адрес ^
| TomasGl | f6065c4d768d5b40e40c942ca77bd40079ed3cc2df266562b9f4546ebe2c13d6@yggmail |
| BiGLapa | b6c2beb9ed1d8847bd5dba85d0623200435625fb2f9e155b8dd703a53b8c734d@yggmail |
====== Ссылки ======
Репозиторий проекта на GitHub: https://github.com/neilalexander/yggmail