-
-
Notifications
You must be signed in to change notification settings - Fork 5.6k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add option for mailer to override mail headers (#27860)
Add option to override headers of mails, gitea send out --- *Sponsored by Kithara Software GmbH*
- Loading branch information
Showing
5 changed files
with
128 additions
and
10 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -1687,6 +1687,16 @@ LEVEL = Info | |
;; convert \r\n to \n for Sendmail | ||
;SENDMAIL_CONVERT_CRLF = true | ||
|
||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | ||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | ||
;[mailer.override_header] | ||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | ||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | ||
;; This is empty by default, use it only if you know what you need it for. | ||
;Reply-To = [email protected], [email protected] | ||
;Content-Type = text/html; charset=utf-8 | ||
;In-Reply-To = | ||
|
||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | ||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | ||
;[email.incoming] | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -724,11 +724,13 @@ Define allowed algorithms and their minimum key length (use -1 to disable a type | |
|
||
## Mailer (`mailer`) | ||
|
||
⚠️ This section is for Gitea 1.18 and later. If you are using Gitea 1.17 or older, | ||
:::warning | ||
This section is for Gitea 1.18 and later. If you are using Gitea 1.17 or older, | ||
please refer to | ||
[Gitea 1.17 app.ini example](https://github.com/go-gitea/gitea/blob/release/v1.17/custom/conf/app.example.ini) | ||
and | ||
[Gitea 1.17 configuration document](https://github.com/go-gitea/gitea/blob/release/v1.17/docs/content/doc/advanced/config-cheat-sheet.en-us.md) | ||
::: | ||
|
||
- `ENABLED`: **false**: Enable to use a mail service. | ||
- `PROTOCOL`: **_empty_**: Mail server protocol. One of "smtp", "smtps", "smtp+starttls", "smtp+unix", "sendmail", "dummy". _Before 1.18, this was inferred from a combination of `MAILER_TYPE` and `IS_TLS_ENABLED`._ | ||
|
@@ -761,6 +763,21 @@ and | |
- `SEND_BUFFER_LEN`: **100**: Buffer length of mailing queue. **DEPRECATED** use `LENGTH` in `[queue.mailer]` | ||
- `SEND_AS_PLAIN_TEXT`: **false**: Send mails only in plain text, without HTML alternative. | ||
|
||
## Override Email Headers (`mailer.override_header`) | ||
|
||
:::warning | ||
This is empty by default, use it only if you know what you need it for. | ||
::: | ||
|
||
examples would be: | ||
|
||
```ini | ||
[mailer.override_header] | ||
Reply-To = [email protected], [email protected] | ||
Content-Type = text/html; charset=utf-8 | ||
In-Reply-To = | ||
``` | ||
|
||
## Incoming Email (`email.incoming`) | ||
|
||
- `ENABLED`: **false**: Enable handling of incoming emails. | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -4,6 +4,7 @@ | |
package mailer | ||
|
||
import ( | ||
"strings" | ||
"testing" | ||
"time" | ||
|
||
|
@@ -36,3 +37,78 @@ func TestGenerateMessageID(t *testing.T) { | |
gm = m.ToMessage() | ||
assert.Equal(t, "<[email protected]>", gm.GetHeader("Message-ID")[0]) | ||
} | ||
|
||
func TestToMessage(t *testing.T) { | ||
oldConf := *setting.MailService | ||
defer func() { | ||
setting.MailService = &oldConf | ||
}() | ||
setting.MailService.From = "[email protected]" | ||
|
||
m1 := Message{ | ||
Info: "info", | ||
FromAddress: "[email protected]", | ||
FromDisplayName: "Test Gitea", | ||
To: "[email protected]", | ||
Subject: "Issue X Closed", | ||
Body: "Some Issue got closed by Y-Man", | ||
} | ||
|
||
buf := &strings.Builder{} | ||
_, err := m1.ToMessage().WriteTo(buf) | ||
assert.NoError(t, err) | ||
header, _ := extractMailHeaderAndContent(t, buf.String()) | ||
assert.EqualValues(t, map[string]string{ | ||
"Content-Type": "multipart/alternative;", | ||
"Date": "Mon, 01 Jan 0001 00:00:00 +0000", | ||
"From": "\"Test Gitea\" <[email protected]>", | ||
"Message-ID": "<autogen--6795364578871-69c000786adc60dc@localhost>", | ||
"Mime-Version": "1.0", | ||
"Subject": "Issue X Closed", | ||
"To": "[email protected]", | ||
"X-Auto-Response-Suppress": "All", | ||
}, header) | ||
|
||
setting.MailService.OverrideHeader = map[string][]string{ | ||
"Message-ID": {""}, // delete message id | ||
"Auto-Submitted": {"auto-generated"}, // suppress auto replay | ||
} | ||
|
||
buf = &strings.Builder{} | ||
_, err = m1.ToMessage().WriteTo(buf) | ||
assert.NoError(t, err) | ||
header, _ = extractMailHeaderAndContent(t, buf.String()) | ||
assert.EqualValues(t, map[string]string{ | ||
"Content-Type": "multipart/alternative;", | ||
"Date": "Mon, 01 Jan 0001 00:00:00 +0000", | ||
"From": "\"Test Gitea\" <[email protected]>", | ||
"Message-ID": "", | ||
"Mime-Version": "1.0", | ||
"Subject": "Issue X Closed", | ||
"To": "[email protected]", | ||
"X-Auto-Response-Suppress": "All", | ||
"Auto-Submitted": "auto-generated", | ||
}, header) | ||
} | ||
|
||
func extractMailHeaderAndContent(t *testing.T, mail string) (map[string]string, string) { | ||
header := make(map[string]string) | ||
|
||
parts := strings.SplitN(mail, "boundary=", 2) | ||
if !assert.Len(t, parts, 2) { | ||
return nil, "" | ||
} | ||
content := strings.TrimSpace("boundary=" + parts[1]) | ||
|
||
hParts := strings.Split(parts[0], "\n") | ||
|
||
for _, hPart := range hParts { | ||
parts := strings.SplitN(hPart, ":", 2) | ||
hk := strings.TrimSpace(parts[0]) | ||
if hk != "" { | ||
header[hk] = strings.TrimSpace(parts[1]) | ||
} | ||
} | ||
|
||
return header, content | ||
} |