EmailService.java 4 KB
package com.ecommerce.notification.service;

import com.ecommerce.notification.model.Notification;
import com.ecommerce.notification.model.dto.EmailRequest;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Service;

import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import java.util.Map;

@Slf4j
@Service
@RequiredArgsConstructor
public class EmailService {
    
    private final JavaMailSender mailSender;
    private final TemplateService templateService;
    
    @Value("${spring.mail.username:no-reply@ecommerce.com}")
    private String fromEmail;
    
    @Value("${spring.mail.from-name:E-Commerce}")
    private String fromName;
    
    public boolean sendEmail(Notification notification) {
        try {
            MimeMessage message = mailSender.createMimeMessage();
            MimeMessageHelper helper = new MimeMessageHelper(message, true, "UTF-8");
            
            helper.setFrom(fromEmail, fromName);
            helper.setTo(notification.getEmail());
            helper.setSubject(notification.getSubject());
            helper.setText(notification.getContent(), true); // HTML content
            
            mailSender.send(message);
            
            log.info("Email sent successfully to: {}", notification.getEmail());
            return true;
            
        } catch (Exception e) {
            log.error("Failed to send email to {}: {}", notification.getEmail(), e.getMessage());
            return false;
        }
    }
    
    public boolean sendEmail(EmailRequest request) {
        try {
            MimeMessage message = mailSender.createMimeMessage();
            MimeMessageHelper helper = new MimeMessageHelper(message, true, "UTF-8");
            
            helper.setFrom(fromEmail, fromName);
            helper.setTo(request.getTo());
            
            if (request.getCc() != null) {
                helper.setCc(request.getCc());
            }
            
            if (request.getBcc() != null) {
                helper.setBcc(request.getBcc());
            }
            
            helper.setSubject(request.getSubject());
            
            // Process template if provided
            String content = request.getContent();
            if (request.getTemplateName() != null) {
                Map<String, Object> templateResult = templateService.processTemplate(
                        request.getTemplateName(), 
                        "EMAIL", 
                        request.getVariables()
                );
                content = (String) templateResult.get("content");
            }
            
            helper.setText(content, request.getIsHtml());
            
            mailSender.send(message);
            
            log.info("Email sent successfully to: {}", request.getTo());
            return true;
            
        } catch (Exception e) {
            log.error("Failed to send email to {}: {}", request.getTo(), e.getMessage());
            return false;
        }
    }
    
    public void sendBulkEmail(String[] toEmails, String subject, String content, boolean isHtml) {
        for (String email : toEmails) {
            try {
                MimeMessage message = mailSender.createMimeMessage();
                MimeMessageHelper helper = new MimeMessageHelper(message, true, "UTF-8");
                
                helper.setFrom(fromEmail, fromName);
                helper.setTo(email);
                helper.setSubject(subject);
                helper.setText(content, isHtml);
                
                mailSender.send(message);
                
                log.info("Bulk email sent successfully to: {}", email);
                
            } catch (Exception e) {
                log.error("Failed to send bulk email to {}: {}", email, e.getMessage());
            }
        }
    }
}