/*
* Copyright 2013-2014 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package de.codecentric.boot.admin.notify;
import java.util.Arrays;
import org.springframework.expression.EvaluationContext;
import org.springframework.expression.Expression;
import org.springframework.expression.ParserContext;
import org.springframework.expression.spel.standard.SpelExpressionParser;
import org.springframework.expression.spel.support.StandardEvaluationContext;
import org.springframework.mail.MailSender;
import org.springframework.mail.SimpleMailMessage;
import de.codecentric.boot.admin.event.ClientApplicationEvent;
/**
* Notifier sending emails.
*
* @author Johannes Edmeier
*/
public class MailNotifier extends AbstractStatusChangeNotifier {
private static final String DEFAULT_SUBJECT = "#{application.name} (#{application.id}) is #{to.status}";
private static final String DEFAULT_TEXT = "#{application.name} (#{application.id})\nstatus changed from #{from.status} to #{to.status}\n\n#{application.healthUrl}";
private final SpelExpressionParser parser = new SpelExpressionParser();
private final MailSender sender;
/**
* recipients of the mail
*/
private String to[] = { "root@localhost" };
/**
* cc-recipients of the mail
*/
private String cc[];
/**
* sender of the change
*/
private String from = null;
/**
* Mail Text. SpEL template using event as root;
*/
private Expression text;
/**
* Mail Subject. SpEL template using event as root;
*/
private Expression subject;
public MailNotifier(MailSender sender) {
this.sender = sender;
this.subject = parser.parseExpression(DEFAULT_SUBJECT, ParserContext.TEMPLATE_EXPRESSION);
this.text = parser.parseExpression(DEFAULT_TEXT, ParserContext.TEMPLATE_EXPRESSION);
}
@Override
protected void doNotify(ClientApplicationEvent event) {
EvaluationContext context = new StandardEvaluationContext(event);
SimpleMailMessage message = new SimpleMailMessage();
message.setTo(to);
message.setFrom(from);
message.setSubject(subject.getValue(context, String.class));
message.setText(text.getValue(context, String.class));
message.setCc(cc);
sender.send(message);
}
public void setTo(String[] to) {
this.to = Arrays.copyOf(to, to.length);
}
public String[] getTo() {
return Arrays.copyOf(to, to.length);
}
public void setCc(String[] cc) {
this.cc = Arrays.copyOf(cc, cc.length);
}
public String[] getCc() {
return Arrays.copyOf(cc, cc.length);
}
public void setFrom(String from) {
this.from = from;
}
public String getFrom() {
return from;
}
public void setSubject(String subject) {
this.subject = parser.parseExpression(subject, ParserContext.TEMPLATE_EXPRESSION);
}
public String getSubject() {
return subject.getExpressionString();
}
public void setText(String text) {
this.text = parser.parseExpression(text, ParserContext.TEMPLATE_EXPRESSION);
}
public String getText() {
return text.getExpressionString();
}
}