JavaMailConsistencyChecker.java
package fr.sii.ogham.email.builder.javamail;
import fr.sii.ogham.core.exception.MessagingException;
import jakarta.activation.DataContentHandler;
import jakarta.activation.MailcapCommandMap;
import jakarta.mail.Provider;
import jakarta.mail.Session;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;
import static java.util.Arrays.asList;
public class JavaMailConsistencyChecker {
public static List<Provider> checkMailProvidersAvailable() throws JavaMailConsistencyException {
try {
Provider[] providers = Session.getInstance(new Properties()).getProviders();
return asList(providers);
} catch(Exception | NoClassDefFoundError e) {
throw new JavaMailProvidersLoadFailed(e);
}
}
public static List<DataContentHandler> checkDataHandlersAvailable() throws JavaMailConsistencyException {
try {
MailcapCommandMap commandMap = new MailcapCommandMap();
List<DataContentHandler> found = new ArrayList<>();
for (String mimetype : commandMap.getMimeTypes()) {
DataContentHandler dataContentHandler = commandMap.createDataContentHandler(mimetype);
if (dataContentHandler != null) {
found.add(dataContentHandler);
}
}
return found;
} catch(Exception | NoClassDefFoundError e) {
throw new JavaDataHandlersLoadFailed(e);
}
}
public static class JavaMailConsistencyException extends MessagingException {
public JavaMailConsistencyException(String message, Throwable cause) {
super(message, cause);
}
}
public static class JavaMailProvidersLoadFailed extends JavaMailConsistencyException {
public JavaMailProvidersLoadFailed(Throwable cause) {
super("jakarta.mail.Provider implementations can't be loaded. Cause: "+cause.getMessage(), cause);
}
}
public static class JavaDataHandlersLoadFailed extends JavaMailConsistencyException {
public JavaDataHandlersLoadFailed(Throwable cause) {
super("jakarta.activation.DataHandler implementations can't be loaded. Cause: "+cause.getMessage(), cause);
}
}
}