`
java2000.net
  • 浏览: 632407 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论

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(
"from@from.com");
    o.setDisplayName(
"TOM");
    o.setTo(
"to@to.com");
    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");

  }

}
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics