End-to-end encrypted email for the mesh networking age

Overview

Yggmail

It's email, but not as you know it.

Introduction

Yggmail is a single-binary all-in-one mail transfer agent which sends and receives email natively over the Yggdrasil Network.

  • Yggmail runs just about anywhere you like — your inbox is stored right on your own machine;
  • Implements IMAP and SMTP protocols for sending and receiving mail, so you can use your favourite client (hopefully);
  • Mails are exchanged between Yggmail users using built-in Yggdrasil connectivity;
  • All mail exchange traffic between any two Yggmail nodes is always end-to-end encrypted without exception;
  • Yggdrasil and Yggmail nodes on the same network are discovered automatically using multicast or you can configure a static Yggdrasil peer.

Email addresses are based on your public key, like 6[email protected]yggmail.

Why?

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.

Quickstart

Use a recent version of Go to install Yggmail:

go install github.com/neilalexander/yggmail/cmd/[email protected]

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:

  • SMTP is listening on localhost port 1025, username is your mail address, plain password authentication, no SSL/TLS
  • IMAP is listening on localhost port 1143, username is your mail address, plain password authentication, no SSL/TLS

Then try sending a mail to another Yggmail user!

Parameters

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
  • -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).

Notes

There are a few important notes:

  • Yggmail needs to be running in order to receive inbound emails — it's therefore important to run Yggmail somewhere that will have good uptime;
  • Yggmail tries to guarantee that senders are who they say they are. Your From address must be your Yggmail address;
  • You can only email other Yggmail users, not regular email addresses on the public Internet;
  • You may need to configure your client to allow "insecure" or "plaintext" authentication to IMAP/SMTP — this is because we don't support SSL/TLS on the IMAP/SMTP listeners yet;
  • Yggmail won't transport mails larger than 1MB right now.

Bugs

There are probably all sorts of bugs, but the ones that we know of are:

  • IMAP behaviour might not be entirely spec-compliant in all cases, so your mileage with mail clients might vary;
  • IMAP search isn't implemented yet and will instead return all mails.

The code's also a bit of a mess, so sorry about that.

