Skip to content

Commit fed20de

Browse files
committed
Feature: Add relay config to preserve (keep) original Message-IDs when relaying messages (#515)
1 parent 6999b2e commit fed20de

File tree

6 files changed

+21
-9
lines changed

6 files changed

+21
-9
lines changed

cmd/root.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -331,6 +331,7 @@ func initConfigFromEnv() {
331331
config.SMTPRelayConfig.OverrideFrom = os.Getenv("MP_SMTP_RELAY_OVERRIDE_FROM")
332332
config.SMTPRelayConfig.AllowedRecipients = os.Getenv("MP_SMTP_RELAY_ALLOWED_RECIPIENTS")
333333
config.SMTPRelayConfig.BlockedRecipients = os.Getenv("MP_SMTP_RELAY_BLOCKED_RECIPIENTS")
334+
config.SMTPRelayConfig.PreserveMessageIDs = getEnabledFromEnv("MP_SMTP_RELAY_PRESERVE_MESSAGE_IDS")
334335

335336
// SMTP forwarding
336337
config.SMTPForwardConfigFile = os.Getenv("MP_SMTP_FORWARD_CONFIG")

config/config.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -237,6 +237,7 @@ type SMTPRelayConfigStruct struct {
237237
AllowedRecipientsRegexp *regexp.Regexp // compiled regexp using AllowedRecipients
238238
BlockedRecipients string `yaml:"blocked-recipients"` // regex, if set prevents relating to these addresses
239239
BlockedRecipientsRegexp *regexp.Regexp // compiled regexp using BlockedRecipients
240+
PreserveMessageIDs bool `yaml:"preserve-message-ids"` // preserve the original Message-ID when relaying
240241

241242
// DEPRECATED 2024/03/12
242243
RecipientAllowlist string `yaml:"recipient-allowlist"`

server/apiv1/application.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,9 @@ type webUIConfiguration struct {
6262
BlockedRecipients string
6363
// Overrides the "From" address for all relayed messages
6464
OverrideFrom string
65+
// Preserve the original Message-IDs when relaying messages
66+
PreserveMessageIDs bool
67+
6568
// DEPRECATED 2024/03/12
6669
// swagger:ignore
6770
RecipientAllowlist string
@@ -117,6 +120,8 @@ func WebUIConfig(w http.ResponseWriter, _ *http.Request) {
117120
conf.MessageRelay.AllowedRecipients = config.SMTPRelayConfig.AllowedRecipients
118121
conf.MessageRelay.BlockedRecipients = config.SMTPRelayConfig.BlockedRecipients
119122
conf.MessageRelay.OverrideFrom = config.SMTPRelayConfig.OverrideFrom
123+
conf.MessageRelay.PreserveMessageIDs = config.SMTPRelayConfig.PreserveMessageIDs
124+
120125
// DEPRECATED 2024/03/12
121126
conf.MessageRelay.RecipientAllowlist = config.SMTPRelayConfig.AllowedRecipients
122127
}

server/apiv1/release.go

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -176,13 +176,14 @@ func ReleaseMessage(w http.ResponseWriter, r *http.Request) {
176176
return
177177
}
178178

179-
// generate unique ID
180-
uid := shortuuid.New() + "@mailpit"
181-
// update Message-ID with unique ID
182-
msg, err = tools.SetMessageHeader(msg, "Message-ID", "<"+uid+">")
183-
if err != nil {
184-
httpError(w, err.Error())
185-
return
179+
if !config.SMTPRelayConfig.PreserveMessageIDs {
180+
// replace the Message-ID header with unique ID
181+
uid := shortuuid.New() + "@mailpit"
182+
msg, err = tools.SetMessageHeader(msg, "Message-ID", "<"+uid+">")
183+
if err != nil {
184+
httpError(w, err.Error())
185+
return
186+
}
186187
}
187188

188189
if err := smtpd.Relay(from, data.To, msg); err != nil {

server/ui-src/components/message/Release.vue

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -140,8 +140,8 @@ export default {
140140
will be rejected:
141141
<code>{{ mailbox.uiConfig.MessageRelay.BlockedRecipients }}</code>
142142
</li>
143-
<li class="form-text">
144-
For testing purposes, a new unique <code>Message-Id</code> will be generated on send.
143+
<li v-if="!mailbox.uiConfig.MessageRelay.PreserveMessageIDs" class="form-text">
144+
For testing purposes, a new unique <code>Message-ID</code> will be generated on send.
145145
</li>
146146
<li v-if="mailbox.uiConfig.MessageRelay.OverrideFrom != ''" class="form-text">
147147
The <code>From</code> email address has been overridden by the relay configuration to

server/ui/api/v1/swagger.json

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2016,6 +2016,10 @@
20162016
"description": "Overrides the \"From\" address for all relayed messages",
20172017
"type": "string"
20182018
},
2019+
"PreserveMessageIDs": {
2020+
"description": "Preserve the original Message-IDs when relaying messages",
2021+
"type": "boolean"
2022+
},
20192023
"ReturnPath": {
20202024
"description": "Enforced Return-Path (if set) for relay bounces",
20212025
"type": "string"

0 commit comments

Comments
 (0)