mirror of
https://github.com/go-gitea/gitea
synced 2025-07-23 02:38:35 +00:00
Add email headers (#15939)
* Added additional email headers. * Added tests. Co-authored-by: Lunny Xiao <xiaolunwen@gmail.com>
This commit is contained in:
@@ -11,6 +11,7 @@ import (
|
||||
"html/template"
|
||||
"mime"
|
||||
"regexp"
|
||||
"strconv"
|
||||
"strings"
|
||||
texttmpl "text/template"
|
||||
|
||||
@@ -174,7 +175,7 @@ func SendCollaboratorMail(u, doer *models.User, repo *models.Repository) {
|
||||
SendAsync(msg)
|
||||
}
|
||||
|
||||
func composeIssueCommentMessages(ctx *mailCommentContext, lang string, tos []string, fromMention bool, info string) ([]*Message, error) {
|
||||
func composeIssueCommentMessages(ctx *mailCommentContext, lang string, recipients []*models.User, fromMention bool, info string) ([]*Message, error) {
|
||||
var (
|
||||
subject string
|
||||
link string
|
||||
@@ -265,9 +266,9 @@ func composeIssueCommentMessages(ctx *mailCommentContext, lang string, tos []str
|
||||
}
|
||||
|
||||
// Make sure to compose independent messages to avoid leaking user emails
|
||||
msgs := make([]*Message, 0, len(tos))
|
||||
for _, to := range tos {
|
||||
msg := NewMessageFrom([]string{to}, ctx.Doer.DisplayName(), setting.MailService.FromEmail, subject, mailBody.String())
|
||||
msgs := make([]*Message, 0, len(recipients))
|
||||
for _, recipient := range recipients {
|
||||
msg := NewMessageFrom([]string{recipient.Email}, ctx.Doer.DisplayName(), setting.MailService.FromEmail, subject, mailBody.String())
|
||||
msg.Info = fmt.Sprintf("Subject: %s, %s", subject, info)
|
||||
|
||||
// Set Message-ID on first message so replies know what to reference
|
||||
@@ -277,12 +278,51 @@ func composeIssueCommentMessages(ctx *mailCommentContext, lang string, tos []str
|
||||
msg.SetHeader("In-Reply-To", "<"+ctx.Issue.ReplyReference()+">")
|
||||
msg.SetHeader("References", "<"+ctx.Issue.ReplyReference()+">")
|
||||
}
|
||||
|
||||
for key, value := range generateAdditionalHeaders(ctx, actType, recipient) {
|
||||
msg.SetHeader(key, value)
|
||||
}
|
||||
|
||||
msgs = append(msgs, msg)
|
||||
}
|
||||
|
||||
return msgs, nil
|
||||
}
|
||||
|
||||
func generateAdditionalHeaders(ctx *mailCommentContext, reason string, recipient *models.User) map[string]string {
|
||||
repo := ctx.Issue.Repo
|
||||
|
||||
return map[string]string{
|
||||
// https://datatracker.ietf.org/doc/html/rfc2919
|
||||
"List-ID": fmt.Sprintf("%s <%s.%s.%s>", repo.FullName(), repo.Name, repo.OwnerName, setting.Domain),
|
||||
|
||||
// https://datatracker.ietf.org/doc/html/rfc2369
|
||||
"List-Archive": fmt.Sprintf("<%s>", repo.HTMLURL()),
|
||||
//"List-Post": https://github.com/go-gitea/gitea/pull/13585
|
||||
//"List-Unsubscribe": https://github.com/go-gitea/gitea/issues/10808, https://github.com/go-gitea/gitea/issues/13283
|
||||
|
||||
"X-Gitea-Reason": reason,
|
||||
"X-Gitea-Sender": ctx.Doer.DisplayName(),
|
||||
"X-Gitea-Recipient": recipient.DisplayName(),
|
||||
"X-Gitea-Recipient-Address": recipient.Email,
|
||||
"X-Gitea-Repository": repo.Name,
|
||||
"X-Gitea-Repository-Path": repo.FullName(),
|
||||
"X-Gitea-Repository-Link": repo.HTMLURL(),
|
||||
"X-Gitea-Issue-ID": strconv.FormatInt(ctx.Issue.Index, 10),
|
||||
"X-Gitea-Issue-Link": ctx.Issue.HTMLURL(),
|
||||
|
||||
"X-GitHub-Reason": reason,
|
||||
"X-GitHub-Sender": ctx.Doer.DisplayName(),
|
||||
"X-GitHub-Recipient": recipient.DisplayName(),
|
||||
"X-GitHub-Recipient-Address": recipient.Email,
|
||||
|
||||
"X-GitLab-NotificationReason": reason,
|
||||
"X-GitLab-Project": repo.Name,
|
||||
"X-GitLab-Project-Path": repo.FullName(),
|
||||
"X-GitLab-Issue-IID": strconv.FormatInt(ctx.Issue.Index, 10),
|
||||
}
|
||||
}
|
||||
|
||||
func sanitizeSubject(subject string) string {
|
||||
runes := []rune(strings.TrimSpace(subjectRemoveSpaces.ReplaceAllLiteralString(subject, " ")))
|
||||
if len(runes) > mailMaxSubjectRunes {
|
||||
@@ -294,9 +334,9 @@ func sanitizeSubject(subject string) string {
|
||||
|
||||
// SendIssueAssignedMail composes and sends issue assigned email
|
||||
func SendIssueAssignedMail(issue *models.Issue, doer *models.User, content string, comment *models.Comment, recipients []*models.User) error {
|
||||
langMap := make(map[string][]string)
|
||||
langMap := make(map[string][]*models.User)
|
||||
for _, user := range recipients {
|
||||
langMap[user.Language] = append(langMap[user.Language], user.Email)
|
||||
langMap[user.Language] = append(langMap[user.Language], user)
|
||||
}
|
||||
|
||||
for lang, tos := range langMap {
|
||||
|
Reference in New Issue
Block a user