End-to-end encrypted email for the mesh networking age
MPL-2.0 License
It's email, but not as you know it.
Yggmail is a single-binary all-in-one mail transfer agent which sends and receives email natively over the Yggdrasil Network.
Email addresses are based on your public key, like 89cd1ea25d99b8ccf29e454280313128c234ffb82aa0eb2e3496f6f156d063d0@yggmail
.
There are all sorts of messaging services in the world but there is still a lot of value in asynchronous communication. Email is something that a lot of people understand reasonably well and there is still a huge volume of software in the world which supports email. Yggmail is designed to comply with the standards that people know and expect.
Yggdrasil is well-suited for ad-hoc mail delivery and allows Yggmail to work even in closed networks, where Internet or other connectivity is restricted or simply not available. It guarantees end-to-end encryption and handles networks with changing topologies reasonably well.
Use a recent version of Go to install Yggmail:
go install github.com/neilalexander/yggmail/cmd/yggmail@latest
It will then be installed into your GOPATH
, so add that to your environment:
export PATH=$PATH:`go env GOPATH`/bin
Create a mailbox and set your password. Your Yggmail database will automatically be created in your working directory if it doesn't already exist:
yggmail -password
Start Yggmail, using the database in your working directory, with either multicast enabled, an Yggdrasil static peer specified or both:
yggmail -multicast
yggmail -peer=tls://...
yggmail -multicast -peer=tls://...
Your mail address will be printed in the log at startup. You will also use this as your username when you log into SMTP/IMAP.
Connect your mail client to Yggmail. In the above example:
localhost
port 1025, username is your mail address, plain password authentication, no SSL/TLSlocalhost
port 1143, username is your mail address, plain password authentication, no SSL/TLSThen try sending a mail to another Yggmail user!
The following command line switches are supported by the yggmail
binary:
-peer=tls://...
or -peer=tcp://...
— connect to a specific Yggdrasil node, like one of the Public Peers;-multicast
- enable multicast peer discovery for Yggdrasil nodes on your LAN-mcastregexp=".*"
- regexp used in muticast peer discovery for interface name selection.-database=/path/to/yggmail.db
— use a specific database file;-smtp=listenaddr:port
— listen for SMTP on a specific address/port-imap=listenaddr:port
— listen for IMAP on a specific address/port;-password
— set your IMAP/SMTP password (doesn't matter if Yggmail is running or not, just make sure that Yggmail is pointing at the right database file or that you are in the right working directory).There are a few important notes:
From
address must be your Yggmail address;There are probably all sorts of bugs, but the ones that we know of are:
The code's also a bit of a mess, so sorry about that.