ACSSendMailTask.java
package com.sintia.ffl.admin.optique.catalogue.util.mail;
import com.azure.communication.email.EmailClient;
import com.azure.communication.email.models.EmailMessage;
import com.azure.communication.email.models.EmailSendResult;
import com.azure.core.util.polling.LongRunningOperationStatus;
import com.azure.core.util.polling.PollResponse;
import com.azure.core.util.polling.SyncPoller;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.annotation.Profile;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;
import java.util.Arrays;
import java.util.stream.Collectors;
/**
* Envoi de mail via Azure Communication Services
*/
@Component
@Profile("!smtp")
@RequiredArgsConstructor
@Slf4j
public class ACSSendMailTask implements SendMailTask {
private final EmailClient emailClient;
@Override
public void sendMail(String[] recipients, String[] cc, String subject, String body, String sendMailFrom) {
// Éliminer les chaines vides
String[] ccFiltered = new String[] {};
if(cc != null) {
ccFiltered = Arrays.stream(cc)
.map(String::trim)
.filter(StringUtils::hasText)
.collect(Collectors.toList())
.toArray(new String[]{});
}
EmailMessage emailMessage = new EmailMessage()
.setSenderAddress(sendMailFrom)
.setToRecipients(recipients)
.setCcRecipients(ccFiltered)
.setSubject(subject)
.setBodyPlainText(body);
try {
SyncPoller<EmailSendResult, EmailSendResult> poller = this.emailClient.beginSend(emailMessage, null);
PollResponse<EmailSendResult> result = poller.waitForCompletion();
if(LongRunningOperationStatus.FAILED.equals(result.getStatus())){
log.error("Échec d'envoi du mail : {}\n\n{}", subject, body);
} else {
log.info("Mail envoyé");
}
} catch(Exception ex){
log.error("Échec d'envoi du mail : {}\n\n{}", subject, body, ex);
}
}
}