mirror of
https://github.com/warmbly/warmbly.git
synced 2026-08-19 08:01:16 +00:00
79 lines
2.3 KiB
Go
79 lines
2.3 KiB
Go
package tasks
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
|
|
"github.com/google/uuid"
|
|
"github.com/warmbly/warmbly/internal/errx"
|
|
"github.com/warmbly/warmbly/internal/models"
|
|
)
|
|
|
|
// GetCampaignSequences returns the sequences for a campaign ordered by position
|
|
func (s *tasksService) GetCampaignSequences(ctx context.Context, campaignID uuid.UUID) ([]models.Sequence, error) {
|
|
return s.campaignRepo.GetSequencesByCampaignID(ctx, campaignID)
|
|
}
|
|
|
|
// SendTestEmail renders a campaign email and sends it to a test recipient for preview
|
|
func (s *tasksService) SendTestEmail(ctx context.Context, userID string, accountID uuid.UUID, recipient string, campaign *models.Campaign, sequence *models.Sequence) *errx.Error {
|
|
// Load the email account
|
|
account, err := s.emailRepo.GetByID(ctx, accountID)
|
|
if err != nil || account == nil {
|
|
return errx.New(errx.NotFound, "email account not found")
|
|
}
|
|
|
|
// Verify account belongs to user
|
|
if account.UserID != userID {
|
|
return errx.ErrForbidden
|
|
}
|
|
|
|
// Create a dummy contact for template rendering
|
|
testContact := models.Contact{
|
|
ID: uuid.New(),
|
|
FirstName: "Test",
|
|
LastName: "Recipient",
|
|
Email: recipient,
|
|
Company: "Test Company",
|
|
}
|
|
|
|
// Render templates with the test contact
|
|
subject := RenderTemplate(sequence.Subject, testContact)
|
|
bodyHTML := RenderTemplate(sequence.BodyHTML, testContact)
|
|
bodyPlain := RenderTemplate(sequence.BodyPlain, testContact)
|
|
|
|
if bodyPlain == "" && bodyHTML != "" {
|
|
bodyPlain = ExtractPlainTextFromHTML(bodyHTML)
|
|
}
|
|
|
|
// Prepend [TEST] to subject
|
|
subject = "[TEST] " + subject
|
|
|
|
// Add signature if enabled
|
|
if account.SignatureSync {
|
|
bodyHTML = AddSignature(bodyHTML, account.SignatureHTML, true)
|
|
bodyPlain = AddSignature(bodyPlain, account.SignaturePlain, false)
|
|
}
|
|
|
|
// Generate message ID
|
|
messageID := generateMessageID(account.Email)
|
|
|
|
// Build tracking info (disabled for test emails)
|
|
emailMsg := EmailMessage{
|
|
From: account.Email,
|
|
To: []string{recipient},
|
|
Subject: subject,
|
|
BodyHTML: bodyHTML,
|
|
BodyPlain: bodyPlain,
|
|
MessageID: messageID,
|
|
IsWarmup: false,
|
|
UserID: uuid.MustParse(userID),
|
|
}
|
|
|
|
taskID := uuid.New()
|
|
if err := s.emailSender.Send(ctx, taskID, emailMsg, *account); err != nil {
|
|
return errx.New(errx.Internal, fmt.Sprintf("failed to send test email: %v", err))
|
|
}
|
|
|
|
return nil
|
|
}
|