diff options
author | 赵智超 <1012112796@qq.com> | 2020-08-23 23:03:18 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-08-23 16:03:18 +0100 |
commit | e7d65cbc6e50d70753f7228c46cbff0cffde7eba (patch) | |
tree | b66f497a44ef729a4fc33c3ab2663a958d3e7b0f /services/mailer | |
parent | e429c1164ec68b154b7f06db2c2e04dd25bad094 (diff) | |
download | gitea-e7d65cbc6e50d70753f7228c46cbff0cffde7eba.tar.gz gitea-e7d65cbc6e50d70753f7228c46cbff0cffde7eba.zip |
Add email notify for new release (#12463)
* Add email notify for new release
Signed-off-by: a1012112796 <1012112796@qq.com>
Diffstat (limited to 'services/mailer')
-rw-r--r-- | services/mailer/mail_release.go | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/services/mailer/mail_release.go b/services/mailer/mail_release.go new file mode 100644 index 0000000000..55182f55cf --- /dev/null +++ b/services/mailer/mail_release.go @@ -0,0 +1,69 @@ +// Copyright 2020 The Gitea Authors. All rights reserved. +// Use of this source code is governed by a MIT-style +// license that can be found in the LICENSE file. + +package mailer + +import ( + "bytes" + "fmt" + + "code.gitea.io/gitea/models" + "code.gitea.io/gitea/modules/base" + "code.gitea.io/gitea/modules/log" + "code.gitea.io/gitea/modules/markup/markdown" + "code.gitea.io/gitea/modules/setting" +) + +const ( + tplNewReleaseMail base.TplName = "release" +) + +// MailNewRelease send new release notify to all all repo watchers. +func MailNewRelease(rel *models.Release) { + watcherIDList, err := models.GetRepoWatchersIDs(rel.RepoID) + if err != nil { + log.Error("GetRepoWatchersIDs(%d): %v", rel.RepoID, err) + return + } + + recipients, err := models.GetMaileableUsersByIDs(watcherIDList) + if err != nil { + log.Error("models.GetMaileableUsersByIDs: %v", err) + return + } + + tos := make([]string, 0, len(recipients)) + for _, to := range recipients { + if to.ID != rel.PublisherID { + tos = append(tos, to.Email) + } + } + + rel.RenderedNote = markdown.RenderString(rel.Note, rel.Repo.Link(), rel.Repo.ComposeMetas()) + subject := fmt.Sprintf("%s in %s released", rel.TagName, rel.Repo.FullName()) + + mailMeta := map[string]interface{}{ + "Release": rel, + "Subject": subject, + } + + var mailBody bytes.Buffer + + if err = bodyTemplates.ExecuteTemplate(&mailBody, string(tplNewReleaseMail), mailMeta); err != nil { + log.Error("ExecuteTemplate [%s]: %v", string(tplNewReleaseMail)+"/body", err) + return + } + + msgs := make([]*Message, 0, len(recipients)) + publisherName := rel.Publisher.DisplayName() + relURL := "<" + rel.HTMLURL() + ">" + for _, to := range tos { + msg := NewMessageFrom([]string{to}, publisherName, setting.MailService.FromEmail, subject, mailBody.String()) + msg.Info = subject + msg.SetHeader("Message-ID", relURL) + msgs = append(msgs, msg) + } + + SendAsyncs(msgs) +} |