Add email notify for new release (#12463)
* Add email notify for new release Signed-off-by: a1012112796 <1012112796@qq.com>
This commit is contained in:
parent
e429c1164e
commit
e7d65cbc6e
4 changed files with 139 additions and 0 deletions
69
services/mailer/mail_release.go
Normal file
69
services/mailer/mail_release.go
Normal file
|
@ -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)
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue