list

server

This is the main dovel repository, it has the Go code to run dovel SMTP server.

curl https://dovel.email/server.tar tar

a98c9e1

Author: bmayer3 (bmayer@sibros.tech)

Date: Mon Apr 24 14:05:40 2023 -0300

Parent: 163adfe

Moved email reading to interfaces

* Improved pages

Diff

Makefile

commit a98c9e1314fda90fb3460456f1646ce656c464ba
Author: bmayer3 <bmayer@sibros.tech>
Date:   Mon Apr 24 14:05:40 2023 -0300

    Moved email reading to interfaces
    
    * Improved pages

diff --git a/Makefile b/Makefile
index 160ccdc..b9f0f8c 100644
--- a/Makefile
+++ b/Makefile
@@ -1,6 +1,6 @@
 .PHONY: clean deploy deploy-site deploy-assets deploy-pages
 
-dovel: $(wildcard cmd/dovel/*.go interfaces/*/*.go config/*.go)
+dovel: $(wildcard cmd/dovel/*.go interfaces/*/*.go config/*.go interfaces/*.go)
 	GOARCH=arm GOARM=6 go build -o $@ cmd/dovel/*.go
 
 deploy: dovel

interfaces/file/file.go

commit a98c9e1314fda90fb3460456f1646ce656c464ba
Author: bmayer3 <bmayer@sibros.tech>
Date:   Mon Apr 24 14:05:40 2023 -0300

    Moved email reading to interfaces
    
    * Improved pages

diff --git a/interfaces/file/file.go b/interfaces/file/file.go
index 728b8f4..858b628 100644
--- a/interfaces/file/file.go
+++ b/interfaces/file/file.go
@@ -7,10 +7,8 @@ import (
 	"bytes"
 	"crypto"
 	"crypto/x509"
-	"encoding/base64"
 	"encoding/pem"
 	"fmt"
-	"io"
 	"io/ioutil"
 	"mime/multipart"
 	"net"
@@ -275,37 +273,5 @@ func (f FileHandler) Mail(file string) (interfaces.Email, error) {
 		return interfaces.Email{}, err
 	}
 
-	email := interfaces.Email{
-		ID:          mail.MessageID,
-		From:        mail.From[0].Address,
-		Date:        mail.Date,
-		Subject:     mail.Subject,
-		Body:        mail.TextBody,
-		Attachments: map[string]interfaces.Attachment{},
-	}
-	for _, to := range mail.To {
-		email.To = append(email.To, to.Address)
-	}
-
-	if len(mail.Cc) > 0 {
-		for _, cc := range mail.Cc {
-			email.Cc = append(email.Cc, cc.Address)
-		}
-	}
-
-	for _, a := range mail.Attachments {
-		content, err := io.ReadAll(a.Data)
-		if err != nil {
-			fmt.Println("read attachment", err.Error())
-			continue
-		}
-
-		encContent := base64.StdEncoding.EncodeToString(content)
-		email.Attachments[a.Filename] = interfaces.Attachment{
-			Name:        a.Filename,
-			ContentType: a.ContentType,
-			Data:        []byte(encContent),
-		}
-	}
-	return email, nil
+	return interfaces.ToEmail(mail), nil
 }

interfaces/main.go

commit a98c9e1314fda90fb3460456f1646ce656c464ba
Author: bmayer3 <bmayer@sibros.tech>
Date:   Mon Apr 24 14:05:40 2023 -0300

    Moved email reading to interfaces
    
    * Improved pages

diff --git a/interfaces/main.go b/interfaces/main.go
index 03e74a4..56d828e 100644
--- a/interfaces/main.go
+++ b/interfaces/main.go
@@ -4,6 +4,9 @@
 package interfaces
 
 import (
+	"encoding/base64"
+	"fmt"
+	"io"
 	"time"
 
 	"github.com/go-git/go-git/v5/plumbing"
@@ -49,6 +52,7 @@ type Attachment struct {
 }
 
 type Email struct {
+	Headers     map[string][]string
 	ID          string
 	From        string
 	To          []string
@@ -63,13 +67,15 @@ type Email struct {
 
 func ToEmail(mail parsemail.Email) Email {
 	m := Email{
-		From:    mail.From[0].Address,
-		To:      []string{},
-		Cc:      []string{},
-		Subject: mail.Subject,
-		ID:      mail.MessageID,
-		Date:    mail.Date,
-		Body:    mail.TextBody,
+		Headers:     mail.Header,
+		From:        mail.From[0].Address,
+		To:          []string{},
+		Cc:          []string{},
+		Subject:     mail.Subject,
+		ID:          mail.MessageID,
+		Date:        mail.Date,
+		Body:        mail.TextBody,
+		Attachments: map[string]Attachment{},
 	}
 	for _, to := range mail.To {
 		m.To = append(m.To, to.Address)
@@ -77,6 +83,20 @@ func ToEmail(mail parsemail.Email) Email {
 	for _, cc := range mail.Cc {
 		m.Cc = append(m.Cc, cc.Address)
 	}
+	for _, a := range mail.Attachments {
+		content, err := io.ReadAll(a.Data)
+		if err != nil {
+			fmt.Println("read attachment", err.Error())
+			continue
+		}
+
+		encContent := base64.StdEncoding.EncodeToString(content)
+		m.Attachments[a.Filename] = Attachment{
+			Name:        a.Filename,
+			ContentType: a.ContentType,
+			Data:        []byte(encContent),
+		}
+	}
 	return m
 }
 
@@ -87,4 +107,3 @@ type Mailer interface {
 	Mails(folder string) ([]Email, error)
 	Mail(file string) (Email, error)
 }
-

www/compose.html

commit a98c9e1314fda90fb3460456f1646ce656c464ba
Author: bmayer3 <bmayer@sibros.tech>
Date:   Mon Apr 24 14:05:40 2023 -0300

    Moved email reading to interfaces
    
    * Improved pages

diff --git a/www/compose.html b/www/compose.html
index 24d96b0..c9ad0c5 100644
--- a/www/compose.html
+++ b/www/compose.html
@@ -1,4 +1,9 @@
+<!DOCTYPE html>
+<html>
+	<head>
 {{template "head.html"}}
+	</head>
+	<body>
 <b>composing</b><br>
 <br>
 <form action=/out method=post enctype=multipart/form-data>
@@ -29,3 +34,5 @@
 	<label>Attachments: </label><input type=file name=files multiple><br>
 	<input type=submit value=send>
 </form>
+	</body>
+</html>

www/inboxes.html

commit a98c9e1314fda90fb3460456f1646ce656c464ba
Author: bmayer3 <bmayer@sibros.tech>
Date:   Mon Apr 24 14:05:40 2023 -0300

    Moved email reading to interfaces
    
    * Improved pages

diff --git a/www/inboxes.html b/www/inboxes.html
index 3bbf0a6..7582762 100644
--- a/www/inboxes.html
+++ b/www/inboxes.html
@@ -1,12 +1,18 @@
+<!DOCTYPE html>
+<html>
+<head>
 {{template "head.html"}}
-
+</head>
+<body>
 <h2>{{.Query.Get "inbox"}}</h2>
+
 <a href="index.html">index</a>&emsp;
 <a href="compose.html?inbox={{.Query.Get "inbox"}}">compose</a>
-<br><br>
-
 {{range (.Mailer.Mailboxes (.Query.Get "inbox"))}}
+<p>
 	<a href="mails.html?inbox={{$.Query.Get "inbox"}}&subj={{.Title}}">{{.Title}}</a><br>
-	Updated: {{.LastMod.Format "Mon, 02 Jan 2006 15:04:05 MST"}}<br>
-	<br>
+	Updated: {{.LastMod.Format "Mon, 02 Jan 2006 15:04:05 MST"}}
+</p>
 {{end}}
+</body>
+</html>

www/index.html

commit a98c9e1314fda90fb3460456f1646ce656c464ba
Author: bmayer3 <bmayer@sibros.tech>
Date:   Mon Apr 24 14:05:40 2023 -0300

    Moved email reading to interfaces
    
    * Improved pages

diff --git a/www/index.html b/www/index.html
index 5d17e43..c91b2fe 100644
--- a/www/index.html
+++ b/www/index.html
@@ -16,14 +16,13 @@ _  __  /_  __ \_ | / /  _ \_  /
 
 </pre>
 	</center>
-
-<a href=compose.html>compose</a><br>
-<br>
+<a href=compose.html>compose</a>
 
 {{range (.Mailer.Mailboxes ".")}}
+<p>
 	<a href="inboxes.html?inbox={{.Title}}">{{.Title}}</a><br>
-	Updated: {{.LastMod.Format "Mon, 02 Jan 2006 15:04:05 MST"}}<br>
-	<br>
+	Updated: {{.LastMod.Format "Mon, 02 Jan 2006 15:04:05 MST"}}
+</p>
 {{end}}
 </body>
 </html>

www/mails.html

commit a98c9e1314fda90fb3460456f1646ce656c464ba
Author: bmayer3 <bmayer@sibros.tech>
Date:   Mon Apr 24 14:05:40 2023 -0300

    Moved email reading to interfaces
    
    * Improved pages

diff --git a/www/mails.html b/www/mails.html
index c9a8f27..acbee54 100644
--- a/www/mails.html
+++ b/www/mails.html
@@ -1,18 +1,41 @@
+<!DOCTYPE html>
+<html>
+	<head>
 {{template "head.html"}}
+	</head>
+	<body>
 <h2>{{.Query.Get "subj"}}</h2>
+
 <a href="inboxes.html?inbox={{.Query.Get "inbox"}}">inbox</a>&emsp;
-<a href="compose.html?inbox={{.Query.Get "inbox"}}&subj={{.Query.Get "subj"}}">compose</a><br>
+<a href="compose.html?inbox={{.Query.Get "inbox"}}&subj={{.Query.Get "subj"}}">compose</a>
 {{$inbox := printf "%s/%s" (.Query.Get "inbox") (.Query.Get "subj")}}
 {{range (.Mailer.Mails $inbox)}}
 <p>
-	{{if eq ($.Query.Get "inbox") .From}}To: {{index .To 0}}{{else}}From: {{.From}}{{end}}<br>
-	Date: {{.Date.Format "Mon, 02 Jan 2006 15:04:05 MST"}}<br>
-	{{if .Cc}}Cc: .Cc<br>{{end}}
+	<details>
+		<summary>
+			{{if eq ($.Query.Get "inbox") .From}}
+			To: {{index .To 0}}
+			{{else}}
+			From: {{.From}}
+			{{end}}<br>
+			Date: {{.Date.Format "Mon, 02 Jan 2006 15:04:05 MST"}}<br>
+			{{if .Cc}}Cc: .Cc{{end}}
+		</summary>
+		<ul>
+		{{range $k, $vs := .Headers}}
+		<li>{{$k}}: {{$vs}}</li>
+		{{end}}
+		</ul>
+	</details>
 	{{if .Attachments}}
-	Attachments:<br>
+	Attachments:
+	<ul>
 	{{range .Attachments}}
-	<a href="data:{{.ContentType}};base64,{{.Data}}" download="{{.Name}}">{{.Name}}</a><br>
+	<li>
+		<a href="data:{{.ContentType}};base64,{{.Data}}" download="{{.Name}}">{{.Name}}</a>
+	</li>
 	{{end}}
+	</ul>
 	{{end}}
 	{{if .Body}}
 	<pre>{{.Body}}</pre>
@@ -20,3 +43,5 @@
 	<a href="compose.html?inbox={{$.Query.Get "inbox"}}&subj={{.Subject}}&to={{.From}}">reply</a>
 </p>
 {{end}}
+	</body>
+</html>