mirror of https://github.com/go-gitea/gitea
Add email notify for new release (#12463)
* Add email notify for new release Signed-off-by: a1012112796 <1012112796@qq.com>pull/12169/head^2
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