Comments
  • The latest version of yggmail floods in the log

    The latest version of yggmail floods in the log

    I updated Yggmail today and immediately noticed that the log is growing a lot due to an error.

    sudo journalctl -u yggmail --since today -e

    окт 19 13:09:24 pi yggmail[32757]: 2022/10/19 13:09:24 [  Yggmail  ] Listening for SMTP on: 192.168.1.15:1025
    окт 19 13:09:24 pi yggmail[32757]: 2022/10/19 13:09:24 [ Yggdrasil ] Connected TCP: [email protected], source 192.168.1.15
    окт 19 13:09:24 pi yggmail[32757]: 2022/10/19 13:09:24 [ Yggdrasil ] TLS listener started on [fe80::8c63:de15:b147:9591%eth0]:37781
    окт 19 13:09:24 pi yggmail[32757]: 2022/10/19 13:09:24 [ Yggdrasil ] Connected TLS: [email protected]::8c63:de15:b147:9591, >
    окт 19 13:09:25 pi yggmail[32757]: 2022/10/19 13:09:25 [ Yggdrasil ] Failed to dial TLS [fe80::ab08:a3c0:1ad8:89c]:46717: EOF
    окт 19 13:09:26 pi yggmail[32757]: 2022/10/19 13:09:26 [ Yggdrasil ] Failed to dial TLS [fe80::ab08:a3c0:1ad8:89c]:46717: EOF
    окт 19 13:09:27 pi yggmail[32757]: 2022/10/19 13:09:27 [ Yggdrasil ] Failed to dial TLS [fe80::ab08:a3c0:1ad8:89c]:46717: EOF
    окт 19 13:09:28 pi yggmail[32757]: 2022/10/19 13:09:28 [ Yggdrasil ] Failed to dial TLS [fe80::ab08:a3c0:1ad8:89c]:46717: EOF
    окт 19 13:09:29 pi yggmail[32757]: 2022/10/19 13:09:29 [ Yggdrasil ] Failed to dial TLS [fe80::ab08:a3c0:1ad8:89c]:46717: EOF
    окт 19 13:10:18 pi yggmail[32757]: 2022/10/19 13:10:18 [ Yggdrasil ] Failed to dial TLS [fe80::ab08:a3c0:1ad8:89c]:46717: EOF
    окт 19 13:10:19 pi yggmail[32757]: 2022/10/19 13:10:19 [ Yggdrasil ] Failed to dial TLS [fe80::ab08:a3c0:1ad8:89c]:46717: EOF
    окт 19 13:10:20 pi yggmail[32757]: 2022/10/19 13:10:20 [ Yggdrasil ] Failed to dial TLS [fe80::ab08:a3c0:1ad8:89c]:46717: EOF
    окт 19 13:10:21 pi yggmail[32757]: 2022/10/19 13:10:21 [ Yggdrasil ] Failed to dial TLS [fe80::ab08:a3c0:1ad8:89c]:46717: EOF
    окт 19 13:10:22 pi yggmail[32757]: 2022/10/19 13:10:22 [ Yggdrasil ] Failed to dial TLS [fe80::ab08:a3c0:1ad8:89c]:46717: EOF
    окт 19 13:10:23 pi yggmail[32757]: 2022/10/19 13:10:23 [ Yggdrasil ] Failed to dial TLS [fe80::ab08:a3c0:1ad8:89c]:46717: EOF
    окт 19 13:10:24 pi yggmail[32757]: 2022/10/19 13:10:24 [ Yggdrasil ] Failed to dial TLS [fe80::ab08:a3c0:1ad8:89c]:46717: EOF
    окт 19 13:10:25 pi yggmail[32757]: 2022/10/19 13:10:25 [ Yggdrasil ] Failed to dial TLS [fe80::ab08:a3c0:1ad8:89c]:46717: EOF
    окт 19 13:10:26 pi yggmail[32757]: 2022/10/19 13:10:26 [ Yggdrasil ] Failed to dial TLS [fe80::ab08:a3c0:1ad8:89c]:46717: EOF
    окт 19 13:10:27 pi yggmail[32757]: 2022/10/19 13:10:27 [ Yggdrasil ] Failed to dial TLS [fe80::ab08:a3c0:1ad8:89c]:46717: EOF
    окт 19 13:10:28 pi yggmail[32757]: 2022/10/19 13:10:28 [ Yggdrasil ] Failed to dial TLS [fe80::ab08:a3c0:1ad8:89c]:46717: EOF
    окт 19 13:10:29 pi yggmail[32757]: 2022/10/19 13:10:29 [ Yggdrasil ] Failed to dial TLS [fe80::ab08:a3c0:1ad8:89c]:46717: EOF
    окт 19 13:10:30 pi yggmail[32757]: 2022/10/19 13:10:30 [ Yggdrasil ] Failed to dial TLS [fe80::ab08:a3c0:1ad8:89c]:46717: EOF
    окт 19 13:10:31 pi yggmail[32757]: 2022/10/19 13:10:31 [ Yggdrasil ] Failed to dial TLS [fe80::ab08:a3c0:1ad8:89c]:46717: read tcp [fe80::8c63:de15:b>
    окт 19 13:10:32 pi yggmail[32757]: 2022/10/19 13:10:32 [ Yggdrasil ] Failed to dial TLS [fe80::ab08:a3c0:1ad8:89c]:46717: read tcp [fe80::8c63:de15:b>
    окт 19 13:10:33 pi yggmail[32757]: 2022/10/19 13:10:33 [ Yggdrasil ] Failed to dial TLS [fe80::ab08:a3c0:1ad8:89c]:46717: EOF
    окт 19 13:10:34 pi yggmail[32757]: 2022/10/19 13:10:34 [ Yggdrasil ] Failed to dial TLS [fe80::ab08:a3c0:1ad8:89c]:46717: EOF
    окт 19 13:10:35 pi yggmail[32757]: 2022/10/19 13:10:35 [ Yggdrasil ] Failed to dial TLS [fe80::ab08:a3c0:1ad8:89c]:46717: EOF
    окт 19 13:10:36 pi yggmail[32757]: 2022/10/19 13:10:36 [ Yggdrasil ] Failed to dial TLS [fe80::ab08:a3c0:1ad8:89c]:46717: EOF
    окт 19 13:10:37 pi yggmail[32757]: 2022/10/19 13:10:37 [ Yggdrasil ] Failed to dial TLS [fe80::ab08:a3c0:1ad8:89c]:46717: EOF
    окт 19 13:10:38 pi yggmail[32757]: 2022/10/19 13:10:38 [ Yggdrasil ] Failed to dial TLS [fe80::ab08:a3c0:1ad8:89c]:46717: EOF
    окт 19 13:10:39 pi yggmail[32757]: 2022/10/19 13:10:39 [ Yggdrasil ] Failed to dial TLS [fe80::ab08:a3c0:1ad8:89c]:46717: EOF
    окт 19 13:10:40 pi yggmail[32757]: 2022/10/19 13:10:40 [ Yggdrasil ] Failed to dial TLS [fe80::ab08:a3c0:1ad8:89c]:46717: EOF
    окт 19 13:10:41 pi yggmail[32757]: 2022/10/19 13:10:41 [ Yggdrasil ] Failed to dial TLS [fe80::ab08:a3c0:1ad8:89c]:46717: EOF
    окт 19 13:10:42 pi yggmail[32757]: 2022/10/19 13:10:42 [ Yggdrasil ] Failed to dial TLS [fe80::ab08:a3c0:1ad8:89c]:46717: EOF
    окт 19 13:10:43 pi yggmail[32757]: 2022/10/19 13:10:43 [ Yggdrasil ] Failed to dial TLS [fe80::ab08:a3c0:1ad8:89c]:46717: EOF
    окт 19 13:10:44 pi yggmail[32757]: 2022/10/19 13:10:44 [ Yggdrasil ] Failed to dial TLS [fe80::ab08:a3c0:1ad8:89c]:46717: EOF
    окт 19 13:10:45 pi yggmail[32757]: 2022/10/19 13:10:45 [ Yggdrasil ] Failed to dial TLS [fe80::ab08:a3c0:1ad8:89c]:46717: EOF
    окт 19 13:10:46 pi yggmail[32757]: 2022/10/19 13:10:46 [ Yggdrasil ] Failed to dial TLS [fe80::ab08:a3c0:1ad8:89c]:46717: EOF
    окт 19 13:10:47 pi yggmail[32757]: 2022/10/19 13:10:47 [ Yggdrasil ] Failed to dial TLS [fe80::ab08:a3c0:1ad8:89c]:46717: EOF
    окт 19 13:10:48 pi yggmail[32757]: 2022/10/19 13:10:48 [ Yggdrasil ] Failed to dial TLS [fe80::ab08:a3c0:1ad8:89c]:46717: EOF
    окт 19 13:10:49 pi yggmail[32757]: 2022/10/19 13:10:49 [ Yggdrasil ] Failed to dial TLS [fe80::ab08:a3c0:1ad8:89c]:46717: EOF
    окт 19 13:10:50 pi yggmail[32757]: 2022/10/19 13:10:50 [ Yggdrasil ] Failed to dial TLS [fe80::ab08:a3c0:1ad8:89c]:46717: EOF
    окт 19 13:10:51 pi yggmail[32757]: 2022/10/19 13:10:51 [ Yggdrasil ] Failed to dial TLS [fe80::ab08:a3c0:1ad8:89c]:46717: EOF
    окт 19 13:10:52 pi yggmail[32757]: 2022/10/19 13:10:52 [ Yggdrasil ] Failed to dial TLS [fe80::ab08:a3c0:1ad8:89c]:46717: EOF
    окт 19 13:10:53 pi yggmail[32757]: 2022/10/19 13:10:53 [ Yggdrasil ] Failed to dial TLS [fe80::ab08:a3c0:1ad8:89c]:46717: EOF
    окт 19 13:10:54 pi yggmail[32757]: 2022/10/19 13:10:54 [ Yggdrasil ] Failed to dial TLS [fe80::ab08:a3c0:1ad8:89c]:46717: EOF
    окт 19 13:10:55 pi yggmail[32757]: 2022/10/19 13:10:55 [ Yggdrasil ] Failed to dial TLS [fe80::ab08:a3c0:1ad8:89c]:46717: EOF
    окт 19 13:10:56 pi yggmail[32757]: 2022/10/19 13:10:56 [ Yggdrasil ] Failed to dial TLS [fe80::ab08:a3c0:1ad8:89c]:46717: EOF
    окт 19 13:10:57 pi yggmail[32757]: 2022/10/19 13:10:57 [ Yggdrasil ] Failed to dial TLS [fe80::ab08:a3c0:1ad8:89c]:46717: EOF
    окт 19 13:10:58 pi yggmail[32757]: 2022/10/19 13:10:58 [ Yggdrasil ] Failed to dial TLS [fe80::ab08:a3c0:1ad8:89c]:46717: EOF
    окт 19 13:10:59 pi yggmail[32757]: 2022/10/19 13:10:59 [ Yggdrasil ] Failed to dial TLS [fe80::ab08:a3c0:1ad8:89c]:46717: EOF
    окт 19 13:11:00 pi yggmail[32757]: 2022/10/19 13:11:00 [ Yggdrasil ] Failed to dial TLS [fe80::ab08:a3c0:1ad8:89c]:46717: EOF
    окт 19 13:11:01 pi yggmail[32757]: 2022/10/19 13:11:01 [ Yggdrasil ] Failed to dial TLS [fe80::ab08:a3c0:1ad8:89c]:46717: EOF
    ...
    

    How can I prevent him from opening listener on fe80::ab08:a3c0:1ad8:89c? How can I disable the output of these messages?

    It is launched from the systemd unit like this: yggmail -peer=tcp://192.168.1.15:22854 -database=/home/USER/go/bin/yggmail.db -smtp=192.168.1.15:1025 -imap=192.168.1.15:1143

    opened by ygguser 5
  • Running yggmail together with yggdrasil

    Running yggmail together with yggdrasil

    Please tell me, is it possible to run yggmail on the same computer where yggdrasil is running, without using virtualization? I think it would be convenient to use a single tun-adapter...

    opened by xaozai 4
  • Thunderbird

    Thunderbird "Get Messages" is inconsistent

    Describe the bug Thunderbird's "Get Messages" button is inconsistent. When it doesn't work it seems like the only solution is to restart Thunderbird.

    Desktop:

    • OS: Debian 10
    • Client: Thunderbird
    • Version: 78.11.0

    Additional context Might be related to the lack of IMAP Notify support.

    opened by rany2 2
  • Prefix log messages with timestamp

    Prefix log messages with timestamp

    Prefixes log messages with a timestamp using the default format from go log package YYYY/MM/DD hh:mm:ss (local time), e.g.:

    2021/10/19 18:43:59 [  Yggmail  ] Listening for IMAP on: localhost:1143
    
    opened by stmllr 1
  • There is no proper closing storage

    There is no proper closing storage

    Describe the bug I'm not sure but I can't find proper storage closing routines so there are a chance to broke database file.

    To Reproduce Not tested, but I think database will broke if close yggmail while there are some working write operations.

    Expected behavior Handle SIGINT signal.

    opened by nxshock 1
  • Support multiple peers

    Support multiple peers

    Describe the bug Currently, if we specify multiple peers yggmail only uses the last one in a line. It would be better to use all of specified peers.

    To Reproduce Steps to reproduce the behavior:

    1. run yggmail -peer <peer1> -peer <peer2>
    2. Look in the logs and spot that it uses only the last peer.

    Expected behavior It would be better to use all of specified peers.

    opened by Revertron 1
  • Feature Request: Host yggmail for others

    Feature Request: Host yggmail for others

    Is your feature request related to a problem? Please describe. Yes. As my home computer doesn't switch on always, I have to host my yggmail server on a VPS, but VPS already has a yggdrasil node running with its own pubkey.

    Describe the solution you'd like Allow to host yggmail for others. (Maybe through some kind of delegation? Signing authorization from A to allow B to received his email.)

    opened by YuetAu 0
  • yggmail via unix socket and Multicast Peer Discovery

    yggmail via unix socket and Multicast Peer Discovery

    A couple of questions )

    When I run yggmail like this: yggmail -peer=unix:///var/run/yggdrasil.sock -database=/home/USER/mail/yggmail.db -smtp=192.168.1.15:1025 -imap=192.168.1.15:1143

    Every minute the following will be recorded in the log:

    2022/10/19 22:29:29 [ Yggdrasil ] Failed to dial UNIX : duplicate connection attempt
    2022/10/19 22:30:29 [ Yggdrasil ] Failed to dial UNIX : duplicate connection attempt
    2022/10/19 22:31:29 [ Yggdrasil ] Failed to dial UNIX : duplicate connection attempt
    ...
    

    Is this how it should be?

    And second: when I don't specify the -multicast parameter when starting yggmail - does it not disable Multicast Peer Discovery? Because in the log I see the following:

    ./yggmail -peer=unix:///var/run/yggdrasil.sock -database=/home/user/mail/yggmail.db -smtp=192.168.1.15:1025 -imap=192.168.1.15:1143
    2022/10/20 01:37:05 [  Yggmail  ] Using database file "/home/user/mail/yggmail.db"
    2022/10/20 01:37:05 [  Yggmail  ] Mail address: 4[email protected]yggmail
    2022/10/20 01:37:05 [  Yggmail  ] Listening for IMAP on: 192.168.1.15:1143
    2022/10/20 01:37:05 [ Yggdrasil ] Connected UNIX: 200:31e:cba5:1c08:758c:5bdf:e04c:[email protected]/var/run/yggdrasil.sock, source @
    2022/10/20 01:37:05 [  Yggmail  ] Listening for SMTP on: 192.168.1.15:1025
    2022/10/20 01:37:05 [ Yggdrasil ] TLS listener started on [fe80::8c63:de15:b147:9591%eth0]:40729
    

    TLS listener started on...

    opened by ygguser 0
  • Any type of Yggmail proxy to existing email servers?

    Any type of Yggmail proxy to existing email servers?

    Hello,

    I am new to Yggdrasil and Yggmail so I am exploring but find the Yggmail to be an interesting project with a lot of potential.

    In as much, I seem to have read that the MTA can only talk to other MTA systems on the Yggdrasil network, but I was wondering if there was some type of Yggdrasil mail proxy server that would allow the mail to be sent and received to/from regular existing email servers so that it would extend Yggmail to be able to work like normal email?

    Also, it seems that there might be some challenges with the Yggmail email addresses as opposed to standard email addresses, but I have not researched that part yet.

    Cheers and have a great day

    opened by lonnietc 0
  • Non-ygg-side SMTP does not support AUTH LOGIN

    Non-ygg-side SMTP does not support AUTH LOGIN

    Describe the bug Attempting to log into a yggmail instance with AUTH LOGIN causes a panic:

    220 <Snip> ESMTP Service Ready
    EHLO host
    250-Hello host
    250-PIPELINING
    250-8BITMIME
    250-ENHANCEDSTATUSCODES
    250-CHUNKING
    250-AUTH PLAIN LOGIN
    250 SIZE 1048576
    AUTH LOGIN
    334 VXNlcm5hbWU6
    <Snip>
    334 UGFzc3dvcmQ6
    <Snip>
    421 4.0.0 Internal server error
    Connection closed by foreign host.
    

    To Reproduce Try to log into the yggmail server using AUTH LOGIN. The above is an example transcript.

    Expected behavior The login should proceed as in AUTH PLAIN.

    Desktop (please complete the following information):

    • OS: Linux
    • Version: latest?

    Additional context Here's the stack trace of the panic:

    goroutine 57647 [running]:
    runtime/debug.Stack()
    	/usr/share/go/src/runtime/debug/stack.go:24 +0x65
    github.com/emersion/go-smtp.(*Conn).handle.func1()
    	/home/kappa/go/pkg/mod/github.com/emersion/[email protected]/conn.go:102 +0xc5
    panic({0x8891a0, 0xbe9040})
    	/usr/share/go/src/runtime/panic.go:1038 +0x215
    github.com/neilalexander/yggmail/internal/smtpserver.(*Backend).Login(0xc0000b0880, 0x0, {0xc0001ef400, 0x0}, {0xc0004e20c0, 0x14})
    	/home/kappa/go/pkg/mod/github.com/neilalexander/[email protected]/internal/smtpserver/backend.go:58 +0x259
    main.main.func1.1.1({0xc0001ef400, 0xc0004e20a8}, {0xc0004e20c0, 0xc0004e20a8})
    	/home/kappa/go/pkg/mod/github.com/neilalexander/[email protected]/cmd/yggmail/main.go:183 +0x38
    github.com/emersion/go-sasl.(*loginServer).Next(0xc0002b43c0, {0xc0004e20a8, 0xffffffffffffffff, 0xc000120320})
    	/home/kappa/go/pkg/mod/github.com/emersion/[email protected]/login.go:81 +0x135
    github.com/emersion/go-smtp.(*Conn).handleAuth(0xc000120320, {0xc000212685, 0xc000212685})
    	/home/kappa/go/pkg/mod/github.com/emersion/[email protected]/conn.go:549 +0x3d6
    github.com/emersion/go-smtp.(*Conn).handle(0xc000120320, {0xc000212680, 0xc000120320}, {0xc000212685, 0x5})
    	/home/kappa/go/pkg/mod/github.com/emersion/[email protected]/conn.go:151 +0x1bf
    github.com/emersion/go-smtp.(*Server).handleConn(0xc0000da000, 0xc000120320)
    	/home/kappa/go/pkg/mod/github.com/emersion/[email protected]/server.go:154 +0x1a5
    created by github.com/emersion/go-smtp.(*Server).Serve
    	/home/kappa/go/pkg/mod/github.com/emersion/[email protected]/server.go:126 +0x169
    
    opened by parnikkapore 0
  • [WIP] Android lib

    [WIP] Android lib

    This PR creates a library API that can be used on mobile.

    There are some changes affecting other parts of the yggmail:

    • creating an imap server is decoupled from starting it. However the cli API keeps the same
    • error reporting is adapted so that errors can be exposed through the lib API
    • gracefully shutting down the process has been improved
    opened by cyBerta 0
  • Errors wrapping, logging.

    Errors wrapping, logging.

    Is your feature request related to a problem? Please describe. For now, only standard logger and errors libraries are used in this project. I suggest using the xerrors package to wrap errors with a stack trace and the zerolog package as a logger. If we use them, we will not need to additionally log every error but can log them only on the highest level also with the stack trace, which will help us to trace an error. Also, with the zerolog, we can easily split logs into categories (at least debug and all others).

    Describe the solution you'd like I can add these features to the project and create a pull request if you like this idea =)

    Describe alternatives you've considered I would be glad to discuss all the alternatives or additions to my thought.

    opened by GRbit 0
  • android port

    android port

    for the record: @cyberta did a a soon, but somehow working android-port using this library: https://github.com/deltachat/AndroidYggmail

    we tested that out on a gathering with 20 persons using android devices and https://github.com/deltachat/deltachat-android/ as client, work quite well.

    (i am currently on a pr that will make configuration of Delta Chat a bit easier easier, came over this repo to double-check default ports and thought a link to AndroidYggmail makes some sense :)

    opened by r10s 1
Owner
Neil Alexander
Network enthusiast.
Neil Alexander
Email-searcher - Given a domain name and real name, attempt to find an existing email for that user.

email-searcher Given a domain name and real name, attempt to find an existing email for that user. Using Run it with both the domain and name flags, l

Alex Anderson 0 Jan 2, 2022
Sending emails using email server talking to RabbitMQ and send grid server sending emails to email ids consumed from RabbitMQ

Sending emails using email server talking to RabbitMQ and send grid server sending emails to email ids consumed from RabbitMQ

Shivanshu Raj Shrivastava 2 Oct 27, 2022
Robust and flexible email library for Go

email Robust and flexible email library for Go Email for humans The email package is designed to be simple to use, but flexible enough so as not to be

Jordan Wright 2.2k Nov 27, 2022
:white_check_mark: A Go library for email verification without sending any emails.

email-verifier ✉️ A Go library for email verification without sending any emails. Features Email Address Validation: validates if a string contains a

AfterShip Ltd. 571 Nov 21, 2022
Golang package for send email. Support keep alive connection, TLS and SSL. Easy for bulk SMTP.

Go Simple Mail The best way to send emails in Go with SMTP Keep Alive and Timeout for Connect and Send. IMPORTANT Examples in this README are for v2.2

Santiago De la Cruz 400 Nov 22, 2022
An email MIME artist for golang

Marcel is a tool to generate IETF compliant emails in raw MIME format. I mainly use this for generating emails with attachments and sending them via amazon SES. If that's what you're doing too, you may want notifications

David Banham 24 Nov 7, 2022
:incoming_envelope: Simple email interface across multiple service providers (ses, postmark, mandrill, smtp)

go-mail Lightweight email package with multi-provider support (ses, mandrill, postmark) Table of Contents Installation Documentation Examples & Tests

MrZ 40 Sep 17, 2022
EMail Searcher By Golang

GiveMeMail ▄████ ██▓ ██▒ ██▓ ▓██████ ███▄ ▄███▓▓██████ ███▄ ▄███▓ ██ ██▓ ██▓ ██▒ ▀█▒ ▓██▒ ▓██░ █▒ ▓█ ▀ ▓██▒▀█▀ ██▒▓█

ConsT27 10 Dec 4, 2021
✉️ A Go library for email verification without sending any emails.

email-verifier ✉️ A Go library for email verification without sending any emails. Features Email Address Validation: validates if a string contains a

AfterShip Ltd. 248 Jun 24, 2021
envio de email via SMTP com anexo usando Go

gosendmail - SMTP This repo is a simple net/smtp abstraction for sending emails using SMTP. With it we can send emails With copy, with blind copy and

Jefferson Otoni Lima 9 Aug 18, 2022
Go implementation of the JWZ email threading algorithm

The JWZ Threading algorithm written in Go This is an open source Go implementation of the widely known JWZ message threading algorithm originally writ

GatherStars 23 Oct 31, 2022
a simple api that sent spam via sms and email

a simple api that sent spam via sms and email routes: /sms /email example request with python

null 3 Oct 19, 2021
📮 Simple (but useful) email sender written in pure Go v1.17. Support HTML templates and attachments.

?? Go Email Sender Simple (but useful) email sender written in pure Go v1.17. Yes, yet another email package here! ?? Support HTML templates and attac

Vic Shóstak 6 Dec 31, 2021
Monitoring and automation for Open Source email servers, starting with Postfix.

Welcome to Lightmeter Control Center, the Open Source mailops monitoring application.

Lightmeter 88 Nov 12, 2022
Experimental email attachment downloader for Kobo devices (gmail only ATM)

KoboMail Experimental email attachment downloader for Kobo devices (gmail only ATM) What is KoboMail? It is a software that will read emails sent to u

Carlos Lisboa 18 Oct 9, 2022
In this project I just created email-verification Code.

mail-verification In this project I just created email-verification Code. Setup Before run the program. Type go mod tidy on terminal. After that chang

Ali 1 Nov 4, 2021
aerc is an email client for your terminal.

aerc aerc is an email client for your terminal. This is a fork of the original aerc by Drew DeVault. A short demonstration can be found on https://aer

Robin Jarry 18 Nov 9, 2022
📧 Go client for the OhMySMTP email service

go-ohmysmtp A Go wrapper for the OhMySMTP email service. Package https://github.com/jackcoble/go-ohmysmtp Examples Send an email. package main impor

null 0 Dec 13, 2021
An email service written in Golang

furion An email service written in Go. Architecture Diagram

NUSSU commIT 1 Dec 19, 2021