mirror of
				https://gitee.com/gitea/gitea
				synced 2025-11-04 08:30:25 +08:00 
			
		
		
		
	Various fixes for issue mail notifications (#7165)
- Send individual mails for actions and comments - Send mail for new issues/prs without a comment - Use correct sender for reopen/close actions - Hopefully fixed all bugs related to missing mails Fixes: https://github.com/go-gitea/gitea/issues/7124 Fixes: https://github.com/go-gitea/gitea/issues/5977
This commit is contained in:
		@@ -403,16 +403,23 @@ func (c *Comment) mailParticipants(e Engine, opType ActionType, issue *Issue) (e
 | 
			
		||||
		return fmt.Errorf("UpdateIssueMentions [%d]: %v", c.IssueID, err)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	content := c.Content
 | 
			
		||||
	if len(c.Content) > 0 {
 | 
			
		||||
		if err = mailIssueCommentToParticipants(e, issue, c.Poster, c.Content, c, mentions); err != nil {
 | 
			
		||||
			log.Error("mailIssueCommentToParticipants: %v", err)
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	switch opType {
 | 
			
		||||
	case ActionCloseIssue:
 | 
			
		||||
		content = fmt.Sprintf("Closed #%d", issue.Index)
 | 
			
		||||
		ct := fmt.Sprintf("Closed #%d.", issue.Index)
 | 
			
		||||
		if err = mailIssueCommentToParticipants(e, issue, c.Poster, ct, c, mentions); err != nil {
 | 
			
		||||
			log.Error("mailIssueCommentToParticipants: %v", err)
 | 
			
		||||
		}
 | 
			
		||||
	case ActionReopenIssue:
 | 
			
		||||
		content = fmt.Sprintf("Reopened #%d", issue.Index)
 | 
			
		||||
	}
 | 
			
		||||
	if err = mailIssueCommentToParticipants(e, issue, c.Poster, content, c, mentions); err != nil {
 | 
			
		||||
		log.Error("mailIssueCommentToParticipants: %v", err)
 | 
			
		||||
		ct := fmt.Sprintf("Reopened #%d.", issue.Index)
 | 
			
		||||
		if err = mailIssueCommentToParticipants(e, issue, c.Poster, ct, c, mentions); err != nil {
 | 
			
		||||
			log.Error("mailIssueCommentToParticipants: %v", err)
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return nil
 | 
			
		||||
 
 | 
			
		||||
@@ -118,26 +118,41 @@ func mailIssueCommentToParticipants(e Engine, issue *Issue, doer *User, content
 | 
			
		||||
 | 
			
		||||
// MailParticipants sends new issue thread created emails to repository watchers
 | 
			
		||||
// and mentioned people.
 | 
			
		||||
func (issue *Issue) MailParticipants(opType ActionType) (err error) {
 | 
			
		||||
	return issue.mailParticipants(x, opType)
 | 
			
		||||
func (issue *Issue) MailParticipants(doer *User, opType ActionType) (err error) {
 | 
			
		||||
	return issue.mailParticipants(x, doer, opType)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (issue *Issue) mailParticipants(e Engine, opType ActionType) (err error) {
 | 
			
		||||
func (issue *Issue) mailParticipants(e Engine, doer *User, opType ActionType) (err error) {
 | 
			
		||||
	mentions := markup.FindAllMentions(issue.Content)
 | 
			
		||||
 | 
			
		||||
	if err = UpdateIssueMentions(e, issue.ID, mentions); err != nil {
 | 
			
		||||
		return fmt.Errorf("UpdateIssueMentions [%d]: %v", issue.ID, err)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	var content = issue.Content
 | 
			
		||||
	switch opType {
 | 
			
		||||
	case ActionCloseIssue, ActionClosePullRequest:
 | 
			
		||||
		content = fmt.Sprintf("Closed #%d", issue.Index)
 | 
			
		||||
	case ActionReopenIssue, ActionReopenPullRequest:
 | 
			
		||||
		content = fmt.Sprintf("Reopened #%d", issue.Index)
 | 
			
		||||
	if len(issue.Content) > 0 {
 | 
			
		||||
		if err = mailIssueCommentToParticipants(e, issue, doer, issue.Content, nil, mentions); err != nil {
 | 
			
		||||
			log.Error("mailIssueCommentToParticipants: %v", err)
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if err = mailIssueCommentToParticipants(e, issue, issue.Poster, content, nil, mentions); err != nil {
 | 
			
		||||
		log.Error("mailIssueCommentToParticipants: %v", err)
 | 
			
		||||
	switch opType {
 | 
			
		||||
	case ActionCreateIssue, ActionCreatePullRequest:
 | 
			
		||||
		if len(issue.Content) == 0 {
 | 
			
		||||
			ct := fmt.Sprintf("Created #%d.", issue.Index)
 | 
			
		||||
			if err = mailIssueCommentToParticipants(e, issue, doer, ct, nil, mentions); err != nil {
 | 
			
		||||
				log.Error("mailIssueCommentToParticipants: %v", err)
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	case ActionCloseIssue, ActionClosePullRequest:
 | 
			
		||||
		ct := fmt.Sprintf("Closed #%d.", issue.Index)
 | 
			
		||||
		if err = mailIssueCommentToParticipants(e, issue, doer, ct, nil, mentions); err != nil {
 | 
			
		||||
			log.Error("mailIssueCommentToParticipants: %v", err)
 | 
			
		||||
		}
 | 
			
		||||
	case ActionReopenIssue, ActionReopenPullRequest:
 | 
			
		||||
		ct := fmt.Sprintf("Reopened #%d.", issue.Index)
 | 
			
		||||
		if err = mailIssueCommentToParticipants(e, issue, doer, ct, nil, mentions); err != nil {
 | 
			
		||||
			log.Error("mailIssueCommentToParticipants: %v", err)
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return nil
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user