JMail发送excel附件到邮箱

//很久没有上javaeye,最近写了一个报表统计的发邮件的程序,感觉有一点实用的给大家共享一下吧,这里是一excel附件的形式发送邮件到qq邮箱
package com;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Properties;

import javax.activation.DataHandler;
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;
public class MailService {

Session mailSession = null;

public  Session getMailSession() {
if (mailSession == null) {
Properties props = new Properties();  
props.put("mail.smtp.auth", "true");   
mailSession = Session.getInstance(props, null);
}
return mailSession;
}

public void sendAttachBySys(Map<String,List<String>> map,String fromEmail,String toEmail){ 
String subject = "测试excel邮件";
try {
getMailSession().setDebug( true );
Message msg = new MimeMessage( getMailSession() );
msg.setFrom( new InternetAddress( fromEmail ) );
msg.setRecipients( Message.RecipientType.TO, InternetAddress.parse( toEmail ) );
msg.setSubject( subject );
msg.setSentDate( new java.util.Date() );

//添加附件
Multipart mm = new MimeMultipart();
BodyPart mdp = new MimeBodyPart();  
StringBuffer sb = new StringBuffer();
sb.append( "第一列\t第二列\t第三列\n" );
if(map != null && !map.isEmpty()){
for(String key : map.keySet()){
List<String> list = map.get( key );
for(int i=0;i<list.size();i++){
String value = list.get( i );
if(i == 0){
sb.append( value );
}else{
sb.append( "\t"+value );
}

}
sb.append( "\n" );
}
}

DataHandler dh = new DataHandler(sb.toString(),"text/plain;charset=gb2312");
mdp.setFileName( "test.xls" );
mdp.setDataHandler( dh );
mm.addBodyPart( mdp );
msg.setContent(mm);
Transport transport = mailSession.getTransport("smtp");  
transport.connect("smtp.qq.com", "*****", "****");  
transport.sendMessage(msg, msg.getAllRecipients());  

}
catch( Exception ex ) {
ex.printStackTrace();
}
}

/**
* @param args
*/
public static void main( String[] args ) {
Map<String,List<String>> map = new HashMap<String, List<String>>();
List<String> list1=  new ArrayList<String>();
list1.add( "第2行第1列" );
list1.add( "第2行第2列" );
list1.add( "第2行第3列" );
List<String> list2=  new ArrayList<String>();
list2.add( "第3行第1列" );
list2.add( "第3行第2列" );
list2.add( "第3行第3列" );
map.put( "1", list1 );
map.put( "2", list2 );

MailService mailService = new MailService();
mailService.sendAttachBySys( map, "****@qq.com", "*****");
}

}


这个我测试成功了,但你首先要开启你的qq邮箱的SMTP服务,
进入qq邮箱->设置->帐户->POP3/IMAP/SMTP服务,里面的开启POP3/SMTP服务和开启IMAP/SMTP服务勾选上。

猜你喜欢

转载自chenshengzun.iteye.com/blog/1833617