使用javamail发送附件,实践

原创 2015年11月20日 17:21:12

0. 准备工作

下载javax.mail.jar,加入工程的buildpath里面

1. 创建EmailReport类

package swiftcoder2_0;
import java.util.Properties;


import javax.activation.*;
import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;




import GL.GL;


public class EmailReport {

/*!
@method     sendReport:
@author     chenchen 2015-11-20  
@description  send the test results to whom should be known
@param      user: the sender
@param      password : the sender's password
@param      toMail: the receivers
*/
public static void sendReport( ){
final String username = "chenchen@conversant.com.cn";
   final String password = "chenchen2012";


   Properties props = new Properties();
   props.put("mail.smtp.auth", true);
   props.put("mail.smtp.starttls.enable", true);
   props.put("mail.smtp.host", "smtp.exmail.qq.com");
   //props.put("mail.smtp.port", "587");


   Session session = Session.getInstance(props,
           new javax.mail.Authenticator() {
               protected PasswordAuthentication getPasswordAuthentication() {
                   return new PasswordAuthentication(username, password);
               }
           });
   session.setDebug(true); //有他会打印一些调试信息。  


   try {
    //消息体实例
       Message message = new MimeMessage(session);
       message.setFrom(new InternetAddress(username));
       message.setRecipients(Message.RecipientType.TO,
               InternetAddress.parse("pengqiong@conversant.com.cn"));
       message.setSubject("Testing Subject");
       message.setText("PFA");


       BodyPart messageBodyPart = new MimeBodyPart();
       messageBodyPart.setText("pardon ideas") ;
       
       Multipart multipart = new MimeMultipart();
       multipart.addBodyPart(messageBodyPart);
       
       messageBodyPart = new MimeBodyPart(); 
       String file = "E:/Documents/QA.Management/automation/swiftcoder2_0/test-results/test.txt";
       String fileName = "test.txt";
       DataSource source = new FileDataSource(file);
       messageBodyPart.setDataHandler(new DataHandler(source));
       messageBodyPart.setFileName(fileName);
       
       multipart.addBodyPart(messageBodyPart);


       message.setContent(multipart);


       System.out.println("Sending");


       Transport.send(message);


       System.out.println("Done");


   } catch (MessagingException e) {
       e.printStackTrace();
   }
 
}

public static void sendMail(String fromMail, String user, String password,  
            String toMail,  
            String mailTitle,  
            String mailContent) throws Exception {  
Properties props = new Properties(); //可以加载一个配置文件  
// 使用smtp:简单邮件传输协议  
props.put("mail.transport.protocol", "smtp");
props.put("mail.smtp.host", "smtp.exmail.qq.com");//存储发送邮件服务器的信息  
props.put("mail.smtp.auth", "true");//同时通过验证  

Session session = Session.getInstance(props);//根据属性新建一个邮件会话  
session.setDebug(true); //有他会打印一些调试信息。  

MimeMessage message = new MimeMessage(session);//由邮件会话新建一个消息对象  
message.setFrom(new InternetAddress(fromMail));//设置发件人的地址  
message.setRecipient(Message.RecipientType.TO, new InternetAddress(toMail));//设置收件人,并设置其接收类型为TO  
message.setSubject(mailTitle);//设置标题  
//设置信件内容  
//message.setText("Hello", "text/plain"); //发送 纯文本 邮件 todo 
//message.setContent("hello", "text/plain");
//message.setContent(mailContent, "text/html;charset=gbk"); //发送HTML邮件,内容样式比较丰富  
//message.setSentDate(new Date());//设置发信时间  
//message.saveChanges();//存储邮件信息  

//设置正文消息体
BodyPart messageBodyPart = new MimeBodyPart();
messageBodyPart.setText(mailContent);
Multipart multipart = new MimeMultipart();
multipart.addBodyPart(messageBodyPart);
//设置附件
messageBodyPart = new MimeBodyPart();
String absolutePath = System.getProperty("user.dir");
absolutePath.replace("\\", "\\\\");
      String file = absolutePath + "\\test-output\\emailable-report.html";
      //String file ="E:\\Documents\\QA.Management\\automation\\swiftcoder2_0\\test-output\\emailable-report.html";
       String fileName = "emailable-report.html";
       DataSource source = new FileDataSource(file);
       messageBodyPart.setDataHandler(new DataHandler(source));
       messageBodyPart.setFileName(fileName);
       multipart.addBodyPart(messageBodyPart);
       message.setContent(multipart);
       
//发送邮件  
Transport transport = session.getTransport("smtp");  

transport.connect("smtp.exmail.qq.com", user, password);  

transport.sendMessage(message, message.getAllRecipients());//发送邮件,其中第二个参数是所有已设好的收件人地址  
transport.close();  
}

public static void main(String args[]) throws Exception{
//sendReport();
sendMail(GL.getString("fromMail"), GL.getString("fromMail") ,GL.getString("pwdFromMail"), "pengqiong@conversant.com.cn", "mail title" , "See the attachment, test results here");

}
}

