embed http server
This commit is contained in:
parent
4d0076e625
commit
5a43b094bb
@ -1,7 +1,9 @@
|
|||||||
package services
|
package services
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"encoding/json"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"io"
|
||||||
cfg "mailsrv/config"
|
cfg "mailsrv/config"
|
||||||
"mailsrv/mail"
|
"mailsrv/mail"
|
||||||
"mailsrv/runtime"
|
"mailsrv/runtime"
|
||||||
@ -12,6 +14,7 @@ import (
|
|||||||
"syscall"
|
"syscall"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"net/http"
|
||||||
"net/smtp"
|
"net/smtp"
|
||||||
|
|
||||||
"github.com/rs/zerolog/log"
|
"github.com/rs/zerolog/log"
|
||||||
@ -43,7 +46,6 @@ func (s Sender) SendMail(email mail.Email) error {
|
|||||||
log.Debug().Msg("SMTP authentication succeed")
|
log.Debug().Msg("SMTP authentication succeed")
|
||||||
|
|
||||||
if err := smtp.SendMail(s.smtpConfig.GetFullUrl(), auth, email.Sender, email.GetReceivers(), email.Generate()); err != nil {
|
if err := smtp.SendMail(s.smtpConfig.GetFullUrl(), auth, email.Sender, email.GetReceivers(), email.Generate()); err != nil {
|
||||||
log.Err(err).Msg("error while sending email")
|
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -51,6 +53,35 @@ func (s Sender) SendMail(email mail.Email) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s Sender) mailHandler(w http.ResponseWriter, r *http.Request) {
|
||||||
|
content, err := io.ReadAll(r.Body)
|
||||||
|
if err != nil {
|
||||||
|
log.Err(err).Msg("unable to read request body")
|
||||||
|
w.WriteHeader(http.StatusInternalServerError)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
var mail mail.Email
|
||||||
|
if err := json.Unmarshal(content, &mail); err != nil {
|
||||||
|
log.Err(err).Msg("unable to deserialized request body into mail")
|
||||||
|
w.WriteHeader(http.StatusInternalServerError)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
s.queue.Add(mail)
|
||||||
|
w.WriteHeader(http.StatusOK)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s Sender) runHTTPserver() {
|
||||||
|
|
||||||
|
mux := http.NewServeMux()
|
||||||
|
mux.HandleFunc("/mail", s.mailHandler)
|
||||||
|
|
||||||
|
if err := http.ListenAndServe(":1212", mux); err != nil {
|
||||||
|
log.Err(err).Msg("http server stops listening")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// watchOutbox reads the `outbox` directory every `TickInterval` and put JSON format e-mail in the queue.
|
// watchOutbox reads the `outbox` directory every `TickInterval` and put JSON format e-mail in the queue.
|
||||||
func (s Sender) watchOutbox() {
|
func (s Sender) watchOutbox() {
|
||||||
log.Info().Str("outbox", s.outboxPath).Msg("start watching outbox directory")
|
log.Info().Str("outbox", s.outboxPath).Msg("start watching outbox directory")
|
||||||
@ -149,6 +180,8 @@ func (s Sender) Run() {
|
|||||||
s.watchOutbox()
|
s.watchOutbox()
|
||||||
chQueue := s.run()
|
chQueue := s.run()
|
||||||
|
|
||||||
|
go s.runHTTPserver()
|
||||||
|
|
||||||
select {
|
select {
|
||||||
case <-chSignal:
|
case <-chSignal:
|
||||||
log.Warn().Msg("stop signal received, stopping e-mail queue...")
|
log.Warn().Msg("stop signal received, stopping e-mail queue...")
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user