diff --git a/models/user.go b/models/user.go index dcf908de76..87d191eb63 100644 --- a/models/user.go +++ b/models/user.go @@ -1418,11 +1418,21 @@ func getUserEmailsByNames(e Engine, names []string) []string { } // GetMaileableUsersByIDs gets users from ids, but only if they can receive mails -func GetMaileableUsersByIDs(ids []int64) ([]*User, error) { +func GetMaileableUsersByIDs(ids []int64, isMention bool) ([]*User, error) { if len(ids) == 0 { return nil, nil } ous := make([]*User, 0, len(ids)) + + if isMention { + return ous, x.In("id", ids). + Where("`type` = ?", UserTypeIndividual). + And("`prohibit_login` = ?", false). + And("`is_active` = ?", true). + And("`email_notifications_preference` IN ( ?, ?)", EmailNotificationsEnabled, EmailNotificationsOnMention). + Find(&ous) + } + return ous, x.In("id", ids). Where("`type` = ?", UserTypeIndividual). And("`prohibit_login` = ?", false). diff --git a/models/user_test.go b/models/user_test.go index 02b1893c43..607a08e677 100644 --- a/models/user_test.go +++ b/models/user_test.go @@ -389,3 +389,20 @@ func TestGetUserIDsByNames(t *testing.T) { assert.Error(t, err) assert.Equal(t, []int64(nil), IDs) } + +func TestGetMaileableUsersByIDs(t *testing.T) { + results, err := GetMaileableUsersByIDs([]int64{1, 4}, false) + assert.NoError(t, err) + assert.Equal(t, 1, len(results)) + if len(results) > 1 { + assert.Equal(t, results[0].ID, 1) + } + + results, err = GetMaileableUsersByIDs([]int64{1, 4}, true) + assert.NoError(t, err) + assert.Equal(t, 2, len(results)) + if len(results) > 2 { + assert.Equal(t, results[0].ID, 1) + assert.Equal(t, results[1].ID, 4) + } +} diff --git a/services/mailer/mail_issue.go b/services/mailer/mail_issue.go index 1030a9548e..01c198984b 100644 --- a/services/mailer/mail_issue.go +++ b/services/mailer/mail_issue.go @@ -118,7 +118,7 @@ func mailIssueCommentBatch(ctx *mailCommentContext, ids []int64, visited map[int visited[id] = true } } - recipients, err := models.GetMaileableUsersByIDs(unique) + recipients, err := models.GetMaileableUsersByIDs(unique, fromMention) if err != nil { return err }