1
0
mirror of https://github.com/containrrr/watchtower.git synced 2025-02-01 19:14:37 +02:00

Send mails that correspond to RFC2045 with a base64 line limit of 76 characters.

This commit is contained in:
Fabrizio Steiner 2018-01-23 20:05:18 +01:00
parent 28dff65282
commit 09f047ab8b
2 changed files with 30 additions and 1 deletions

View File

@ -72,7 +72,12 @@ func (e *emailTypeNotifier) buildMessage(entries []*log.Entry) []byte {
for k, v := range header {
message += fmt.Sprintf("%s: %s\r\n", k, v)
}
message += "\r\n" + base64.StdEncoding.EncodeToString([]byte(body))
encodedBody := base64.StdEncoding.EncodeToString([]byte(body))
//RFC 2045 base64 encoding demands line no longer than 76 characters.
for _, line := range SplitSubN(encodedBody, 76) {
message += "\r\n" + line
}
return []byte(message)
}

24
notifications/util.go Normal file
View File

@ -0,0 +1,24 @@
package notifications
import "bytes"
// SplitSubN splits a string into a list of string with each having
// a maximum number of characters n
func SplitSubN(s string, n int) []string {
sub := ""
subs := []string{}
runes := bytes.Runes([]byte(s))
l := len(runes)
for i, r := range runes {
sub = sub + string(r)
if (i+1)%n == 0 {
subs = append(subs, sub)
sub = ""
} else if (i + 1) == l {
subs = append(subs, sub)
}
}
return subs
}