其中 sendReport sendMail函数都有效。

2. 在用例执行完成后,增加report listener,调用sendMail函数,发送测试结果

2.0 有误的实践

以下代码,本意是想测试套跑完,发送邮件,实际运行结果是,此函数调用在测试套中,所以发送的上一次执行结果,故不是本意图。

@AfterTest
@Configuration(afterTestClass= true, groups = {"test.workflow"})
public void TearDown() throws Exception{
System.out.println("----After Test--------");
//after the run completion, send the test results to people who are concerned about it
String fromMail = GL.getString("fromMail");
String pwdFromMail = GL.getString("pwdFromMail");
String toMail = GL.getString("toMail");
System.out.println(fromMail +"===="  + toMail );

EmailReport.sendMail(fromMail, fromMail, pwdFromMail, toMail, "AutoTest Results from Swiftcoder 2.0.3" , "See the attachment, test results here");
}

2.1 正确的实践

运行测试类增加report listener在测试套跑完,调用发送邮件

2.1.1 增加监听调用

@Listeners({swiftcoder2_0.ReportResult.class})

public class TC_Operation {

@AfterTest
@Configuration(afterTestClass= true, groups = {"test.workflow"})
public void TearDown() throws Exception{
System.out.println("----After Test--------");
}

@Test(groups = {"groupa"}, retryAnalyzer = TestngRetry.class)
public void testa(){
//code here
}

@Test

XXX

@Test

XXXX

}

2.1.2 增加报表监听类

