feat(emailApi): added sendTo Field
Build and Push Docker image / build-and-push (push) Successful in 2m18s Details

This commit is contained in:
Valentin Kolb 2024-10-25 16:53:06 +02:00
parent 941da1d576
commit a479cf343a
1 changed files with 30 additions and 10 deletions

View File

@ -13,10 +13,10 @@ import (
) )
// sendEmailToUser sends an email notification to the user // sendEmailToUser sends an email notification to the user
func sendEmailToUser(app *pocketbase.PocketBase, registry *template.Registry, recipient *models.Record, sender *models.Record, emailRecord *models.Record) { func sendEmailToUser(app *pocketbase.PocketBase, registry *template.Registry, recipient *models.Record, sender *models.Record, emailRecord *models.Record) error {
// check if recipient and message are set and recipient is not the sender // check if recipient and message are set and recipient is not the sender
if recipient == nil || emailRecord == nil || sender == nil { if recipient == nil || emailRecord == nil || sender == nil {
return return fmt.Errorf("unable to send email to recipient: recipient, sender or email record is nil")
} }
// sanitize email content // sanitize email content
@ -43,10 +43,7 @@ func sendEmailToUser(app *pocketbase.PocketBase, registry *template.Registry, re
"SUBJECT": subject, "SUBJECT": subject,
}) })
if err != nil { if err != nil {
currentErrors := emailRecord.GetString("errors") return fmt.Errorf("error rendering email template for user with id '%s': %v", recipient.Id, err)
emailRecord.Set("errors", fmt.Sprintf("%s\nThe email was not sent to the user '%s' due to an error.", currentErrors, recipient.Username()))
logger.LogErrorF("Error rendering email notification to recipient with username '%s': %v", recipient.GetString("username"), err)
return
} }
// set reply-to header // set reply-to header
@ -65,10 +62,9 @@ func sendEmailToUser(app *pocketbase.PocketBase, registry *template.Registry, re
Headers: headers, Headers: headers,
} }
if err := app.NewMailClient().Send(email); err != nil { if err := app.NewMailClient().Send(email); err != nil {
currentErrors := emailRecord.GetString("errors") return fmt.Errorf("error sending email to user with id '%s': %v", recipient.Id, err)
emailRecord.Set("errors", fmt.Sprintf("%s\nThe email was not sent to the user '%s' due to an error.", currentErrors, recipient.Username()))
logger.LogErrorF("Error sending email notification to recipient with username '%s': %v", recipient.GetString("username"), err)
} }
return nil
} }
func sendEmails(app *pocketbase.PocketBase, emailRecord *models.Record) { func sendEmails(app *pocketbase.PocketBase, emailRecord *models.Record) {
@ -82,10 +78,34 @@ func sendEmails(app *pocketbase.PocketBase, emailRecord *models.Record) {
return return
} }
// get sender and recipients
sender := emailRecord.ExpandedOne("sender") sender := emailRecord.ExpandedOne("sender")
recipients := emailRecord.ExpandedAll("recipients") recipients := emailRecord.ExpandedAll("recipients")
// this is the list of user ids that the email was sent to
sendToIds := make([]string, 0)
// send email to each recipient
for _, recipient := range recipients { for _, recipient := range recipients {
sendEmailToUser(app, registry, recipient, sender, emailRecord)
// send email to user
err := sendEmailToUser(app, registry, recipient, sender, emailRecord)
// check if there was an error sending the email
if err != nil {
logger.LogErrorF("%v", err)
} else {
sendToIds = append(sendToIds, recipient.Id)
}
}
// set email record fields
emailRecord.Set("sentTo", sendToIds)
emailRecord.Set("wasSent", true)
// save email record
if err := app.Dao().SaveRecord(emailRecord); err != nil {
logger.LogErrorF("Error saving email record: %v", err)
} }
return return