Done ticket GEPAFINBE-199 Implemented the code to send the email to rinaldo from mailgun service like bflows.

This commit is contained in:
piyushkag
2025-04-18 18:48:49 +05:30
parent 586f872b34
commit 8e1dcecf66
9 changed files with 128 additions and 52 deletions

View File

@@ -12,13 +12,15 @@ public class EmailServiceFactory {
@Autowired
private MailgunEmailService mailgunEmailService;
@Autowired
private SystemEmailService systemEmailService;
public EmailService getEmailService(String serviceType) {
if ("MAILGUN_SERVICE".equals(serviceType)) {
return mailgunEmailService;
} else if ("PEC_SERVICE".equals(serviceType)) {
return pecEmailService;
} else {
throw new IllegalArgumentException("Invalid email service type: " + serviceType);
}
return switch (serviceType) {
case "PEC_SERVICE" -> pecEmailService;
case "SYSTEM_EMAIL_SERVICE" -> systemEmailService;
default -> mailgunEmailService;
};
}
}

View File

@@ -0,0 +1,83 @@
package net.gepafin.tendermanagement.service.impl;
import com.mailgun.api.v3.MailgunMessagesApi;
import com.mailgun.client.MailgunClient;
import com.mailgun.model.message.MessageResponse;
import net.gepafin.tendermanagement.dao.EmailLogDao;
import net.gepafin.tendermanagement.entities.EmailLogEntity;
import net.gepafin.tendermanagement.enums.EmailServiceTypeEnum;
import net.gepafin.tendermanagement.enums.StatusTypeEnum;
import net.gepafin.tendermanagement.model.request.EmailConfig;
import net.gepafin.tendermanagement.model.request.EmailLogRequest;
import net.gepafin.tendermanagement.util.Utils;
import net.gepafin.tendermanagement.util.Validator;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import java.util.List;
@Component
public class SystemEmailService implements EmailService {
@Value("${mailGun_user}")
public String mailGunUser;
@Value("${mailGun_apiKey}")
public String mailGunApiKey;
@Value("${mailGun_domainName}")
public String mailGunDomainName;
@Value("${mailGun_base_url}")
public String mailGunBaseUrl;
@Value("${isMailSendingEnabled}")
private String isEmailSendingEnabled;
@Autowired
private Validator validator;
@Autowired
private EmailLogDao emailLogDao;
public final Logger log = LoggerFactory.getLogger(SystemEmailService.class);
public void sendEmail(String subject, String body, List<String> recipientEmails, EmailConfig emailConfig, EmailLogRequest emailLogRequest) {
if (Boolean.FALSE.equals(Boolean.parseBoolean(isEmailSendingEnabled))) {
return;
}
emailLogRequest.setEmailSubject(subject);
emailLogRequest.setEmailBody(body);
emailLogRequest.setSendStatus(StatusTypeEnum.SUCCESS.getValue());
emailLogRequest.setRecipientEmails(Utils.listToCommaSeparatedString(recipientEmails));
if (Boolean.FALSE.equals(validator.isTestProfileActivated())) {
MessageResponse response = null;
try {
MailgunMessagesApi mailgunMessagesApi = MailgunClient.config(mailGunBaseUrl, mailGunApiKey).createApi(MailgunMessagesApi.class);
String mailFrom = mailGunUser;
com.mailgun.model.message.Message message = com.mailgun.model.message.Message.builder().from(mailFrom).to(recipientEmails).subject(subject).html(body).build();
response = mailgunMessagesApi.sendMessage(mailGunDomainName, message);
} catch (Exception e) {
emailLogRequest.setSendStatus(StatusTypeEnum.FAILED.getValue());
emailLogRequest.setEmailServiceType(EmailServiceTypeEnum.SYSTEM_EMAIL_SERVICE);
emailLogRequest.setErrorMessage(e.getMessage());
emailLogDao.createEmailLog(emailLogRequest);
throw new RuntimeException("Failed to send email via Mailgun: " + (response != null ? response.getMessage() : "No response from Mailgun"), e);
}
emailLogRequest.setEmailServiceResponse(response.toString());
emailLogDao.createEmailLog(emailLogRequest);
}
}
}