blob: 1aaebc55eabcf318784cbdd05c8f3ae8fdff4d52 [file] [log] [blame]
package de.ids_mannheim.korap.service;
import java.io.StringWriter;
import java.nio.charset.StandardCharsets;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.apache.velocity.VelocityContext;
import org.apache.velocity.app.VelocityEngine;
import org.apache.velocity.context.Context;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.mail.javamail.MimeMessagePreparator;
import org.springframework.stereotype.Service;
import de.ids_mannheim.korap.authentication.AuthenticationManager;
import de.ids_mannheim.korap.config.FullConfiguration;
import de.ids_mannheim.korap.exceptions.KustvaktException;
import de.ids_mannheim.korap.user.User;
import de.ids_mannheim.korap.utils.ParameterChecker;
/**
* Manages mail related services, such as sending group member
* invitations per email.
*
* @author margaretha
*
*/
@Service
public class MailService {
public static Logger jlog = LogManager.getLogger(MailService.class);
public static boolean DEBUG = false;
@Autowired
private AuthenticationManager authenticationManager;
@Autowired
private JavaMailSender mailSender;
@Autowired
private VelocityEngine velocityEngine;
@Autowired
private FullConfiguration config;
public void sendMemberInvitationNotification (String inviteeName,
String groupName, String inviter) throws KustvaktException {
ParameterChecker.checkStringValue(inviteeName, "inviteeName");
ParameterChecker.checkStringValue(groupName, "groupName");
ParameterChecker.checkStringValue(inviter, "inviter");
MimeMessagePreparator preparator = new MimeMessagePreparator() {
public void prepare (MimeMessage mimeMessage) throws Exception {
User invitee = authenticationManager.getUser(inviteeName,
config.getEmailAddressRetrieval());
MimeMessageHelper message = new MimeMessageHelper(mimeMessage);
message.setTo(new InternetAddress(invitee.getEmail()));
message.setFrom(config.getNoReply());
message.setSubject("Invitation to join " + groupName);
message.setText(prepareGroupInvitationText(inviteeName,
groupName, inviter), true);
}
};
mailSender.send(preparator);
}
private String prepareGroupInvitationText (String username,
String groupName, String inviter) {
Context context = new VelocityContext();
context.put("username", username);
context.put("group", groupName);
context.put("inviter", inviter);
StringWriter stringWriter = new StringWriter();
velocityEngine.mergeTemplate(
"templates/" + config.getGroupInvitationTemplate(),
StandardCharsets.UTF_8.name(), context, stringWriter);
String message = stringWriter.toString();
if (DEBUG) jlog.debug(message);
return message;
}
}