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

34f91c4

Author: blmayer (bleemayer@gmail.com)

Date: Tue Oct 3 20:38:57 2023 -0300

Parent: 6e3d4ea

Added buffer to read hook output

Diff

cmd/dovel/backend.go

diff --git a/cmd/dovel/backend.go b/cmd/dovel/backend.go
index a26e561..d4fbe63 100644
--- a/cmd/dovel/backend.go
+++ b/cmd/dovel/backend.go
@@ -93,7 +93,7 @@ func (s *Session) Data(raw io.Reader) error {
 		}
 
 		// running handlers is optional
-		h := path.Join(configPath, "hooks", "send-" + cfg.Domain)
+		h := path.Join(configPath, "hooks", "send-"+cfg.Domain)
 		if f, err := os.Lstat(h); err == nil {
 			if !f.Mode().IsRegular() {
 				h, err = os.Readlink(h)
@@ -105,9 +105,10 @@ func (s *Session) Data(raw io.Reader) error {
 			c := exec.Command(h)
 			c.Dir = path.Join(configPath, "hooks")
 			c.Stdin = strings.NewReader(string(mess))
-			c.Stdout = os.Stdout
+			out := bytes.Buffer{}
+			c.Stdout = &out
 			if err := c.Run(); err != nil {
-				slog.Error("run script", err.Error())
+				slog.Error("run script", "error", err.Error(), "output", out.String())
 				return err
 			}
 		}
@@ -117,7 +118,7 @@ func (s *Session) Data(raw io.Reader) error {
 	for _, to := range tos {
 		domain := strings.Split(to.Address, "@")[1]
 
-		h := path.Join(configPath, "hooks", "receive-" + domain)
+		h := path.Join(configPath, "hooks", "receive-"+domain)
 		if f, err := os.Lstat(h); err != nil {
 			slog.Error("lstat error", "domain", domain, "error", err.Error())
 			continue
@@ -131,8 +132,10 @@ func (s *Session) Data(raw io.Reader) error {
 		c := exec.Command(h)
 		c.Dir = path.Join(configPath, "hooks")
 		c.Stdin = strings.NewReader(string(mess))
-		c.Stdout = os.Stdout
+		out := bytes.Buffer{}
+		c.Stdout = &out
 		if err := c.Run(); err != nil {
+			slog.Error("run script", "error", err.Error(), "output", out.String())
 			slog.Error("run script", err.Error())
 			continue
 		}