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 = "邮件测试链接";
    //发送邮件
    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("用例执行完后执行");
}