diff options
Diffstat (limited to 'internal/db/issue_mail.go')
-rw-r--r-- | internal/db/issue_mail.go | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/internal/db/issue_mail.go b/internal/db/issue_mail.go index d529ecdd..f094cf98 100644 --- a/internal/db/issue_mail.go +++ b/internal/db/issue_mail.go @@ -8,6 +8,7 @@ import ( "context" "fmt" + "github.com/pkg/errors" "github.com/unknwon/com" log "unknwon.dev/clog/v2" @@ -99,6 +100,8 @@ func NewMailerIssue(issue *Issue) email.Issue { // 1. Repository watchers, users who participated in comments and the assignee. // 2. Users who are not in 1. but get mentioned in current issue/comment. func mailIssueCommentToParticipants(issue *Issue, doer *User, mentions []string) error { + ctx := context.TODO() + if !conf.User.EnableEmailNotification { return nil } @@ -125,7 +128,7 @@ func mailIssueCommentToParticipants(issue *Issue, doer *User, mentions []string) continue } - to, err := Users.GetByID(context.TODO(), watchers[i].UserID) + to, err := Users.GetByID(ctx, watchers[i].UserID) if err != nil { return fmt.Errorf("GetUserByID [%d]: %v", watchers[i].UserID, err) } @@ -156,15 +159,20 @@ func mailIssueCommentToParticipants(issue *Issue, doer *User, mentions []string) // Mail mentioned people and exclude watchers. names = append(names, doer.Name) - tos = make([]string, 0, len(mentions)) // list of user names. + toUsernames := make([]string, 0, len(mentions)) // list of user names. for i := range mentions { if com.IsSliceContainsStr(names, mentions[i]) { continue } - tos = append(tos, mentions[i]) + toUsernames = append(toUsernames, mentions[i]) + } + + tos, err = Users.GetMailableEmailsByUsernames(ctx, toUsernames) + if err != nil { + return errors.Wrap(err, "get mailable emails by usernames") } - email.SendIssueMentionMail(NewMailerIssue(issue), NewMailerRepo(issue.Repo), NewMailerUser(doer), GetUserEmailsByNames(tos)) + email.SendIssueMentionMail(NewMailerIssue(issue), NewMailerRepo(issue.Repo), NewMailerUser(doer), tos) return nil } |