add !pm relay - per-mailbox relay config

This commit is contained in:
Aine
2024-05-02 11:28:37 +03:00
parent 6a63e44bfc
commit ea1533acae
13 changed files with 135 additions and 32 deletions

View File

@@ -2,6 +2,7 @@ package queue
import (
"context"
"net/url"
"github.com/rs/zerolog"
"gitlab.com/etke.cc/linkpearl"
@@ -22,7 +23,7 @@ type Queue struct {
lp *linkpearl.Linkpearl
cfg *config.Manager
log *zerolog.Logger
sendmail func(string, string, string) error
sendmail func(string, string, string, *url.URL) error
}
// New queue
@@ -36,7 +37,7 @@ func New(lp *linkpearl.Linkpearl, cfg *config.Manager, log *zerolog.Logger) *Que
}
// SetSendmail func
func (q *Queue) SetSendmail(function func(string, string, string) error) {
func (q *Queue) SetSendmail(function func(string, string, string, *url.URL) error) {
q.sendmail = function
}

View File

@@ -2,14 +2,20 @@ package queue
import (
"context"
"net/url"
"strconv"
)
// Add to queue
func (q *Queue) Add(ctx context.Context, id, from, to, data string) error {
func (q *Queue) Add(ctx context.Context, id, from, to, data string, relayOverride ...*url.URL) error {
itemkey := acQueueKey + "." + id
relay := ""
if len(relayOverride) > 0 {
relay = relayOverride[0].String()
}
item := map[string]string{
"attempts": "0",
"relay": relay,
"data": data,
"from": from,
"to": to,
@@ -84,7 +90,12 @@ func (q *Queue) try(ctx context.Context, itemkey string, maxRetries int) bool {
return true
}
err = q.sendmail(item["from"], item["to"], item["data"])
var relayOverride *url.URL
if item["relay"] != "" {
relayOverride, _ = url.Parse(item["relay"]) //nolint:errcheck // doesn't matter
}
err = q.sendmail(item["from"], item["to"], item["data"], relayOverride)
if err == nil {
q.log.Info().Str("id", itemkey).Msg("email from queue was delivered")
return true