public class ReportResult implements IReporter {
/*!
@method     sendMail:
@author     chenchen 2015-11-20  
@description  send the test results to whom 
@param      fromMail: the sender
@param      user: the sender 
@param      password : the sender's password
@param      toMail: the receivers
@param      mailTitle: mail subject
@param      mailContent: mail body text
*/
public static void sendMail(String fromMail, String user, String password,  
           String toMail,  
           String mailTitle,  
           String mailContent) throws Exception {  

if(mailTitle.equals("") || mailTitle == null){
mailTitle = "No subject";
}
if(mailContent.equals("") || mailContent == null){
mailContent = "No body";
}


Properties props = new Properties(); //可以加载一个配置文件  
// 使用smtp:简单邮件传输协议  
props.put("mail.transport.protocol", "smtp");
props.put("mail.smtp.host", "smtp.exmail.qq.com");//存储发送邮件服务器的信息  
props.put("mail.smtp.auth", "true");//同时通过验证  

Session session = Session.getInstance(props);//根据属性新建一个邮件会话  
session.setDebug(true); //有他会打印一些调试信息。  

MimeMessage message = new MimeMessage(session);//由邮件会话新建一个消息对象  
message.setFrom(new InternetAddress(fromMail));//设置发件人的地址  

;
new InternetAddress();
InternetAddress[] toList = InternetAddress.parse(toMail);
message.setRecipients(Message.RecipientType.TO, toList);//设置多个收件人,并设置其接收类型为TO  
//message.setRecipient(Message.RecipientType.TO, new InternetAddress(toMail));//设置收件人,并设置其接收类型为TO  
message.setSubject(mailTitle);//设置标题  
//设置信件内容  
//message.setText("Hello", "text/plain"); //发送 纯文本 邮件 todo 
//message.setContent("hello", "text/plain");
//message.setContent(mailContent, "text/html;charset=gbk"); //发送HTML邮件,内容样式比较丰富  
//message.setSentDate(new Date());//设置发信时间  
//message.saveChanges();//存储邮件信息  

//设置正文消息体
BodyPart messageBodyPart = new MimeBodyPart();
messageBodyPart.setText(mailContent);
Multipart multipart = new MimeMultipart();
multipart.addBodyPart(messageBodyPart);
//设置附件
messageBodyPart = new MimeBodyPart();
String absolutePath = System.getProperty("user.dir");
absolutePath.replace("\\", "\\\\");
      String file = absolutePath + "\\test-output\\emailable-report.html";
      //String file ="E:\\Documents\\QA.Management\\automation\\swiftcoder2_0\\test-output\\emailable-report.html";
       String fileName = "emailable-report.html";
       DataSource source = new FileDataSource(file);
       messageBodyPart.setDataHandler(new DataHandler(source));
       messageBodyPart.setFileName(fileName);
       multipart.addBodyPart(messageBodyPart);
       message.setContent(multipart);
       
//发送邮件  
Transport transport = session.getTransport("smtp");  

transport.connect("smtp.exmail.qq.com", user, password);  

transport.sendMessage(message, message.getAllRecipients());//发送邮件,其中第二个参数是所有已设好的收件人地址  
transport.close();  
}


@Override
public void generateReport(List<XmlSuite> xmlSuites, List<ISuite> suites,
String outputDirectory) {

// TODO Auto-generated method stub
//after the run completion, send the test results to people who are concerned about it
String fromMail = GL.getString("fromMail");
String pwdFromMail = GL.getString("pwdFromMail");
String toMail = GL.getString("toMail");
System.out.println("From Mail: " + fromMail +", To Mail: "  + toMail );
try {
sendMail(fromMail, fromMail, pwdFromMail, toMail, "AutoTest Results from Swiftcoder 2.0.3" , "See the attached, pls");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}

}

参考资料

http://blog.csdn.net/zhoubin_v/article/details/1616044

JavaMail使用教程

http://www.360doc.com/content/14/0306/17/16088576_358273704.shtml 

Java mail api详解

http://tiwson.iteye.com/blog/558992

java mail发送多邮件

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

javamail 发送邮件,发复杂html,包括附件,以及内嵌图片的邮件

当前版本:javamail1_4_4.zip      可以去oracle去下载最新的版本 发复杂的邮件,html内容,包括带附件的,邮件内容嵌入图片的邮件 首先,要导入的包有: dsn.jar...

发送邮件使用的javamail包

  • 2013-07-26 17:27
  • 348KB
  • 下载

Android 使用javaMail jar包 发送邮件

终于特么得弄好  赶紧写下来 压压惊 使用的 Android Studio 1.2 在Android 中需要使用 javaMail的jar包  mail.jar 、additionnal.jar 、...
  • yezqjx
  • yezqjx
  • 2015-07-30 18:30
  • 1389

Web应用中使用JavaMail发送邮件

现在很多的网站都提供有用户注册功能, 通常我们注册成功之后就会收到一封来自注册网站的邮件。邮件里面的内容可能包含了我们的注册的用户名和密码以及一个激活账户的超链接等信息。今天我们也来实现一个这样的功能...

使用Javamail发送邮件

用Javamail发送邮件是比较简单,如果j2ee版本是5以及5以上的话,是有自带Javamail的包的,如果没有的话,就要将下载好的Javamail中的mail.jar放到lib文件中。 注意:要...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)