Add configurable domain part for message ids

Fixes #1
This commit is contained in:
Jan Dittberner 2024-06-08 09:38:14 +02:00
parent 20d324f5cb
commit 3d16034c44
2 changed files with 14 additions and 12 deletions

View file

@ -7,6 +7,7 @@ mail_config:
smtp_host: localhost smtp_host: localhost
smtp_port: 25 smtp_port: 25
base_url: https://motions.cacert.org base_url: https://motions.cacert.org
domain: motions.cacert.org
notice_mail_address: cacert-board@lists.cacert.org notice_mail_address: cacert-board@lists.cacert.org
vote_notice_mail_address: cacert-board-votes@lists.cacert.org vote_notice_mail_address: cacert-board-votes@lists.cacert.org
notification_sender_address: returns@cacert.org notification_sender_address: returns@cacert.org

View file

@ -1,5 +1,5 @@
/* /*
Copyright 2017-2022 CAcert Inc. Copyright 2017-2024 CAcert Inc.
SPDX-License-Identifier: Apache-2.0 SPDX-License-Identifier: Apache-2.0
Licensed under the Apache License, Version 2.0 (the "License"); Licensed under the Apache License, Version 2.0 (the "License");
@ -38,6 +38,7 @@ type MailConfig struct {
SMTPHost string `yaml:"smtp_host"` SMTPHost string `yaml:"smtp_host"`
SMTPPort int `yaml:"smtp_port"` SMTPPort int `yaml:"smtp_port"`
SMTPTimeOut time.Duration `yaml:"smtp_timeout,omitempty"` SMTPTimeOut time.Duration `yaml:"smtp_timeout,omitempty"`
Domain string `yaml:"message_id_domain"`
NotificationSenderAddress string `yaml:"notification_sender_address"` NotificationSenderAddress string `yaml:"notification_sender_address"`
NoticeMailAddress string `yaml:"notice_mail_address"` NoticeMailAddress string `yaml:"notice_mail_address"`
VoteNoticeMailAddress string `yaml:"vote_notice_mail_address"` VoteNoticeMailAddress string `yaml:"vote_notice_mail_address"`
@ -202,10 +203,10 @@ func voteNoticeRecipient(mc *MailConfig) recipientData {
} }
} }
func motionReplyHeaders(m *models.Motion) map[string][]string { func motionReplyHeaders(m *models.Motion, mc *MailConfig) map[string][]string {
return map[string][]string{ return map[string][]string{
"References": {fmt.Sprintf("<%s>", m.Tag)}, "References": {fmt.Sprintf("<%s@%s>", m.Tag, mc.Domain)},
"In-Reply-To": {fmt.Sprintf("<%s>", m.Tag)}, "In-Reply-To": {fmt.Sprintf("<%s@%s>", m.Tag, mc.Domain)},
} }
} }
@ -247,7 +248,7 @@ func (c *ClosedDecisionNotification) GetNotificationContent(mc *MailConfig) *Not
*models.Motion *models.Motion
}{Motion: c.Decision}, }{Motion: c.Decision},
subject: fmt.Sprintf("Re: %s - %s - finalized", c.Decision.Tag, c.Decision.Title), subject: fmt.Sprintf("Re: %s - %s - finalized", c.Decision.Tag, c.Decision.Title),
headers: motionReplyHeaders(c.Decision), headers: motionReplyHeaders(c.Decision, mc),
recipients: []recipientData{defaultRecipient(mc)}, recipients: []recipientData{defaultRecipient(mc)},
} }
} }
@ -275,14 +276,14 @@ func (n NewDecisionNotification) GetNotificationContent(mc *MailConfig) *Notific
UnvotedURL: unvotedURL, UnvotedURL: unvotedURL,
}, },
subject: fmt.Sprintf("%s - %s", n.Decision.Tag, n.Decision.Title), subject: fmt.Sprintf("%s - %s", n.Decision.Tag, n.Decision.Title),
headers: n.getHeaders(), headers: n.getHeaders(mc),
recipients: []recipientData{defaultRecipient(mc)}, recipients: []recipientData{defaultRecipient(mc)},
} }
} }
func (n NewDecisionNotification) getHeaders() map[string][]string { func (n NewDecisionNotification) getHeaders(mc *MailConfig) map[string][]string {
return map[string][]string{ return map[string][]string{
"Message-ID": {fmt.Sprintf("<%s>", n.Decision.Tag)}, "Message-ID": {fmt.Sprintf("<%s@%s>", n.Decision.Tag, mc.Domain)},
} }
} }
@ -309,7 +310,7 @@ func (u UpdateDecisionNotification) GetNotificationContent(mc *MailConfig) *Noti
UnvotedURL: unvotedURL, UnvotedURL: unvotedURL,
}, },
subject: fmt.Sprintf("%s - %s", u.Decision.Tag, u.Decision.Title), subject: fmt.Sprintf("%s - %s", u.Decision.Tag, u.Decision.Title),
headers: motionReplyHeaders(u.Decision), headers: motionReplyHeaders(u.Decision, mc),
recipients: []recipientData{defaultRecipient(mc)}, recipients: []recipientData{defaultRecipient(mc)},
} }
} }
@ -333,7 +334,7 @@ func (d DirectVoteNotification) GetNotificationContent(mc *MailConfig) *Notifica
Choice: d.Choice, Choice: d.Choice,
}, },
subject: fmt.Sprintf("Re: %s - %s", d.Decision.Tag, d.Decision.Title), subject: fmt.Sprintf("Re: %s - %s", d.Decision.Tag, d.Decision.Title),
headers: motionReplyHeaders(d.Decision), headers: motionReplyHeaders(d.Decision, mc),
recipients: []recipientData{voteNoticeRecipient(mc)}, recipients: []recipientData{voteNoticeRecipient(mc)},
} }
} }
@ -363,7 +364,7 @@ func (p ProxyVoteNotification) GetNotificationContent(mc *MailConfig) *Notificat
Justification: p.Justification, Justification: p.Justification,
}, },
subject: fmt.Sprintf("Re: %s - %s", p.Decision.Tag, p.Decision.Title), subject: fmt.Sprintf("Re: %s - %s", p.Decision.Tag, p.Decision.Title),
headers: motionReplyHeaders(p.Decision), headers: motionReplyHeaders(p.Decision, mc),
recipients: []recipientData{voteNoticeRecipient(mc)}, recipients: []recipientData{voteNoticeRecipient(mc)},
} }
} }
@ -381,7 +382,7 @@ func (w WithDrawMotionNotification) GetNotificationContent(mc *MailConfig) *Noti
Name string Name string
}{Motion: w.Motion, Name: w.Voter.Name}, }{Motion: w.Motion, Name: w.Voter.Name},
subject: fmt.Sprintf("Re: %s - %s", w.Motion.Tag, w.Motion.Title), subject: fmt.Sprintf("Re: %s - %s", w.Motion.Tag, w.Motion.Title),
headers: motionReplyHeaders(w.Motion), headers: motionReplyHeaders(w.Motion, mc),
recipients: []recipientData{defaultRecipient(mc)}, recipients: []recipientData{defaultRecipient(mc)},
} }
} }