aboutsummaryrefslogtreecommitdiff
path: root/utils/smtp
diff options
context:
space:
mode:
Diffstat (limited to 'utils/smtp')
-rw-r--r--utils/smtp/functions.go34
-rw-r--r--utils/smtp/server.go27
-rw-r--r--utils/smtp/session.go15
-rw-r--r--utils/smtp/storage.go22
-rw-r--r--utils/smtp/types.go4
5 files changed, 44 insertions, 58 deletions
diff --git a/utils/smtp/functions.go b/utils/smtp/functions.go
new file mode 100644
index 0000000..ae9aeae
--- /dev/null
+++ b/utils/smtp/functions.go
@@ -0,0 +1,34 @@
+package smtp
+
+import (
+ "dove/config"
+ "dove/messages"
+ "dove/utils/logger"
+ "time"
+
+ "github.com/emersion/go-smtp"
+)
+
+func createServer(address string) *smtp.Server {
+ smtpServer := smtp.NewServer(smtp.BackendFunc(func(connection *smtp.Conn) (smtp.Session, error) {
+ logger.Debugf(LOG_PREFIX, messages.SMTPSessionStarted, connection.Hostname())
+ return &session{}, nil
+ }))
+
+ smtpServer.Addr = address
+ smtpServer.Domain = config.SMTP.Domain
+ smtpServer.ReadTimeout = time.Duration(config.SMTP.ReadTimeout) * time.Second
+ smtpServer.WriteTimeout = time.Duration(config.SMTP.WriteTimeout) * time.Second
+ smtpServer.MaxMessageBytes = int64(config.SMTP.MaxMessageSize)
+ smtpServer.AllowInsecureAuth = true
+
+ return smtpServer
+}
+
+func startListener(smtpServer *smtp.Server, label string, address string) {
+ logger.Successf(LOG_PREFIX, messages.SMTPServerStarting, label, address)
+
+ if listenError := smtpServer.ListenAndServe(); listenError != nil {
+ logger.Fatalf(LOG_PREFIX, messages.SMTPListenFailed, label, listenError)
+ }
+} \ No newline at end of file
diff --git a/utils/smtp/server.go b/utils/smtp/server.go
index 0092c16..778dd3b 100644
--- a/utils/smtp/server.go
+++ b/utils/smtp/server.go
@@ -5,9 +5,6 @@ import (
"dove/messages"
"dove/utils/logger"
"fmt"
- "time"
-
- gosmtp "github.com/emersion/go-smtp"
)
var activeServers []serverInstance
@@ -30,27 +27,3 @@ func Shutdown() {
logger.Infof(LOG_PREFIX, messages.SMTPShutdownComplete)
}
-
-func createServer(address string) *gosmtp.Server {
- smtpServer := gosmtp.NewServer(gosmtp.BackendFunc(func(connection *gosmtp.Conn) (gosmtp.Session, error) {
- logger.Debugf(LOG_PREFIX, messages.SMTPSessionStarted, connection.Hostname())
- return &session{}, nil
- }))
-
- smtpServer.Addr = address
- smtpServer.Domain = config.SMTP.Domain
- smtpServer.ReadTimeout = time.Duration(config.SMTP.ReadTimeout) * time.Second
- smtpServer.WriteTimeout = time.Duration(config.SMTP.WriteTimeout) * time.Second
- smtpServer.MaxMessageBytes = int64(config.SMTP.MaxMessageSize)
- smtpServer.AllowInsecureAuth = true
-
- return smtpServer
-}
-
-func startListener(smtpServer *gosmtp.Server, label string, address string) {
- logger.Successf(LOG_PREFIX, messages.SMTPServerStarting, label, address)
-
- if listenError := smtpServer.ListenAndServe(); listenError != nil {
- logger.Fatalf(LOG_PREFIX, messages.SMTPListenFailed, label, listenError)
- }
-}
diff --git a/utils/smtp/session.go b/utils/smtp/session.go
index 029c257..fe1f5c4 100644
--- a/utils/smtp/session.go
+++ b/utils/smtp/session.go
@@ -3,11 +3,12 @@ package smtp
import (
"dove/config"
"dove/messages"
- "dove/utils/logger"
+ "dove/services"
"dove/utils/errors"
+ "dove/utils/logger"
"io"
- gosmtp "github.com/emersion/go-smtp"
+ "github.com/emersion/go-smtp"
)
func (self *session) AuthPlain(username string, password string) error {
@@ -23,13 +24,13 @@ func (self *session) AuthPlain(username string, password string) error {
return nil
}
-func (self *session) Mail(senderAddress string, mailOptions *gosmtp.MailOptions) error {
+func (self *session) Mail(senderAddress string, _ *smtp.MailOptions) error {
logger.Debugf(LOG_PREFIX, messages.SMTPMailFrom, senderAddress)
self.fromAddress = senderAddress
return nil
}
-func (self *session) Rcpt(recipientAddress string, recipientOptions *gosmtp.RcptOptions) error {
+func (self *session) Rcpt(recipientAddress string, _ *smtp.RcptOptions) error {
logger.Debugf(LOG_PREFIX, messages.SMTPRecipient, recipientAddress)
self.toAddresses = append(self.toAddresses, recipientAddress)
return nil
@@ -43,9 +44,9 @@ func (self *session) Data(messageReader io.Reader) error {
logger.Infof(LOG_PREFIX, messages.SMTPMessageReceived, len(rawMessage))
- if storeError := storeMessage(self.fromAddress, self.toAddresses, rawMessage); storeError != nil {
- logger.Errorf(LOG_PREFIX, messages.SMTPMessageStoreFailed, storeError)
- return storeError
+ if processError := services.ProcessEmail(rawMessage, self.toAddresses); processError != nil {
+ logger.Errorf(LOG_PREFIX, messages.SMTPMessageStoreFailed, processError)
+ return processError
}
return nil
diff --git a/utils/smtp/storage.go b/utils/smtp/storage.go
deleted file mode 100644
index b580d67..0000000
--- a/utils/smtp/storage.go
+++ /dev/null
@@ -1,22 +0,0 @@
-package smtp
-
-import (
- "dove/config"
- "fmt"
- "os"
- "path/filepath"
- "time"
-)
-
-func storeMessage(fromAddress string, toAddresses []string, rawMessage []byte) error {
- emailDirectory := filepath.Join(config.DataDir, "emails")
-
- if directoryError := os.MkdirAll(emailDirectory, 0750); directoryError != nil {
- return directoryError
- }
-
- filename := fmt.Sprintf("%d.eml", time.Now().UnixNano())
- filePath := filepath.Join(emailDirectory, filename)
-
- return os.WriteFile(filePath, rawMessage, 0640)
-} \ No newline at end of file
diff --git a/utils/smtp/types.go b/utils/smtp/types.go
index 38c6504..aced45a 100644
--- a/utils/smtp/types.go
+++ b/utils/smtp/types.go
@@ -1,6 +1,6 @@
package smtp
-import gosmtp "github.com/emersion/go-smtp"
+import "github.com/emersion/go-smtp"
type session struct {
fromAddress string
@@ -8,6 +8,6 @@ type session struct {
}
type serverInstance struct {
- server *gosmtp.Server
+ server *smtp.Server
label string
}