package org.zalando.catwatch.backend.mail; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.mail.SimpleMailMessage; import org.springframework.mail.javamail.JavaMailSender; import org.springframework.stereotype.Service; import static java.lang.String.format; import static java.util.Arrays.stream; import static java.util.stream.Collectors.joining; @Service public class MailSender { private final JavaMailSender javaMailSender; private final String destinationAddress; private final String sourceAddress; @Autowired public MailSender(JavaMailSender javaMailSender, @Value("${mail.to}") String destinationAddress, @Value("${mail.from}") String sourceAddress) { this.javaMailSender = javaMailSender; this.destinationAddress = destinationAddress; this.sourceAddress = sourceAddress; } public boolean send(Throwable e) { javaMailSender.send(createMessageFor(e)); return true; } private SimpleMailMessage createMessageFor(Throwable e) { SimpleMailMessage mailMessage = new SimpleMailMessage(); mailMessage.setTo(destinationAddress); mailMessage.setFrom(sourceAddress); mailMessage.setSubject("GitHub crawler failed to fetch data"); mailMessage.setText(format("%s\n%s", e.getMessage(), stream(e.getStackTrace()).map(StackTraceElement::toString).collect(joining("\n")))); return mailMessage; } }