This is the main dovel repository, it has the Go code to run dovel SMTP server.
Author: bmayer3 (bmayer@sibros.tech)
Date: Sun Mar 12 17:46:42 2023 -0300
Parent: 66ed831
Improved pages - Removed dead code - Updated landing page
commit 5261a3aff147ce64cdbca2c42e5aeb8de84d1fa0 Author: bmayer3 <bmayer@sibros.tech> Date: Sun Mar 12 17:46:42 2023 -0300 Improved pages - Removed dead code - Updated landing page diff --git a/cmd/dovel/main.go b/cmd/dovel/main.go index f97cb89..5afbd59 100644 --- a/cmd/dovel/main.go +++ b/cmd/dovel/main.go @@ -5,92 +5,27 @@ import ( "crypto/x509" "encoding/json" "encoding/pem" - "fmt" - "io" "io/ioutil" "log" "net/http" "os" - "strings" "time" "blmayer.dev/x/dovel/config" - "blmayer.dev/x/dovel/interfaces" "blmayer.dev/x/dovel/interfaces/backend" "blmayer.dev/x/dovel/interfaces/file" "blmayer.dev/x/dovel/interfaces/gwi" - "github.com/OfimaticSRL/parsemail" "github.com/emersion/go-smtp" ) -// A Session is returned after EHLO. -type Session struct { - User string - handlers map[string]config.Handler -} - -func (s Session) AuthPlain(username, password string) error { - println("connection sent", username, password) - return nil -} - -func (s Session) Mail(from string, opts *smtp.MailOptions) error { - println("Mail from:", from) - return nil -} - -func (s Session) Rcpt(to string) error { - println("Rcpt to:", to) - return nil -} - -func (s Session) Data(r io.Reader) error { - content, err := io.ReadAll(r) - if err != nil { - println("read content", err.Error()) - return err - } - - email, err := parsemail.Parse(strings.NewReader(string(content))) - if err != nil { - println("parse email", err.Error()) - return err - } - - // get user from to field - mail := interfaces.ToEmail(email) - for _, to := range mail.To { - userDomain := strings.Split(to, "@") - handler, ok := s.handlers[userDomain[1]] - if !ok { - println("no handler for domain", userDomain[1]) - return fmt.Errorf("no handler for domain %s", userDomain) - } - mail.To = []string{to} - if err := handler(mail); err != nil { - println("handler error", err.Error()) - return fmt.Errorf("handler error %s", err.Error()) - } - } - - return nil -} - -func (s Session) Reset() {} - -func (s Session) Logout() error { - println("logged out") - return nil -} - var ( defaultPort = "8080" defaultConfig = config.Config{ WebPort: &defaultPort, Server: config.ServerConfig{ - Domain: "dovel.email", - Address: ":2525", + Domain: "dovel.email", + Address: ":2525", DKIMKeyPath: "dkim.priv", Inboxes: []config.InboxConfig{ {
commit 5261a3aff147ce64cdbca2c42e5aeb8de84d1fa0 Author: bmayer3 <bmayer@sibros.tech> Date: Sun Mar 12 17:46:42 2023 -0300 Improved pages - Removed dead code - Updated landing page diff --git a/index.html b/index.html index d3cf7dc..eb0073e 100644 --- a/index.html +++ b/index.html @@ -36,7 +36,7 @@ tt { <body> <center> <h1>Dovel</h1> - <i>Self host your email in 3 easy steps.</i> + <i>Self host your email in 4 easy steps.</i> <p> <a href=https://goreportcard.com/report/blmayer.dev/x/dovel><img src=https://goreportcard.com/badge/blmayer.dev/x/dovel></a>   @@ -86,19 +86,25 @@ tt { systems. <ol> <li> - Clone the repo in your build machine, or directly on - your server with the command: - <tt>git clone https://blmayer.dev/x/dovel</tt>. + Install dovel by running: + <tt>go install blmayer.dev/x/dovel/cmd/dovel</tt>. </li> <li> - Build the server <tt>make dovel</tt>, to start the - server, you need to set the configuration file, an + Configure dovel by creating the configuration file, an example is provided below. Running <tt>dovel</tt> is enough to start. </li> <li> Configure your MX record in your domain registrar to - point to your server. + point to your server. This is needed to receive email. + Define a password for your user using the environment + variable DOVEL_PASS. + </li> + <li> + Configure other DNS records as you wish in your domain + registrar such as PTR, SPF, DKIM or DMARC to improve + sending emails. Dovel supports DKIM by passing the key + path in the configuration file. </li> </ol> @@ -112,6 +118,7 @@ tt { "server": { "address": ":25", "domain": "dovel.email", + "dKIMKeyPath": "dkim.priv", "inboxes": [ { "domain": "user.dovel.email", @@ -136,17 +143,17 @@ tt { Using <tt>dovel</tt> email server and the web interface is meant to be super easy: the server uses the configuration above, you can add more inboxes. The web interface is much more interesting: It uses the - Golang <tt>template</tt> package to build pages. + Golang <tt>template</tt> package to build pages. The default user is + "x", the password is set using an environment variable. <p> As a starting point, look at the <tt>www/</tt> folder in our git repo. They are templates that you can customize to your needs. Once you're - done simply restart the <tt>dovel</tt> application to apply - changes. + done simply restart the <tt>dovel</tt> application to apply changes. </p> <p> - I currently use dovel for my personal email, and my git mail workflow. + I currently use dovel for my personal email and my git mail workflow. </p> <h3>Functions</h3>
commit 5261a3aff147ce64cdbca2c42e5aeb8de84d1fa0 Author: bmayer3 <bmayer@sibros.tech> Date: Sun Mar 12 17:46:42 2023 -0300 Improved pages - Removed dead code - Updated landing page diff --git a/www/mail.html b/www/mail.html index 5cb4617..6cb2025 100644 --- a/www/mail.html +++ b/www/mail.html @@ -28,7 +28,9 @@ {{end}} {{if .Body}} <br> - {{.Body}}<br> + <pre> + {{.Body}} + </pre> {{end}} <br> {{end}}
commit 5261a3aff147ce64cdbca2c42e5aeb8de84d1fa0 Author: bmayer3 <bmayer@sibros.tech> Date: Sun Mar 12 17:46:42 2023 -0300 Improved pages - Removed dead code - Updated landing page diff --git a/www/mails.html b/www/mails.html index f75d124..ff2d01e 100644 --- a/www/mails.html +++ b/www/mails.html @@ -24,7 +24,7 @@ {{end}} {{end}} {{if .Body}} - Body: {{heading .Body 40}}<br> + Body: {{heading .Body 50}}<br> {{end}} <br> {{end}}
commit 5261a3aff147ce64cdbca2c42e5aeb8de84d1fa0 Author: bmayer3 <bmayer@sibros.tech> Date: Sun Mar 12 17:46:42 2023 -0300 Improved pages - Removed dead code - Updated landing page diff --git a/www/style-min.html b/www/style-min.html index 4eb6abd..6d9df80 100644 --- a/www/style-min.html +++ b/www/style-min.html @@ -1,8 +1,9 @@ <style> body { - width: 541; - margin: 99 auto; - font-family: monospace; + max-width: 800; + padding: 0 20px; + margin: 50 auto; + font-family: sans-serif; } a { color: #888 @@ -23,6 +24,8 @@ display: inline-block; min-width: 80; } - + pre { + white-space: pre-wrap; + } </style>