email: allow sending emails from EU Mailgun domains

The Mailgun API requires being told when a EU email domain is used[1]
so introduce a new `mailgun_europe` config parameter to indicate that.

[1]: https://github.com/mailgun/mailgun-go?tab=readme-ov-file#usage
This commit is contained in:
Stéphane Maniaci 2024-12-09 14:56:24 +01:00
parent f49c0b1c4c
commit 83e0a57338
No known key found for this signature in database
GPG key ID: 4B399DE2A2F0E926
3 changed files with 10 additions and 0 deletions

View file

@ -181,6 +181,7 @@ type (
// Mailgun configuration values // Mailgun configuration values
Domain string `ini:"domain"` Domain string `ini:"domain"`
MailgunPrivate string `ini:"mailgun_private"` MailgunPrivate string `ini:"mailgun_private"`
MailgunEurope bool `ini:"mailgun_europe"`
} }
// Config holds the complete configuration for running a writefreely instance // Config holds the complete configuration for running a writefreely instance

View file

@ -309,6 +309,12 @@ Originally published on ` + p.Collection.DisplayTitle() + ` (` + p.Collection.Ca
Sent to %recipient.to%. Unsubscribe: ` + p.Collection.CanonicalURL() + `email/unsubscribe/%recipient.id%?t=%recipient.token%` Sent to %recipient.to%. Unsubscribe: ` + p.Collection.CanonicalURL() + `email/unsubscribe/%recipient.id%?t=%recipient.token%`
gun := mailgun.NewMailgun(app.cfg.Email.Domain, app.cfg.Email.MailgunPrivate) gun := mailgun.NewMailgun(app.cfg.Email.Domain, app.cfg.Email.MailgunPrivate)
if app.cfg.Email.MailgunEurope {
gun.SetAPIBase("https://api.eu.mailgun.net/v3")
}
m := mailgun.NewMessage(p.Collection.DisplayTitle()+" <"+p.Collection.Alias+"@"+app.cfg.Email.Domain+">", stripmd.Strip(p.DisplayTitle()), plainMsg) m := mailgun.NewMessage(p.Collection.DisplayTitle()+" <"+p.Collection.Alias+"@"+app.cfg.Email.Domain+">", stripmd.Strip(p.DisplayTitle()), plainMsg)
replyTo := app.db.GetCollectionAttribute(collID, collAttrLetterReplyTo) replyTo := app.db.GetCollectionAttribute(collID, collAttrLetterReplyTo)
if replyTo != "" { if replyTo != "" {

View file

@ -36,6 +36,9 @@ func New(eCfg config.EmailCfg) (*Mailer, error) {
m := &Mailer{} m := &Mailer{}
if eCfg.Domain != "" && eCfg.MailgunPrivate != "" { if eCfg.Domain != "" && eCfg.MailgunPrivate != "" {
m.mailGun = mailgun.NewMailgun(eCfg.Domain, eCfg.MailgunPrivate) m.mailGun = mailgun.NewMailgun(eCfg.Domain, eCfg.MailgunPrivate)
if eCfg.MailgunEurope {
m.mailGun.SetAPIBase("https://api.eu.mailgun.net/v3")
}
} else if eCfg.Username != "" && eCfg.Password != "" && eCfg.Host != "" && eCfg.Port > 0 { } else if eCfg.Username != "" && eCfg.Password != "" && eCfg.Host != "" && eCfg.Port > 0 {
m.smtp = mail.NewSMTPClient() m.smtp = mail.NewSMTPClient()
m.smtp.Host = eCfg.Host m.smtp.Host = eCfg.Host