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("用例执行完后执行");
}