Files
likedream/internal/framework/schedule/email_handler.go
T
2026-03-26 15:19:43 +08:00

45 lines
1.2 KiB
Go

package schedule
import (
"bytes"
"context"
"encoding/gob"
"likedream-goframe/internal/framework/logger"
payloadmodel "likedream-goframe/internal/framework/model/email"
mailservice "likedream-goframe/internal/service/email"
"likedream-goframe/internal/utils"
"github.com/hibiken/asynq"
"github.com/samber/oops"
"go.uber.org/zap"
)
type EmailTaskHandler struct{}
func (h *EmailTaskHandler) ProcessTask(ctx context.Context, task *asynq.Task) (err error) {
defer utils.Pass(&err)
var payload payloadmodel.SendPayload
if e := gob.NewDecoder(bytes.NewReader(task.Payload())).Decode(&payload); e != nil {
utils.OkOrPanic(e, oops.WithContext(ctx).Wrap)
}
logger.Logger.Info("start sending email", zap.String("to", payload.To))
defer func() {
if r := recover(); r != nil {
logger.Logger.Error("send email failed", zap.String("to", payload.To), zap.Error(r.(error)))
panic(r)
}
}()
svc := mailservice.NewV1()
cfg := mailservice.ConfigFromPayload(payload)
if e := svc.SendMessageNow(ctx, cfg, payload.To, payload.Subject, payload.Body); e != nil {
utils.OkOrPanic(e, oops.WithContext(ctx).Wrap)
}
logger.Logger.Info("email sent", zap.String("to", payload.To))
return nil
}