javamail写带附件eml文件并调用outlook的方法

1 将邮件写入到文件的代码

      msg.saveChanges(); 
      File f 
=   new  File( " d:/test.eml " ); 
      msg.writeTo(
new  FileOutputStream(f));

2 调用outlook的代码

Process p  =  Runtime.getRuntime().exec( " cmd /C start msimn.exe /eml:d:/test.eml " );

3 完整的代码如下

package  code.jdk.mail;

import  java.io.File;
import  java.io.FileNotFoundException;
import  java.io.FileOutputStream;
import  java.io.IOException;
import  java.util.Date;
import  java.util.Enumeration;
import  java.util.HashMap;
import  java.util.Properties;
import  java.util.Vector;

import  javax.activation.DataHandler;
import  javax.activation.FileDataSource;
import  javax.mail.Address;
import  javax.mail.AuthenticationFailedException;
import  javax.mail.Message;
import  javax.mail.MessagingException;
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;

public   class  EmailWriteToFile {
  
//  定义发件人、收件人、SMTP服务器、用户名、密码、主题、内容等
   private  String displayName;

  
private  String to;

  
private  String from;

  
private  String smtpServer;

  
private  String username;

  
private  String password;

  
private  String subject;

  
private  String content;

  
private   boolean  ifAuth;  //  服务器是否要身份认证

  
private  String filename  =   "" ;

  
private  Vector file  =   new  Vector();  //  用于保存发送附件的文件名的集合

  
private  String contentType  =   " text/html " ;

  
private  String charset  =   " utf-8 " ;

  
public   void  addFile(String filename) {
    file.add(filename);
  }

  
public  String getContentType() {
    
return  contentType;
  }

  
public   void  setContentType(String contentType) {
    
this .contentType  =  contentType;
  }

  
public  String getCharset() {
    
return  charset;
  }

  
public   void  setCharset(String charset) {
    
this .charset  =  charset;
  }

  
/**
   * 设置SMTP服务器地址
   
*/
  
public   void  setSmtpServer(String smtpServer) {
    
this .smtpServer  =  smtpServer;
  }

  
/**
   * 设置发件人的地址
   
*/
  
public   void  setFrom(String from) {
    
this .from  =  from;
  }

  
/**
   * 设置显示的名称
   
*/
  
public   void  setDisplayName(String displayName) {
    
this .displayName  =  displayName;
  }

  
/**
   * 设置服务器是否需要身份认证
   
*/
  
public   void  setIfAuth( boolean  ifAuth) {
    
this .ifAuth  =  ifAuth;
  }

  
/**
   * 设置E-mail用户名
   
*/
  
public   void  setUserName(String username) {
    
this .username  =  username;
  }

  
/**
   * 设置E-mail密码
   
*/
  
public   void  setPassword(String password) {
    
this .password  =  password;
  }

  
/**
   * 设置接收者
   
*/
  
public   void  setTo(String to) {
    
this .to  =  to;
  }

  
/**
   * 设置主题
   
*/
  
public   void  setSubject(String subject) {
    
this .subject  =  subject;
  }

  
/**
   * 设置主体内容
   
*/
  
public   void  setContent(String content) {
    
this .content  =  content;
  }

  
public  EmailWriteToFile() {

  }

  
private   int  port  =   25 ;

  
public   int  getPort() {
    
return  port;
  }

  
public   void  setPort( int  port) {
    
this .port  =  port;
  }

  
/**
   * 发送邮件
   * 
   * 
@throws  IOException
   * 
@throws  FileNotFoundException
   
*/
  
public   boolean  send()  throws  FileNotFoundException, IOException {
    HashMap
< String, String >  map  =   new  HashMap < String, String > ();
    map.put(
" state " " success " );
    String message 
=   " 邮件发送成功! " ;
    Session session 
=   null ;
    Properties props 
=  System.getProperties();
    props.put(
" mail.smtp.host " , smtpServer);
    props.put(
" mail.smtp.port " , port);
    
try  {

      props.put(
" mail.smtp.auth " " false " );
      session 
=  Session.getDefaultInstance(props,  null );

      session.setDebug(
false );
      Transport trans 
=   null ;
      Message msg 
=   new  MimeMessage(session);
      
try  {
        Address from_address 
=   new  InternetAddress(from, displayName);
        msg.setFrom(from_address);
      } 
catch  (java.io.UnsupportedEncodingException e) {
        e.printStackTrace();
      }
      InternetAddress[] address 
=  {  new  InternetAddress(to) };
      msg.setRecipients(Message.RecipientType.TO, address);
      msg.setSubject(subject);
      Multipart mp 
=   new  MimeMultipart();
      MimeBodyPart mbp 
=   new  MimeBodyPart();
      mbp.setContent(content.toString(), getContentType() 
+   " ;charset= "   +  getCharset());
      mp.addBodyPart(mbp);
      
if  ( ! file.isEmpty()) { //  有附件
        Enumeration efile  =  file.elements();
        
while  (efile.hasMoreElements()) {
          mbp 
=   new  MimeBodyPart();
          filename 
=  efile.nextElement().toString();  //  选择出每一个附件名
          FileDataSource fds  =   new  FileDataSource(filename);  //  得到数据源
          mbp.setDataHandler( new  DataHandler(fds));  //  得到附件本身并至入BodyPart
          mbp.setFileName(MimeUtility.encodeText(fds.getName(), getCharset(), " B " ));  //  得到文件名同样至入BodyPart
          mp.addBodyPart(mbp);
        }
        file.removeAllElements();
      }
      msg.setContent(mp); 
//  Multipart加入到信件
      msg.setSentDate( new  Date());  //  设置信件头的发送日期
      
//  发送信件
      msg.saveChanges();
      File f 
=   new  File( " d:/test.eml " );
      msg.writeTo(
new  FileOutputStream(f));

    } 
catch  (AuthenticationFailedException e) {
      map.put(
" state " " failed " );
      message 
=   " 邮件发送失败!错误原因: "   +   " 身份验证错误! " ;
      e.printStackTrace();
      
return   false ;
    } 
catch  (MessagingException e) {
      message 
=   " 邮件发送失败!错误原因: "   +  e.getMessage();
      map.put(
" state " " failed " );
      e.printStackTrace();
      Exception ex 
=   null ;
      
if  ((ex  =  e.getNextException())  !=   null ) {
        System.out.println(ex.toString());
        ex.printStackTrace();
      }
      
return   false ;
    }
    
//  System.out.println(" 提示信息:"+message);
    map.put( " message " , message);
    
return   true ;
  }

  
public   static   void  main(String[] args)  throws  FileNotFoundException, IOException, InterruptedException {
    EmailWriteToFile o 
=   new  EmailWriteToFile();
    o.setSmtpServer(
" localhost " );
    o.setFrom(
" [email protected] " );
    o.setDisplayName(
" TOM " );
    o.setTo(
" [email protected] " );
    o.setSubject(
" Test Subject " );
    o.setContent(
" Test Content " );
    o.setCharset(
" GBK " );
    o.addFile(
" e:/读我.txt " );
    o.send();
    Process p 
=  Runtime.getRuntime().exec( " cmd /C start msimn.exe /eml:d:/test.eml " );

  }

}

你可能感兴趣的:(javamail写带附件eml文件并调用outlook的方法)