WEB自動化(JAVA版)——測試報告郵件發送

SendEmail.java的代碼

如何將生成的測試報告通過Email發送出去呢?
在util包下創建SendEmail.java代碼如下:

package util;

import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Properties;

import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.BodyPart;
import javax.mail.Message;
import javax.mail.Multipart;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import javax.mail.internet.MimeUtility;

/**
 * 郵件發送測試報告.
 * 
 * @author betty.shi
 * 
 */
public class SendEmail {  
    private static String defaultSenderName = "";// 默認的發件人用戶名,defaultEntity用得到  
    private static String defaultSenderPass = "";// 默認的發件人密碼,defaultEntity用得到  
    private static String defaultSmtpHost = "";// 默認的郵件服務器地址,defaultEntity用得到  
  
    private String smtpHost; // 郵件服務器地址  
    private String sendUserName; // 發件人的用戶名  
    private String sendUserPass; // 發件人密碼  
  
    private MimeMessage mimeMsg; // 郵件對象  
    private Session session;  
    private Properties props;  
    private Multipart mp;// 附件添加的組件  
    private List<FileDataSource> files = new LinkedList<FileDataSource>();// 存放附件文件  
  
    private void init() {  
        if (props == null) {  
            props = System.getProperties();  
        }  
        props.put("mail.smtp.host", smtpHost);  
        props.put("mail.smtp.auth", "true"); // 需要身份驗證  
        session = Session.getDefaultInstance(props, null);  
        // 置true可以在控制檯(console)上看到發送郵件的過程  
        session.setDebug(true);  
        // 用session對象來創建並初始化郵件對象  
        mimeMsg = new MimeMessage(session);  
        // 生成附件組件的實例  
        mp = new MimeMultipart();  
    }  
  
    private SendEmail(String smtpHost, String sendUserName, String sendUserPass, String to, String cc, String mailSubject, String mailBody,  
            List<String> attachments) {  
        this.smtpHost = smtpHost;  
        this.sendUserName = sendUserName;  
        this.sendUserPass = sendUserPass;  
  
        init();  
        setFrom(sendUserName);  
        setTo(to);  
        setCC(cc);  
        setBody(mailBody);  
        setSubject(mailSubject);  
        if (attachments != null) {  
            for (String attachment : attachments) {  
                addFileAffix(attachment);  
            }  
        }  
  
    }  
  
    /** 
     * 郵件實體 
     *  
     * @param smtpHost 
     *            郵件服務器地址 
     * @param sendUserName 
     *            發件郵件地址 
     * @param sendUserPass 
     *            發件郵箱密碼 
     * @param to 
     *            收件人,多個郵箱地址以半角逗號分隔 
     * @param cc 
     *            抄送,多個郵箱地址以半角逗號分隔 
     * @param mailSubject 
     *            郵件主題 
     * @param mailBody 
     *            郵件正文 
     * @param attachmentPath 
     *            附件路徑 
     * @return 
     */  
    public static SendEmail entity(String smtpHost, String sendUserName, String sendUserPass, String to, String cc, String mailSubject, String mailBody,  
            List<String> attachments) {  
        return new SendEmail(smtpHost, sendUserName, sendUserPass, to, cc, mailSubject, mailBody, attachments);  
    }  
  
    /** 
     * 默認郵件實體,用了默認的發送帳號和郵件服務器 
     *  
     * @param to 
     *            收件人,多個郵箱地址以半角逗號分隔 
     * @param cc 
     *            抄送,多個郵箱地址以半角逗號分隔 
     * @param subject 
     *            郵件主題 
     * @param body 
     *            郵件正文 
     * @param attachment 
     *            附件全路徑 
     * @return 
     */  
    public static SendEmail defaultEntity(String to, String cc, String subject, String body, List<String> attachments) {  
        return new SendEmail(defaultSmtpHost, defaultSenderName, defaultSenderPass, to, cc, subject, body, attachments);  
    }  
  
    /** 
     * 設置郵件主題 
     *  
     * @param mailSubject 
     * @return 
     */  
    private boolean setSubject(String mailSubject) {  
        try {  
            mimeMsg.setSubject(mailSubject);  
        } catch (Exception e) {  
            return false;  
        }  
        return true;  
    }  
  
    /** 
     * 設置郵件內容,並設置其爲文本格式或HTML文件格式,編碼方式爲UTF-8 
     *  
     * @param mailBody 
     * @return 
     */  
    private boolean setBody(String mailBody) {  
        try {  
            BodyPart bp = new MimeBodyPart();  
            bp.setContent("<meta http-equiv=Content-Type content=text/html; charset=UTF-8>" + mailBody, "text/html;charset=UTF-8");  
            // 在組件上添加郵件文本  
            mp.addBodyPart(bp);  
        } catch (Exception e) {  
            System.err.println("設置郵件正文時發生錯誤!" + e);  
            return false;  
        }  
        return true;  
    }  
  
