diff options
Diffstat (limited to 'utils/smtp')
| -rw-r--r-- | utils/smtp/functions.go | 34 | ||||
| -rw-r--r-- | utils/smtp/server.go | 27 | ||||
| -rw-r--r-- | utils/smtp/session.go | 15 | ||||
| -rw-r--r-- | utils/smtp/storage.go | 22 | ||||
| -rw-r--r-- | utils/smtp/types.go | 4 |
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 } |
