JKZLMailNotifier.java 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. package com.yihu.admin.email;
  2. import de.codecentric.boot.admin.event.ClientApplicationEvent;
  3. import de.codecentric.boot.admin.notify.MailNotifier;
  4. import org.slf4j.Logger;
  5. import org.slf4j.LoggerFactory;
  6. import org.springframework.boot.context.properties.ConfigurationProperties;
  7. import org.springframework.expression.EvaluationContext;
  8. import org.springframework.expression.Expression;
  9. import org.springframework.expression.ParserContext;
  10. import org.springframework.expression.spel.standard.SpelExpressionParser;
  11. import org.springframework.expression.spel.support.StandardEvaluationContext;
  12. import org.springframework.mail.MailSender;
  13. import org.springframework.mail.SimpleMailMessage;
  14. import org.springframework.stereotype.Component;
  15. import java.util.Arrays;
  16. /**
  17. * Created by chenweida on 2018/5/8 0008.
  18. * de.codecentric.boot.admin.config.NotifierConfiguration
  19. */
  20. public class JKZLMailNotifier extends MailNotifier {
  21. private static final String DEFAULT_SUBJECT = "#{application.name} (#{application.id}) is #{to.status}";
  22. private static final String DEFAULT_TEXT = "#{application.name} (#{application.id})\nstatus changed from #{from.status} to #{to.status}\n\n#{application.healthUrl}";
  23. private final SpelExpressionParser parser = new SpelExpressionParser();
  24. private Logger logger = LoggerFactory.getLogger(JKZLMailNotifier.class);
  25. private final MailSender sender;
  26. /**
  27. * recipients of the mail
  28. */
  29. private String to[] = {"root@localhost"};
  30. /**
  31. * cc-recipients of the mail
  32. */
  33. private String cc[];
  34. /**
  35. * sender of the change
  36. */
  37. private String from = null;
  38. /**
  39. * Mail Text. SpEL template using event as root;
  40. */
  41. private Expression text;
  42. /**
  43. * Mail Subject. SpEL template using event as root;
  44. */
  45. private Expression subject;
  46. public JKZLMailNotifier(MailSender sender) {
  47. super(sender);
  48. logger.info("init email");
  49. this.sender = sender;
  50. this.subject = parser.parseExpression(DEFAULT_SUBJECT, ParserContext.TEMPLATE_EXPRESSION);
  51. this.text = parser.parseExpression(DEFAULT_TEXT, ParserContext.TEMPLATE_EXPRESSION);
  52. }
  53. @Override
  54. protected void doNotify(ClientApplicationEvent event) {
  55. logger.info("send email");
  56. EvaluationContext context = new StandardEvaluationContext(event);
  57. SimpleMailMessage message = new SimpleMailMessage();
  58. //发送给别人 支持多个接收人
  59. message.setTo(to);
  60. //发送人 可配置
  61. message.setFrom(from);
  62. //发送的邮件名称 默认是 微服务ID + 状态
  63. // 例如
  64. // SPRING-CLOUD-SVR-SIMPLE1 (9ac26abe) is OFFLINE
  65. message.setSubject(subject.getValue(context, String.class));
  66. //邮件内容 默认是微服务 +状态
  67. // 例如
  68. // SPRING-CLOUD-SVR-SIMPLE1 (9ac26abe) status changed from UNKNOWN to OFFLINE
  69. // http://MS-20180328WODJ:8080/health
  70. message.setText(text.getValue(context, String.class));
  71. // 抄送 为null 不需要填写
  72. message.setCc(cc);
  73. sender.send(message);
  74. }
  75. public void setTo(String[] to) {
  76. this.to = Arrays.copyOf(to, to.length);
  77. }
  78. public String[] getTo() {
  79. return Arrays.copyOf(to, to.length);
  80. }
  81. public void setCc(String[] cc) {
  82. this.cc = Arrays.copyOf(cc, cc.length);
  83. }
  84. public String[] getCc() {
  85. return Arrays.copyOf(cc, cc.length);
  86. }
  87. public void setFrom(String from) {
  88. this.from = from;
  89. }
  90. public String getFrom() {
  91. return from;
  92. }
  93. public void setSubject(String subject) {
  94. this.subject = parser.parseExpression(subject, ParserContext.TEMPLATE_EXPRESSION);
  95. }
  96. public String getSubject() {
  97. return subject.getExpressionString();
  98. }
  99. public void setText(String text) {
  100. this.text = parser.parseExpression(text, ParserContext.TEMPLATE_EXPRESSION);
  101. }
  102. public String getText() {
  103. return text.getExpressionString();
  104. }
  105. }