summaryrefslogtreecommitdiffstats
path: root/services/mailer/mail_release.go
diff options
context:
space:
mode:
author赵智超 <1012112796@qq.com>2020-08-23 23:03:18 +0800
committerGitHub <noreply@github.com>2020-08-23 16:03:18 +0100
commite7d65cbc6e50d70753f7228c46cbff0cffde7eba (patch)
treeb66f497a44ef729a4fc33c3ab2663a958d3e7b0f /services/mailer/mail_release.go
parente429c1164ec68b154b7f06db2c2e04dd25bad094 (diff)
downloadgitea-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/mail_release.go')
-rw-r--r--services/mailer/mail_release.go69
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)
+}