    /** 
     * 添加一個附件 
     *  
     * @param filename 
     *            郵件附件的地址,只能是本機地址而不能是網絡地址,否則拋出異常 
     * @return 
     */  
    public boolean addFileAffix(String filename) {  
        try {  
            if (filename != null && filename.length() > 0) {  
                BodyPart bp = new MimeBodyPart();  
                FileDataSource fileds = new FileDataSource(filename);  
                bp.setDataHandler(new DataHandler(fileds));  
                bp.setFileName(MimeUtility.encodeText(fileds.getName(), "utf-8", null)); // 解決附件名稱亂碼  
                mp.addBodyPart(bp);// 添加附件  
                files.add(fileds);  
            }  
        } catch (Exception e) {  
            System.err.println("增加郵件附件:" + filename + "發生錯誤!" + e);  
            return false;  
        }  
        return true;  
    }  
  
    /** 
     * 刪除所有附件 
     *  
     * @return 
     */  
    public boolean delFileAffix() {  
        try {  
            FileDataSource fileds = null;  
            for (Iterator<FileDataSource> it = files.iterator(); it.hasNext();) {  
                fileds = it.next();  
                if (fileds != null && fileds.getFile() != null) {  
                    fileds.getFile().delete();  
                }  
            }  
        } catch (Exception e) {  
            return false;  
        }  
        return true;  
    }  
  
    /** 
     * 設置發件人地址 
     *  
     * @param from 
     *            發件人地址 
     * @return 
     */  
    private boolean setFrom(String from) {  
        try {  
            mimeMsg.setFrom(new InternetAddress(from));  
        } catch (Exception e) {  
            return false;  
        }  
        return true;  
    }  
  
    /** 
     * 設置收件人地址 
     *  
     * @param to收件人的地址 
     * @return 
     */  
    private boolean setTo(String to) {  
        if (to == null)  
            return false;  
        try {  
            mimeMsg.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to));  
        } catch (Exception e) {  
            return false;  
        }  
        return true;  
    }  
  
    /** 
     * 設置抄送 
     *  
     * @param cc 
     * @return 
     */  
    private boolean setCC(String cc) {  
        if (cc == null) {  
            return false;  
        }  
        try {  
            mimeMsg.setRecipients(Message.RecipientType.CC, InternetAddress.parse(cc));  
        } catch (Exception e) {  
            return false;  
        }  
        return true;  
    }  
  
    /** 
     * 發送郵件 
     *  
     * @return 
     */  
    public boolean send() throws Exception {  
        mimeMsg.setContent(mp);  
        mimeMsg.saveChanges();  
        System.out.println("正在發送郵件....");  
        Transport transport = session.getTransport("smtp");  
        // 連接郵件服務器並進行身份驗證  
        transport.connect(smtpHost, sendUserName, sendUserPass);  
        // 發送郵件  
        transport.sendMessage(mimeMsg, mimeMsg.getRecipients(Message.RecipientType.TO));  
        System.out.println("發送郵件成功!");  
        transport.close();  
        return true;  
    }  
    
}  

SendEmail的方法調用

可以在任何想要發送郵件的地方調用SendEmail.java中的方法,本框架是在@AfterSuite的時候調用的,即在每次testsuite運行完後發送郵件。

	@AfterSuite
	public static void sendEmail() {
		try {
			String userName = "[email protected]"; // 發件人郵箱  
	        String password = "password"; // 發件人密碼  
	        String smtpHost = "smtp.126.com"; // 郵件服務器    
  
	        String to = "[email protected]"; // 收件人,多個收件人以半角逗號分隔  
	        String cc = ""; // 抄送,多個抄送以半角逗號分隔  
	        String subject = "Web UI Test Report"; // 主題
	        String body = ReportListener.returnResult(); // 正文,可以用html格式的喲  
	        // 附件的路徑,多個附件也不怕  
	        List<String> ReportPath = Arrays.asList(ReportListener.returnReportPath());
	        List<String> screenshotPath = ReportListener.returnScreenshotPath();
	        List<String> attachments = new ArrayList<String>();
	        attachments.addAll(ReportPath);
	        attachments.addAll(screenshotPath);
	        
	        SendEmail email = SendEmail.entity(smtpHost, userName, password, to, cc, subject, body, attachments);  
	  
	        email.send(); // 發送!     
		}
		catch(Exception e) {
			Log4jUtil.error(e);
		}
	}

其中,如下代碼需要修改:

		String userName = "[email protected]"; // 發件人郵箱  
        String password = "password"; // 發件人密碼  
        String smtpHost = "smtp.126.com"; // 郵件服務器    

        String to = "[email protected]"; // 收件人,多個收件人以半角逗號分隔  
        String cc = ""; // 抄送,多個抄送以半角逗號分隔  
        String subject = "Web UI Test Report"; // 主題
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章