Merge pull request 'Fixes #7' (#60) from email-settings into main

Reviewed-on: https://git.ts.mattnite.net/mattnite/forgejo-tickets/pulls/60
This commit is contained in:
Matthew Knight 2026-02-18 17:26:03 +00:00
commit 08dd063049
2 changed files with 16 additions and 6 deletions

View File

@ -65,17 +65,22 @@ func (c *Client) SendPasswordResetEmail(to, name, token string) error {
return err return err
} }
func (c *Client) SendTicketClosedNotification(to, name, ticketTitle, ticketID string) error { func (c *Client) SendTicketClosedNotification(to, name, ticketTitle, ticketID, fromName string) error {
if c.server == nil { if c.server == nil {
return fmt.Errorf("email client not configured") return fmt.Errorf("email client not configured")
} }
from := c.fromEmail
if fromName != "" {
from = fmt.Sprintf("\"%s\" <%s>", fromName, c.fromEmail)
}
ticketURL := fmt.Sprintf("%s/tickets/%s", c.baseURL, ticketID) ticketURL := fmt.Sprintf("%s/tickets/%s", c.baseURL, ticketID)
htmlBody := renderTicketClosedEmail(name, ticketTitle, ticketURL) htmlBody := renderTicketClosedEmail(name, ticketTitle, ticketURL)
textBody := fmt.Sprintf("Hi %s,\n\nYour ticket \"%s\" has been resolved.\n\nView it at: %s", name, ticketTitle, ticketURL) textBody := fmt.Sprintf("Hi %s,\n\nYour ticket \"%s\" has been resolved.\n\nView it at: %s", name, ticketTitle, ticketURL)
_, err := c.server.SendEmail(context.Background(), postmark.Email{ _, err := c.server.SendEmail(context.Background(), postmark.Email{
From: c.fromEmail, From: from,
To: to, To: to,
Subject: fmt.Sprintf("Your ticket \"%s\" has been resolved", ticketTitle), Subject: fmt.Sprintf("Your ticket \"%s\" has been resolved", ticketTitle),
HTMLBody: htmlBody, HTMLBody: htmlBody,
@ -105,17 +110,22 @@ func (c *Client) SendAccountApprovedEmail(to, name string) error {
return err return err
} }
func (c *Client) SendTicketReplyNotification(to, name, ticketTitle, ticketID string) error { func (c *Client) SendTicketReplyNotification(to, name, ticketTitle, ticketID, fromName string) error {
if c.server == nil { if c.server == nil {
return fmt.Errorf("email client not configured") return fmt.Errorf("email client not configured")
} }
from := c.fromEmail
if fromName != "" {
from = fmt.Sprintf("\"%s\" <%s>", fromName, c.fromEmail)
}
ticketURL := fmt.Sprintf("%s/tickets/%s", c.baseURL, ticketID) ticketURL := fmt.Sprintf("%s/tickets/%s", c.baseURL, ticketID)
htmlBody := renderTicketReplyEmail(name, ticketTitle, ticketURL) htmlBody := renderTicketReplyEmail(name, ticketTitle, ticketURL)
textBody := fmt.Sprintf("Hi %s,\n\nThere is a new reply on your ticket \"%s\".\n\nView it at: %s", name, ticketTitle, ticketURL) textBody := fmt.Sprintf("Hi %s,\n\nThere is a new reply on your ticket \"%s\".\n\nView it at: %s", name, ticketTitle, ticketURL)
_, err := c.server.SendEmail(context.Background(), postmark.Email{ _, err := c.server.SendEmail(context.Background(), postmark.Email{
From: c.fromEmail, From: from,
To: to, To: to,
Subject: fmt.Sprintf("New reply on your ticket \"%s\"", ticketTitle), Subject: fmt.Sprintf("New reply on your ticket \"%s\"", ticketTitle),
HTMLBody: htmlBody, HTMLBody: htmlBody,

View File

@ -83,7 +83,7 @@ func (h *WebhookHandler) handleIssueEvent(c *gin.Context, repo *models.Repo, pay
if err := h.deps.DB.First(&user, "id = ?", ticket.UserID).Error; err == nil { if err := h.deps.DB.First(&user, "id = ?", ticket.UserID).Error; err == nil {
go func() { go func() {
if err := h.deps.EmailClient.SendTicketClosedNotification( if err := h.deps.EmailClient.SendTicketClosedNotification(
user.Email, user.Name, payload.Issue.Title, ticket.ID.String(), user.Email, user.Name, payload.Issue.Title, ticket.ID.String(), repo.Name+" Support",
); err != nil { ); err != nil {
log.Error().Err(err).Msg("webhook: send notification error") log.Error().Err(err).Msg("webhook: send notification error")
} }
@ -117,7 +117,7 @@ func (h *WebhookHandler) handleCommentEvent(c *gin.Context, repo *models.Repo, p
if err := h.deps.DB.First(&user, "id = ?", ticket.UserID).Error; err == nil { if err := h.deps.DB.First(&user, "id = ?", ticket.UserID).Error; err == nil {
go func() { go func() {
if err := h.deps.EmailClient.SendTicketReplyNotification( if err := h.deps.EmailClient.SendTicketReplyNotification(
user.Email, user.Name, payload.Issue.Title, ticket.ID.String(), user.Email, user.Name, payload.Issue.Title, ticket.ID.String(), repo.Name+" Support",
); err != nil { ); err != nil {
log.Error().Err(err).Msg("webhook: send reply notification error") log.Error().Err(err).Msg("webhook: send reply notification error")
} }