diff --git a/CHANGELOG.md b/CHANGELOG.md index 1ceeb8f..3fa795a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,15 @@ Notable changes to Mailpit will be documented in this file. +## [v1.14.2] + +### Chore +- Allow setting of multiple message tags via plus addresses ([#253](https://github.com/axllent/mailpit/issues/253)) + +### Fix +- Prevent runtime error when calculating total messages size of empty table ([#263](https://github.com/axllent/mailpit/issues/263)) + + ## [v1.14.1] ### Chore diff --git a/internal/storage/settings.go b/internal/storage/settings.go index d67d1b8..5a8a218 100644 --- a/internal/storage/settings.go +++ b/internal/storage/settings.go @@ -51,7 +51,7 @@ func getDeletedSize() int64 { // The total raw non-compressed messages size in bytes of all messages in the database func totalMessagesSize() int64 { - var result int64 + var result sql.NullInt64 err := sqlf.From("mailbox"). Select("SUM(Size)").To(&result). QueryAndClose(nil, db, func(row *sql.Rows) {}) @@ -60,7 +60,7 @@ func totalMessagesSize() int64 { return 0 } - return result + return result.Int64 } // AddDeletedSize will add the value to the DeletedSize setting diff --git a/internal/storage/tags.go b/internal/storage/tags.go index 3341e70..2dec4db 100644 --- a/internal/storage/tags.go +++ b/internal/storage/tags.go @@ -13,7 +13,7 @@ import ( ) var ( - addressPlusRe = regexp.MustCompile(`^(.*){1,}\+(.*)@`) + addressPlusRe = regexp.MustCompile(`(?U)^(.*){1,}\+(.*)@`) ) // SetMessageTags will set the tags for a given database ID @@ -246,25 +246,25 @@ func (d DBMailSummary) tagsFromPlusAddresses() string { tags := []string{} for _, c := range d.To { matches := addressPlusRe.FindAllStringSubmatch(c.String(), 1) - if len(matches) == 1 && config.ValidTagRegexp.MatchString(matches[0][2]) { - tags = append(tags, matches[0][2]) + if len(matches) == 1 { + tags = append(tags, strings.Split(matches[0][2], "+")...) } } for _, c := range d.Cc { matches := addressPlusRe.FindAllStringSubmatch(c.String(), 1) - if len(matches) == 1 && config.ValidTagRegexp.MatchString(matches[0][2]) { - tags = append(tags, matches[0][2]) + if len(matches) == 1 { + tags = append(tags, strings.Split(matches[0][2], "+")...) } } for _, c := range d.Bcc { matches := addressPlusRe.FindAllStringSubmatch(c.String(), 1) - if len(matches) == 1 && config.ValidTagRegexp.MatchString(matches[0][2]) { - tags = append(tags, matches[0][2]) + if len(matches) == 1 { + tags = append(tags, strings.Split(matches[0][2], "+")...) } } matches := addressPlusRe.FindAllStringSubmatch(d.From.String(), 1) - if len(matches) == 1 && config.ValidTagRegexp.MatchString(matches[0][2]) { - tags = append(tags, matches[0][2]) + if len(matches) == 1 { + tags = append(tags, strings.Split(matches[0][2], "+")...) } return strings.Join(tags, ",")