This is the main dovel repository, it has the Go code to run dovel SMTP server.
Author: bmayer3 (bmayer@sibros.tech)
Date: Mon Jan 23 14:32:56 2023 -0300
Parent: e459d8a
Improved docs
commit 512d4002ee7ccfc83097011e5aef84b48abf7696
Author: bmayer3 <bmayer@sibros.tech>
Date: Mon Jan 23 14:32:56 2023 -0300
Improved docs
diff --git a/cmd/dovel/main.go b/cmd/dovel/main.go
index e1fa6c2..187f645 100644
--- a/cmd/dovel/main.go
+++ b/cmd/dovel/main.go
@@ -137,7 +137,7 @@ func main() {
mailCfg := file.FileConfig{
Root: hand.Root,
Templates: hand.Templates,
- Password: os.Getenv("DOVEL_PASS"),
+ Password: os.Getenv("DOVEL_PASS"),
}
funcs := map[string]any{"heading": heading}
mail, err := file.NewFileHandler(mailCfg, funcs)
@@ -145,8 +145,10 @@ func main() {
panic(err)
}
- http.HandleFunc(hand.Domain+"/", mail.IndexHandler())
- http.HandleFunc(hand.Domain+"/out", mail.SendHandler())
+ if hand.Templates != "" {
+ http.HandleFunc(hand.Domain+"/", mail.IndexHandler())
+ http.HandleFunc(hand.Domain+"/out", mail.SendHandler())
+ }
b.handlers[hand.Domain] = mail.Save
}
commit 512d4002ee7ccfc83097011e5aef84b48abf7696
Author: bmayer3 <bmayer@sibros.tech>
Date: Mon Jan 23 14:32:56 2023 -0300
Improved docs
diff --git a/interfaces/file/file.go b/interfaces/file/file.go
index 731c4ed..9e60438 100644
--- a/interfaces/file/file.go
+++ b/interfaces/file/file.go
@@ -12,8 +12,8 @@ import (
"net/smtp"
"os"
"path"
- "strings"
"strconv"
+ "strings"
"time"
"blmayer.dev/x/dovel/interfaces"
@@ -22,9 +22,14 @@ import (
// FileConfig is used to configure the file handler, now it only contains
// the root folder that holds all emails.
+// Root is where mail should be saved, Templates is an optional field that
+// is the path to templates, to be used in the web server; Password is the
+// password for the x user, for now this is very simple; Domain is used to
+// filter and separate emails, only emails sent to one of your domains are
+// saved, each according to its configuration.
type FileConfig struct {
Root string
- Templates string
+ Templates *string
Password string
Domain string
}
@@ -33,7 +38,7 @@ type FileHandler struct {
templates *template.Template
root string
password string
- domain string
+ domain string
}
func NewFileHandler(c FileConfig, fs map[string]any) (FileHandler, error) {
@@ -92,11 +97,11 @@ func (f FileHandler) SendHandler() http.HandlerFunc {
body := bytes.Buffer{}
form := multipart.NewWriter(&body)
email := interfaces.Email{
- From: fo.Value["from"][0],
- To: []string{},
- Cc: []string{},
+ From: fo.Value["from"][0],
+ To: []string{},
+ Cc: []string{},
Subject: fo.Value["subject"][0],
- Date: time.Now(),
+ Date: time.Now(),
}
email.ID = fmt.Sprintf("%s%s", strconv.FormatInt(email.Date.Unix(), 10), email.From)
@@ -111,7 +116,7 @@ func (f FileHandler) SendHandler() http.HandlerFunc {
if len(fo.Value["cc"]) > 0 && fo.Value["cc"][0] != "" {
for _, cc := range fo.Value["cc"] {
- email.Cc = append(email.Cc, fmt.Sprintf("%s", cc))
+ email.Cc = append(email.Cc, fmt.Sprintf("%s", cc))
}
body.WriteString("Cc: " + strings.Join(email.Cc, ", ") + "\r\n")
}
@@ -128,9 +133,9 @@ func (f FileHandler) SendHandler() http.HandlerFunc {
},
)
if err != nil {
- println("creatPart error: " + err.Error())
- http.Error(w, "creatPart error"+err.Error(), http.StatusInternalServerError)
- return
+ println("creatPart error: " + err.Error())
+ http.Error(w, "creatPart error"+err.Error(), http.StatusInternalServerError)
+ return
}
text.Write([]byte(strings.Join(fo.Value["body"], "")))