Add email notify for new release (#12463)
* Add email notify for new release Signed-off-by: a1012112796 <1012112796@qq.com>tokarchuk/v1.17
parent
e429c1164e
commit
e7d65cbc6e
@ -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) |
||||||
|
} |
@ -0,0 +1,56 @@ |
|||||||
|
<!DOCTYPE html> |
||||||
|
<html> |
||||||
|
<head> |
||||||
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> |
||||||
|
<title>{{.Subject}}</title> |
||||||
|
|
||||||
|
<style> |
||||||
|
blockquote { padding-left: 1em; margin: 1em 0; border-left: 1px solid grey; color: #777} |
||||||
|
.footer { font-size:small; color:#666;} |
||||||
|
</style> |
||||||
|
|
||||||
|
</head> |
||||||
|
|
||||||
|
<body> |
||||||
|
<p><b>@{{.Release.Publisher.Name}}</b> released <a href="{{.Release.HTMLURL}}">{{.Release.TagName}}</a> |
||||||
|
in <a href="{{AppUrl}}{{.Release.Repo.OwnerName}}/{{.Release.Repo.Name}}">{{.Release.Repo.FullName}} </p> |
||||||
|
<h4>Title: {{.Release.Title}}</h4> |
||||||
|
<p> |
||||||
|
Note: <br> |
||||||
|
{{- if eq .Release.RenderedNote ""}} |
||||||
|
{{else}} |
||||||
|
{{.Release.RenderedNote | Str2html}} |
||||||
|
{{end -}} |
||||||
|
</p> |
||||||
|
<br><br> |
||||||
|
<p> |
||||||
|
--- |
||||||
|
<br> |
||||||
|
Downloads: |
||||||
|
<ul> |
||||||
|
<li> |
||||||
|
<a href="{{AppUrl}}{{.Release.Repo.OwnerName}}/{{.Release.Repo.Name}}/archive/{{.Release.TagName | EscapePound}}.zip" rel="nofollow"><strong> Source Code (ZIP)</strong></a> |
||||||
|
</li> |
||||||
|
<li> |
||||||
|
<a href="{{AppUrl}}{{.Release.Repo.OwnerName}}/{{.Release.Repo.Name}}/archive/{{.Release.TagName | EscapePound}}.tar.gz"><strong> Source Code (TAR.GZ)</strong></a> |
||||||
|
</li> |
||||||
|
{{if .Release.Attachments}} |
||||||
|
{{range .Release.Attachments}} |
||||||
|
<li> |
||||||
|
<a target="_blank" rel="noopener noreferrer" href="{{.DownloadURL}}"> |
||||||
|
<strong>{{.Name}} ({{.Size | FileSize}})</strong> |
||||||
|
</a> |
||||||
|
</li> |
||||||
|
{{end}} |
||||||
|
{{end}} |
||||||
|
</ul> |
||||||
|
</p> |
||||||
|
<div class="footer"> |
||||||
|
<p> |
||||||
|
--- |
||||||
|
<br> |
||||||
|
<a href="{{.Release.HTMLURL}}">View it on {{AppName}}</a>. |
||||||
|
</p> |
||||||
|
</div> |
||||||
|
</body> |
||||||
|
</html> |
Loading…
Reference in new issue