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
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
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
@ -43,10 +43,7 @@ func sendEmailToUser(app *pocketbase.PocketBase, registry *template.Registry, re
"SUBJECT": subject,
})
if err != nil {
currentErrors := emailRecord.GetString("errors")
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
return fmt.Errorf("error rendering email template for user with id '%s': %v", recipient.Id, err)
}
// set reply-to header
@ -65,10 +62,9 @@ func sendEmailToUser(app *pocketbase.PocketBase, registry *template.Registry, re
Headers: headers,
}
if err := app.NewMailClient().Send(email); err != nil {
currentErrors := emailRecord.GetString("errors")
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 fmt.Errorf("error sending email to user with id '%s': %v", recipient.Id, err)
}
return nil
}
func sendEmails(app *pocketbase.PocketBase, emailRecord *models.Record) {
@ -82,10 +78,34 @@ func sendEmails(app *pocketbase.PocketBase, emailRecord *models.Record) {
return
}
// get sender and recipients
sender := emailRecord.ExpandedOne("sender")
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 {
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