最近作了一個監測k8s服務pod水平伸縮發送郵件的功能(當pod的cpu/內存達到指定閾值後會水平擴展出多個pod、或者指定時間內pod數應擴展到指定數量),一開始寫了個格式很low的郵件,像下面這樣:html
主流程打通,算個v1版本吧,程序員是個追求完美的人,再說這麼低逼格的郵件,給客戶看,客戶也會不滿意。那怎麼提升郵件的逼格呢?下面寫了個簡單的demo,v2版本以下:前端
感興趣的小夥伴能夠參考,模板能夠找你公司前端和美工小姐姐設計。java
由於監測k8s服務pod水平伸縮是用go開發的,發送通知郵件提供了個接口,用springboot寫的,如下也用springboot作demopython
Springboot的pom.xml文件:程序員
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.2.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<artifactId>email-demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>email-demo</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.8.1</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.47</version>
</dependency>
<!--發送郵件的必要依賴-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>複製代碼
pod-scale-alarm.html模板文件:模板中的{0}、{1}這樣的佔位符後面java代碼會替換掉web
<body style="color: #666; font-size: 14px; font-family: 'Open Sans',Helvetica,Arial,sans-serif;">
<div class="box-content" style="width: 80%; margin: 20px auto; max-width: 800px; min-width: 600px;">
<div class="header-tip" style="font-size: 12px;
color: #aaa;
text-align: right;
padding-right: 25px;
padding-bottom: 10px;">
Confidential - Scale Alarm Use Only
</div>
<div class="info-top" style="padding: 15px 25px;
border-top-left-radius: 10px;
border-top-right-radius: 10px;
background: {0};
color: #fff;
overflow: hidden;
line-height: 32px;">
<img src="cid:icon-alarm" style="float: left; margin: 0 10px 0 0; width: 32px;" /><div style="color:#010e07"><strong>服務實例水平伸縮通知</strong></div>
</div>
<div class="info-wrap" style="border-bottom-left-radius: 10px;
border-bottom-right-radius: 10px;
border:1px solid #ddd;
overflow: hidden;
padding: 15px 15px 20px;">
<div class="tips" style="padding:15px;">
<p style=" list-style: 160%; margin: 10px 0;">Hi,</p>
<p style=" list-style: 160%; margin: 10px 0;">{1}</p>
</div>
<div class="time" style="text-align: right; color: #999; padding: 0 15px 15px;">{2}</div>
<br>
<table class="list" style="width: 100%; border-collapse: collapse; border-top:1px solid #eee; font-size:12px;">
<thead>
<tr style=" background: #fafafa; color: #333; border-bottom: 1px solid #eee;">
{3}
</tr>
</thead>
<tbody>
{4}
</tbody>
</table>
</div>
</div>
</body>複製代碼
success-alarm.png圖標:java代碼以下,簡單的demo,優化能夠本身在項目中去作。面試
package com.example.emaildemo;
import org.apache.commons.lang3.time.DateFormatUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.core.io.ClassPathResource;
import org.springframework.mail.javamail.JavaMailSenderImpl;
import org.springframework.mail.javamail.MimeMessageHelper;
import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.text.MessageFormat;
import java.util.Date;
import java.util.Objects;
import java.util.Properties;
/**
* @program: email-demo
* @description:
* @author: smallsoup
* @create: 2019-01-27 16:44
**/
public class SendEmailUtil {
private static final Logger LOGGER = LoggerFactory.getLogger(SendEmailUtil.class);
public static void main(String[] args) throws MessagingException, IOException {
JavaMailSenderImpl javaMailSender = new JavaMailSenderImpl();
javaMailSender.setUsername("你的郵箱地址");
javaMailSender.setPassword("你的郵箱AUTH密碼,不是登錄密碼哦,在郵箱的設置裏單獨開啓和設置");
javaMailSender.setHost("smtp.exmail.qq.com");
javaMailSender.setPort(587);
javaMailSender.setDefaultEncoding("UTF-8");
Properties props = new Properties();
props.setProperty("mail.smtp.host", "smtp.exmail.qq.com");
props.setProperty("mail.transport.protocol", "smtp");
props.setProperty("mail.smtp.auth", "true");
props.setProperty("mail.smtp.connectiontimeout", "20000");
props.setProperty("mail.smtp.timeout", "20000");
javaMailSender.setJavaMailProperties(props);
MimeMessage message = javaMailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(message, true, "UTF-8");
helper.setTo(new String[]{"收件人郵箱"});
helper.setCc("抄送人郵箱");
helper.setFrom("你的郵箱地址");
helper.setSubject("liang subject");
helper.setText(buildContent(), true);
String alarmIconName = "success-alarm.png";
ClassPathResource img = new ClassPathResource(alarmIconName);
if (Objects.nonNull(img)) {
helper.addInline("icon-alarm", img);
}
javaMailSender.send(message);
}
private static String buildContent() throws IOException {
//加載郵件html模板
String fileName = "pod-scale-alarm.html";
InputStream inputStream = ClassLoader.getSystemResourceAsStream(fileName);
BufferedReader fileReader = new BufferedReader(new InputStreamReader(inputStream));
StringBuffer buffer = new StringBuffer();
String line = "";
try {
while ((line = fileReader.readLine()) != null) {
buffer.append(line);
}
} catch (Exception e) {
LOGGER.error("讀取文件失敗,fileName:{}", fileName, e);
} finally {
inputStream.close();
fileReader.close();
}
String contentText = "如下是服務實例伸縮信息, 敬請查看.<br>below is the information of service instance scale, please check. ";
//郵件表格header
String header = "<td>分區(Namespace)</td><td>服務(Service)</td><td>伸縮結果(Scale Result)</td><td>伸縮緣由(Scale Reason)</td><td>當前實例數(Pod instance number)</td>";
StringBuilder linesBuffer = new StringBuilder();
linesBuffer.append("<tr><td>" + "myNamespace" + "</td><td>" + "myServiceName" + "</td><td>" + "myscaleResult" + "</td>" +
"<td>" + "mReason" + "</td><td>" + "my4" + "</td></tr>");
//綠色
String emailHeadColor = "#10fa81";
String date = DateFormatUtils.format(new Date(), "yyyy/MM/dd HH:mm:ss");
//填充html模板中的五個參數
String htmlText = MessageFormat.format(buffer.toString(), emailHeadColor, contentText, date, header, linesBuffer.toString());
//改變表格樣式
htmlText = htmlText.replaceAll("<td>", "<td style=\"padding:6px 10px; line-height: 150%;\">");
htmlText = htmlText.replaceAll("<tr>", "<tr style=\"border-bottom: 1px solid #eee; color:#666;\">");
return htmlText;
}
}複製代碼
本公衆號免費提供csdn下載服務,海量IT學習資源,若是你準備入IT坑,勵志成爲優秀的程序猿,那麼這些資源很適合你,包括但不限於java、go、python、springcloud、elk、嵌入式 、大數據、面試資料、前端 等資源。同時咱們組建了一個技術交流羣,裏面有不少大佬,會不定時分享技術文章,若是你想來一塊兒學習提升,能夠公衆號後臺回覆【2】,免費邀請加技術交流羣互相學習提升,會不按期分享編程IT相關資源。spring
掃碼關注,精彩內容第一時間推給你apache