package net.gepafin.tendermanagement.service.impl; import com.mashape.unirest.http.HttpResponse; import com.mashape.unirest.http.Unirest; 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.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import java.util.Base64; import java.util.List; @Service public class MailgunEmailService implements EmailService { @Value("${isMailSendingEnabled}") private String isEmailSendingEnabled; @Autowired private Validator validator; @Autowired private EmailLogDao emailLogDao; @Override public void sendEmail(String subject, String body, List recipientEmails, EmailConfig emailConfig, EmailLogRequest emailLogRequest) { if (Boolean.FALSE.equals(Boolean.parseBoolean(isEmailSendingEnabled))) { return; } String url = emailConfig.getUrl(); String from = emailConfig.getSender(); String apiKey = emailConfig.getApiKey(); String authHeader = "Basic " + Base64.getEncoder().encodeToString(("api:" + apiKey).getBytes()); // Send email via Mailgun API HttpResponse response2=null; if (Boolean.FALSE.equals(validator.isTestProfileActivated())) { emailLogRequest.setRecipientEmails(Utils.listToCommaSeparatedString(recipientEmails)); try { Unirest.setTimeouts(0, 0); response2 = Unirest.post(url) .header("Authorization", authHeader) // .header("content-type", "multipart/form-data") .field("from", from) .field("to", recipientEmails) .field("subject", subject) .field("html", body) .asString(); }catch(Exception e) { emailLogRequest.setSendStatus(StatusTypeEnum.FAILED.getValue()); emailLogRequest.setEmailServiceType(EmailServiceTypeEnum.MAILGUN_SERVICE); emailLogRequest.setErrorMessage(e.getMessage()); EmailLogEntity emailLogEntity= emailLogDao.createEmailLog(emailLogRequest); throw new RuntimeException("Failed to send email via Mailgun: " + response2.getStatus()); } emailLogRequest.setEmailServiceResponse(response2.getBody()); } emailLogRequest.setEmailServiceType(EmailServiceTypeEnum.MAILGUN_SERVICE); EmailLogEntity emailLogEntity= emailLogDao.createEmailLog(emailLogRequest); } }