整合營銷服務(wù)商

          電腦端+手機端+微信端=數(shù)據(jù)同步管理

          免費咨詢熱線:

          Jenkins 郵件發(fā)送「可修改模版」

          Jenkins 郵件發(fā)送「可修改模版」

          頭條創(chuàng)作挑戰(zhàn)賽#

          本文同步本人掘金平臺的文章:https://juejin.cn/post/7062327576395513887

          上一篇,Jenkins Pipeline 結(jié)合 Gitlab 實現(xiàn) Node 項目自動構(gòu)建 我們已經(jīng)實現(xiàn)了自動構(gòu)建的功能。

          在團隊合作中,項目在構(gòu)建異常「或成功」時候,需要郵件通知相關(guān)的人員,這就涉及到 Jenkins 郵件發(fā)送的功能了。

          安裝 Email Extension

          Email Extension 插件允許你配置郵件通知。通過此插件,你可以自定義郵件的發(fā)送人,接受者和發(fā)送的內(nèi)容。

          Manage Jenkins -> Manage Plugins -> Available 。搜索 Email Extension 安裝

          配置 Email Extension 參數(shù)

          Manage Jenkins -> Configure System -> Extended E-mail Notification

          第 1 點: Simple Mail Transfer Protocol (SMTP) 自己申請,如果不知道如何操作,請網(wǎng)上找答案。(應(yīng)該也許不難吧...)

          第 2 點: 郵件默認的接收郵件地址。

          構(gòu)建腳本

          使用Jenkins Pipeline 結(jié)合 Gitlab 實現(xiàn) Node 項目自動構(gòu)建的Jenkinsfile腳本補充下。

          pipeline {
              agent any
              
              tools { 
                  nodejs "nodejs" 
              }
              
              stages {
                  stage('Dependency') {
                      steps {
                          sh 'npm install'
                      }
                  }
                  stage('Build') { 
                      steps {
                          sh 'npm run clean' 
                          sh 'npm run build' 
                      }
                  }
              }
              
              // 添加的腳本內(nèi)容
              post {
                  always {
                      emailext body: '${DEFAULT_CONTENT}',
                          subject: '${DEFAULT_SUBJECT}',
                          to: '${DEFAULT_RECIPIENTS}',
                          from: '${env.DEFAULT_FROM_EMAIL}'
                  }
              }
          }
          
          復(fù)制代碼

          這就很明顯了:默認發(fā)送郵箱,默認接收郵箱,默認的發(fā)送主題,默認的發(fā)送內(nèi)容。都是獲取我們上一步設(shè)定的值。效果如下:

          構(gòu)建失?。?/p>

          構(gòu)建成功:

          對比上面的兩張圖,構(gòu)建失敗和構(gòu)建成功,的構(gòu)建結(jié)果字體竟然是不同的顏色,神奇...

          如果你看上一節(jié)配置 Email Extension 參數(shù)中的截圖,你可能會留意到:

          <h2><font color="${BUILD_STATUS}">構(gòu)建結(jié)果 - ${BUILD_STATUS}</font></h2>
          復(fù)制代碼

          color="${BUILD_STATUS}" 嗯,加上這個,不同狀態(tài)返回的構(gòu)建結(jié)果字體不同顏色了?我們帶動下構(gòu)建pipeline的always -> changed。觸發(fā)構(gòu)建信息由失敗 -> 成功,得到下面的結(jié)果:

          看來是想多了啊,并不是不同的狀態(tài)不同顏色啊。不過,如果你不介意這個bug,可以使用...

          升級下需求

          發(fā)送郵件需要根據(jù)不同狀態(tài),使用特定的顏色區(qū)分。比如:成功 -> #27AE60 , 失敗 -> #E74C3C , 其他顏色 -> #F4E242

          咦,這還不簡單?在默認的發(fā)送模版上添加判斷條件就行了。

          然而,不支持,太慘了,得另辟蹊徑~(大霧)

          經(jīng)過一番搜索,Groovy Template 能夠解決這個問題。

          我們更改下 pipeline 腳本:

          # ...
          post {
              always {
                  emailext body: '''${SCRIPT, template="my-email-template"}''',
                      subject: '${DEFAULT_SUBJECT}',
                      to: '${DEFAULT_RECIPIENTS}',
                      from: "${env.DEFAULT_FROM_EMAIL}"
              }
          }
          # ...
          復(fù)制代碼

          我們構(gòu)建下。構(gòu)建是成功了,但是郵箱收到的卻是:

          Groovy Template file [my-email-template] was not found in $JENKINS_HOME/email-templates.
          復(fù)制代碼

          郵件提示,機器中 $JENKINS_HOME/email-templates 下并不存在 my-email-template 模版。(笑哭)

          沒有權(quán)限怎么辦呢?咱可以通過其他方法不?

          再查找資料,咦,有了 - Email Extension Plugin is not loading groovy template added via Config File Provider Plugin。通過配置文件解決,我們來見證下:

          步驟 1 : 到 jenkins 平臺上操作,Manage Jenkins -> Managed Files

          步驟 2 : 點擊 Add a new Config

          步驟 3 : 點選類型 Extended Email Publisher Groovy Template, 點擊 Submit 按鈕提交

          步驟 4 : 輸入名稱和相關(guān)的內(nèi)容。請記住名稱,后續(xù)使用到。

          因為截圖篇幅問題,這里的 Content 內(nèi)容并沒有截取完整,完整的內(nèi)容請戳Groovy_template.html,其中的關(guān)鍵代碼如下:

            .tr-title {
              background-color: <%=(build.result==null || build.result.toString()=='SUCCESS') ? '#27AE60' : build.result.toString()=='FAILURE' ? '#E74C3C' : '#F4E242' %>;
            }
          復(fù)制代碼

          Groovy 官方完整模版請見官方模版Groovy Email Template

          扎心了啊,老鐵(尬笑)

          步驟 5 : 修正你的 pipeline 文件,請確保你輸入和正確的名字"managed:Groovy Email Template"。

          # ...
          post {
              changed {
                  emailext body: '''${SCRIPT, template="managed:Groovy Email Template"}''',
                      subject: '${DEFAULT_SUBJECT}',
                      to: '${DEFAULT_RECIPIENTS}',
                      from: "${env.DEFAULT_FROM_EMAIL}"
              }
          }
          # ...
          復(fù)制代碼

          一切就緒,我們重新構(gòu)建。結(jié)果如下:

          構(gòu)建狀態(tài)

          郵箱收到內(nèi)容截圖

          成功

          失敗

          中止

          嗯~效果不錯(撒花)完結(jié)

          讀者有啥其他的方法呢,可以留言交流下。更多的內(nèi)容,請戳Jimmy Github Blog

          文章被收錄于專欄:

          相關(guān)課程

          3

          收藏

          時候人不在電腦旁,程序運行中發(fā)生了問題,或者程序需要定期發(fā)送報告,此時發(fā)送電子郵件就是一個方便快捷的方案。python的內(nèi)置庫smtplib就具有發(fā)送電子郵件的功能,今天我們以QQ郵箱為例,發(fā)送一個帶附件的郵件給自己。

          import time
          import smtplib
          from email.mime.text import MIMEText
          from email.mime.multipart import MIMEMultipart
          
          #設(shè)置服務(wù)器所需信息
          #qq郵箱服務(wù)器地址
          mail_host='smtp.qq.com'  
          #qq號
          mail_user='2*****5'  
          #QQ郵箱為授權(quán)碼) 
          mail_pass='n*****c'   
          #郵件發(fā)送方郵箱地址
          sender='2*****5@qq.com'  
          #只發(fā)送一個人可以用字符串或列表,多于一個人用列表
          receivers=['2*****5@qq.com']
          
          #這表示可以發(fā)送帶附件的郵件
          message=MIMEMultipart()
          #設(shè)置email信息
          #郵件主題       
          message['Subject']='郵件主題' 
          #發(fā)送方信息
          message['From']=sender 
          #接受方信息     
          message['To']=receivers[0]  
          
          #郵件內(nèi)容設(shè)置
          content=MIMEText("這是一個測試郵件", 'html', 'utf-8')
          #附件的路徑
          with open('abc.csv','r',encoding='gbk' ,errors='ignore') as f:
              attachment=f.read()
          attachment1=MIMEText(attachment)
          attachment1['Content-Disposition']='attachment;filename="abc.csv"'
          #將內(nèi)容和附件附在郵件上
          message.attach(content)
          message.attach(attachment1)
          
          #發(fā)郵件成功后返回時間
          send_time=time.strftime('%Y-%m-%d %H:%M:%S', time.localtime())
          #登錄并發(fā)送郵件
          try:
              smtpObj=smtplib.SMTP() 
              #連接到服務(wù)器
              smtpObj.connect(mail_host,25)
              #登錄到服務(wù)器
              smtpObj.login(mail_user,mail_pass) 
              #發(fā)送
              smtpObj.sendmail(
                  sender,receivers,message.as_string()) 
              #退出
              smtpObj.quit() 
              print(f'郵件已發(fā)送,發(fā)送時間為{send_time}')
          except smtplib.SMTPException as e:
              print('郵件發(fā)送出現(xiàn)了錯誤:',e,'請重試后發(fā)送') #打印錯誤信息

          返回:郵件已發(fā)送,發(fā)送時間為2024-01-12 21:19:25

          需要注意的是:

          1、QQ郵箱的授權(quán)碼路徑:郵箱界面左上角的“設(shè)置”——“賬號”——“POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服務(wù)”——“繼續(xù)獲取授權(quán)碼”,點開就行了。

          2、做完第一條,會出現(xiàn)一個“短信驗證”,讓我們發(fā)短信,先不要發(fā)(浪費1毛錢?。?。點擊“選擇其他方式驗證”,然后出現(xiàn)接收驗證碼或用QQ密保,這兩個選一個用就行了。

          目配置

          引入依賴:

                  <dependency>
                      <groupId>org.springframework.boot</groupId>
                      <artifactId>spring-boot-starter-mail</artifactId>
                  </dependency>

          配置郵箱信息:

          spring:
            mail:
              host: smtp.sina.com           # 新浪郵箱
              username: xxx@sina.com				# 發(fā)件人郵箱地址
              password: xxxxxxxxxxxx    # 授權(quán)碼
              protocol: smtp              # SMTP 協(xié)議
              default-encoding: UTF-8     # 編碼格式
              properties:
                mail:
                  debug: true               # 開啟Debug模式,打印發(fā)送郵件的日志信息
                  smtp:
                    auth: true
                    socketFactory:
                      class: javax.net.ssl.SSLSocketFactory
                    ssl:
                      enable: true
                      checkServerIdentity:
                        enable: true
                    starttls:
                      enable: true

          發(fā)送純文本郵件

          @Value("${spring.mail.username}")
           private String username;
          
          @Test
          void sendTextEmail(@Autowired JavaMailSender mailSender) {
            SimpleMailMessage message=new SimpleMailMessage();
          
            message.setFrom(username);
            message.setTo("ijunfv@gmail.com");
            message.setSubject("純文本內(nèi)容的郵件");
            message.setText("<h2>跳轉(zhuǎn)至Youtube</h2><a href=\"https://www.youtube.com\">https://www.youtube.com</a>");
          
            mailSender.send(message);
            log.info("郵件發(fā)送成功");
          }

          核心:使用SimpleMailMessage類

          發(fā)送HTML格式的郵件

          @Test
          void sendHtmlEmail(@Autowired JavaMailSender mailSender) throws MessagingException {
          
            MimeMessage mimeMessage=mailSender.createMimeMessage();
          
            MimeMessageHelper messageHelper=new MimeMessageHelper(mimeMessage, false);
            messageHelper.setFrom(username);
            messageHelper.setTo("ijunfv@gmail.com");
            messageHelper.setSubject("HTML格式的郵件");
            messageHelper.setText("<h2>跳轉(zhuǎn)至Youtube</h2><a href=\"https://www.youtube.com\">https://www.youtube.com</a>", true);
          
            mailSender.send(mimeMessage);
            log.info("郵件發(fā)送成功");
          }

          核心:使用MimeMessageHelper類,setText方法第二個參數(shù)必須為True,否則發(fā)送的是純文本。

          發(fā)送包含附件的郵件

          @Test
          void send(@Autowired JavaMailSender mailSender) throws MessagingException {
            MimeMessage mimeMessage=mailSender.createMimeMessage();
          
            MimeMessageHelper messageHelper=new MimeMessageHelper(mimeMessage, true);
            messageHelper.setFrom(username);
            messageHelper.setTo("ijunfv@gmail.com");
            messageHelper.setSubject("包含附件的郵件");
            messageHelper.setText("<h2>跳轉(zhuǎn)至Youtube</h2><a href=\"https://www.youtube.com\">https://www.youtube.com</a>", true);
          
            messageHelper.addAttachment("6.png", new File("D:\\Images\\logo_200x200 (6).png"));
            messageHelper.addAttachment("12.png", new File("D:\\Images\\logo_200x200 (12).png"));
          
            mailSender.send(mimeMessage);
            log.info("郵件發(fā)送成功");
          }

          核心:

          1. 創(chuàng)建MimeMessageHelper對象時,第二個參數(shù)必須為true,否則不能發(fā)送包含附件的郵件
          2. 使用addAttachment方法添加附件

          發(fā)送內(nèi)嵌附件的郵件

          @Test
          void sendInlineResourceEmail(@Autowired JavaMailSender mailSender) throws MessagingException {
          
            MimeMessage mimeMessage=mailSender.createMimeMessage();
          
            MimeMessageHelper messageHelper=new MimeMessageHelper(mimeMessage, true);
            messageHelper.setFrom(username);
            messageHelper.setTo("ijunfv@gmail.com");
            messageHelper.setSubject("包含附件的郵件");
          
            String rscId="dhjsjd9889";
            messageHelper.setText("<h2>跳轉(zhuǎn)至Youtube</h2><a href=\"https://www.youtube.com\"><img src='cid:"+rscId+"' /></a>", true);
            messageHelper.addInline(rscId, new File("D:\\Images\\logo_200x200 (6).png"));
          
            mailSender.send(mimeMessage);
          
            log.info("郵件發(fā)送成功");
          }

          核心:

          1. 創(chuàng)建具有唯一性的ID作為附件標識,比如rscId
          2. 使用addInline添加附件
          3. 在郵件內(nèi)容中通過cid:rscId插入附件

          小結(jié)

          按郵件內(nèi)容,可分為普通文本、HTML格式內(nèi)容、添加附件、內(nèi)嵌附件四種郵件。

          上述已將完整代碼列出,記得一鍵三連^_^


          主站蜘蛛池模板: 性色av闺蜜一区二区三区| 天码av无码一区二区三区四区| 香蕉在线精品一区二区| 水蜜桃av无码一区二区| 一区二区亚洲精品精华液| 一区二区三区视频免费观看| 色婷婷综合久久久久中文一区二区 | 日本视频一区二区三区| 无码人妻精品一区二区三区66| 无码日韩AV一区二区三区| 无码一区二区三区老色鬼| 国产一区二区三区福利| 亚洲午夜在线一区| 国产激情无码一区二区三区| 久久久久久人妻一区二区三区| 精品日本一区二区三区在线观看 | 亚洲一区二区在线免费观看| 视频一区二区中文字幕| 日韩AV在线不卡一区二区三区 | 国模私拍一区二区三区| 波多野结衣一区二区三区88 | 精品一区二区三区在线观看| 久久久国产精品无码一区二区三区 | 中文字幕在线一区二区在线| 国产乱码伦精品一区二区三区麻豆 | 久久久无码精品国产一区| 一区二区三区免费看| 人妻互换精品一区二区| 色偷偷久久一区二区三区| 狠狠色婷婷久久一区二区| 日本视频一区二区三区| 日本精品一区二区三区视频| 色狠狠色狠狠综合一区| 国产成人一区二区三区在线观看 | 国产av成人一区二区三区| 精品一区二区三区电影| 在线电影一区二区| 亚州AV综合色区无码一区| 中文字幕一区一区三区| 国产av一区二区三区日韩| 国产午夜精品一区二区|