mirror of
https://github.com/knadh/listmonk.git
synced 2025-02-26 15:26:13 +08:00
This is a major breaking change that moves away from having the entire app configuration in external TOML files to settings being in the database with a UI to update them dynamically. The app loads all config into memory (app settings, SMTP conf) on boot. "Hot" replacing them is complex and it's a fair tradeoff to instead just restart the application as it is practically instant. A new `settings` table stores arbitrary string keys with a JSONB value field which happens to support arbitrary types. After every settings update, the app gracefully releases all resources (HTTP server, DB pool, SMTP pool etc.) and restarts itself, occupying the same PID. If there are any running campaigns, the auto-restart doesn't happen and the user is prompted to invoke it manually with a one-click button once all running campaigns have been paused.
34 lines
1,022 B
Go
34 lines
1,022 B
Go
package messenger
|
|
|
|
import "net/textproto"
|
|
|
|
// Messenger is an interface for a generic messaging backend,
|
|
// for instance, e-mail, SMS etc.
|
|
type Messenger interface {
|
|
Name() string
|
|
Push(fromAddr string, toAddr []string, subject string, message []byte, atts []Attachment) error
|
|
Flush() error
|
|
Close() error
|
|
}
|
|
|
|
// Attachment represents a file or blob attachment that can be
|
|
// sent along with a message by a Messenger.
|
|
type Attachment struct {
|
|
Name string
|
|
Header textproto.MIMEHeader
|
|
Content []byte
|
|
}
|
|
|
|
// MakeAttachmentHeader is a helper function that returns a
|
|
// textproto.MIMEHeader tailored for attachments, primarily
|
|
// email. If no encoding is given, base64 is assumed.
|
|
func MakeAttachmentHeader(filename, encoding string) textproto.MIMEHeader {
|
|
if encoding == "" {
|
|
encoding = "base64"
|
|
}
|
|
h := textproto.MIMEHeader{}
|
|
h.Set("Content-Disposition", "attachment; filename="+filename)
|
|
h.Set("Content-Type", "application/json; name=\""+filename+"\"")
|
|
h.Set("Content-Transfer-Encoding", encoding)
|
|
return h
|
|
}
|