Java接口自動化測試(七) — 發送郵件


1、簡述

 用例執行完成后,可以通過發送電子郵件的方式通知需要看到測試報告的用戶,可以使用Javax.mail完成郵件發送

2、實現發送郵件實例

package com.test.email;

import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.Message;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.*;
import java.io.File;
import java.util.Properties;

/**
 * @author lh
 * @date 2020/7/16
 * @description
 */
public class SendEmail {
    //服務器地址
    private static final String host = "smtp.163.com";
    //傳輸協議
    private static final String protocol = "smtp";
    //發送人
    private static final String from_username = "******@163.com";
    //密碼(配置郵箱的授權碼)
    private static final String from_password = "******";
    //收件人
    private static final String recipient = "******@qq.com";
    //附件
    private static final String attach = "test\\report.html";
    //html格式
    private static final String htmlString = "<a href=#>郵件測試鏈接</a>";
    //發送郵件
    public static void sendEmail() {
        try {
            Session session = SendEmail.createSession();
            Message message = SendEmail.createMessage(session);
            MimeMultipart multipart = new MimeMultipart();
            //HTML格式
            multipart.addBodyPart(SendEmail.createHtmlContent());
            //發送附件
            multipart.addBodyPart(SendEmail.createAttach());
            //設置文件
            message.setContent(multipart);
            //消息傳輸
            Transport transport = session.getTransport();
            //設置連接地址
            transport.connect(host, from_username, from_password);
            //發送消息  message.getAllRecipients()獲取郵件的所有收件人地址
            transport.sendMessage(message, message.getAllRecipients());
            //關閉連接
            transport.close();
            System.out.println("郵件發送成功!");
        } catch (Exception e) {
            System.out.println("郵件發送失敗!");
        }
    }

    //創建郵件會話
    public static Session createSession(){
        //構建properties文件
        Properties properties = new Properties();
        //郵件協議
        properties.setProperty("mail.transport.protocol",protocol);
        //服務器地址
        properties.setProperty("mail.smtp.host",host);
        //身份認證
        properties.put("mail.smtp.auth", "true");
        // 設置是否使用ssl安全連接 ---一般都使用
        properties.put("mail.smtp.ssl.enable", "true");
        //創建郵件會話
        Session session = Session.getInstance(properties);
        return session;
    }
    //構建郵件消息
    public static Message createMessage(Session session) throws Exception{
        MimeMessage message= new MimeMessage(session);
        //設置主題
        message.setSubject("這是一個測試報告");
        //設置文本消息
        message.setText("這是測試文件,請勿回復!");
        //設置發送地址
        message.setFrom(new InternetAddress(from_username));
        /**
         *設置收件人地址
         * Message.RecipientType.BCC :The "Bcc" (blind carbon copy) recipients.(“密件抄送”接收者)
         * Message.RecipientType.CC  :The "Cc" (carbon copy) recipients.“抄送”接收者
         * Message.RecipientType.TO :The "To" (primary) recipients.“收件人”(主要)收件人。
         */
        message.setRecipients(Message.RecipientType.TO,recipient);
        return message;
    }
    //發送郵件正文內容為HTML格式
    public static MimeBodyPart createHtmlContent() throws Exception{
        MimeBodyPart bodyPart = new MimeBodyPart();
        bodyPart.setContent(htmlString,"text/html;charset=UTF-8");
        return bodyPart;
    }
    //發送單個附件內容
    public static MimeBodyPart createAttach() throws Exception{
        MimeBodyPart bodyPart = new MimeBodyPart();
        /**
         * 實現一個封裝文件的簡單 DataSource 對象。它通過 FileTypeMap 對象提供數據分類服務
         * FileTypeMap是一個抽象類,為文件提供數據鍵入接口
         */
        FileDataSource dataSource = new FileDataSource(new File(attach));
        /**
         * 數據處理程序
         * 創建引用指定 DataSource 的 DataHandler 實例。數據以字節流的形式存在。
         * DataSource 將提供一個 InputStream 來訪問數據
         */
        DataHandler dataHandler = new DataHandler(dataSource);
        //添加郵件主體中
        bodyPart.setDataHandler(dataHandler);
        //設置附件名稱,MimeUtility.encodeText可以處理亂碼問題
        bodyPart.setFileName(MimeUtility.encodeText(dataSource.getName()));
        return bodyPart;
    }
    //測試
    public static void main(String[] args){

        SendEmail.sendEmail();
    }
}

3、上述功能可以在用例執行完成之后,調用該郵件方法,例如:

@AfterTest
public void teardown(){
SendEmail.sendEmail();
System.out.println("用例執行完后執行");
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM