dnet-applications/apps/dnet-orgs-database-application/src/main/java/eu/dnetlib/organizations/utils/MailDispatcher.java

126 lines
4.1 KiB
Java

package eu.dnetlib.organizations.utils;
import javax.annotation.PostConstruct;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import eu.dnetlib.common.exceptions.DnetException;
import eu.dnetlib.common.utils.mail.EmailFactory;
import eu.dnetlib.common.utils.mail.EmailMessage;
import eu.dnetlib.organizations.controller.UserRole;
import eu.dnetlib.organizations.model.SystemConfiguration;
import eu.dnetlib.organizations.model.view.UserView;
import eu.dnetlib.organizations.repository.SystemConfigurationRepository;
@Component
public class MailDispatcher {
@Autowired
private SystemConfigurationRepository systemConfigurationRepository;
private final EmailFactory emailFactory = new EmailFactory();
private boolean enabled = true;
private String fromMail;
private String fromName;
private String toMailAdmin;
private String newUserMessage;
private String updateUserMessage;
private static final Log log = LogFactory.getLog(MailDispatcher.class);
@PostConstruct
public void configure() {
final SystemConfiguration conf = systemConfigurationRepository.findById(SystemConfiguration.DEFAULT_ID).get();
configure(conf);
}
public void configure(final SystemConfiguration conf) {
this.enabled = conf.getSmtpEnabled();
this.fromMail = conf.getSmtpFromMail();
this.fromName = conf.getSmtpFromName();
this.toMailAdmin = conf.getSmtpToMailAdmin();
this.newUserMessage = conf.getSmtpNewUserMessage();
this.updateUserMessage = conf.getSmtpUpdateUserMessage();
if (StringUtils.isNotBlank(conf.getSmtpHost())) {
emailFactory.setSmtpHost(conf.getSmtpHost());
} else {
emailFactory.setSmtpHost("localhost");
}
if (conf.getSmtpPort() != null) {
emailFactory.setSmtpPort(conf.getSmtpPort());
} else {
emailFactory.setSmtpPort(587);
}
if (StringUtils.isNotBlank(conf.getSmtpUser())) {
emailFactory.setSmtpUser(conf.getSmtpUser());
emailFactory.setSmtpPassword(conf.getSmtpPassword());
} else {
emailFactory.setSmtpUser(null);
emailFactory.setSmtpPassword(null);
}
}
public void sendRequestRegistrationMail(final UserView user) {
if (StringUtils.isNotBlank(newUserMessage)) {
final String message = prepareMessage(this.newUserMessage, user);
for (final String to : StringUtils.split(toMailAdmin, ",")) {
sendMail("OpenOrgs: new registration request", message, to.trim());
}
} else {
log.warn("Template is empty (newUserMessage)");
}
}
public void sendUpdatedUserMail(final UserView user) {
if (StringUtils.isNotBlank(updateUserMessage)) {
final String message = prepareMessage(this.updateUserMessage, user);
sendMail("OpenOrgs: user updated", message, user.getEmail());
} else {
log.warn("Template is empty (updateUserMessage)");
}
}
private String prepareMessage(final String template, final UserView user) {
final String countries = user.getRole().equals(UserRole.ADMIN.toString()) ? "All" : StringUtils.join(user.getCountries(), ", ");
return template.replaceAll(":email:", user.getEmail())
.replaceAll(":fullname:", user.getFullname())
.replaceAll(":organization:", user.getOrganization())
.replaceAll(":refperson:", user.getReferencePerson())
.replaceAll(":reqmessage:", user.getRequestMessage())
.replaceAll(":role:", user.getRole())
.replaceAll(":countries:", countries);
}
private void sendMail(final String subject, final String content, final String to) {
if (!enabled) {
log.debug("Mail not sent: MailDispatcher is disabled");
} else if (StringUtils.isAnyBlank(subject, content, to, fromMail, fromName)) {
log.warn("Mail not sent: some fields are empty");
log.warn(" - subject: " + subject);
log.warn(" - to: " + to);
log.warn(" - fromMail: " + fromMail);
log.warn(" - fromName: " + fromName);
log.warn(" - content: " + content);
} else {
try {
final EmailMessage mail = emailFactory.prepareEmail(subject, content, fromMail, fromName, to);
mail.sendMail();
} catch (final DnetException e) {
log.error("Error sending mail", e);
}
}
}
}