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 " );

  }

}
  • 0
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,我可以帮你解答关于 JavaMail 发送邮件附件的问题。 在 JavaMail 中发送附件的邮件,可以通过以下步骤实现: 1. 创建一个 Session 对象,用于与邮件服务器进行通信。 ``` Properties props = new Properties(); props.setProperty("mail.smtp.host", "smtp.example.com"); props.setProperty("mail.smtp.auth", "true"); Session session = Session.getDefaultInstance(props, new Authenticator() { protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication("your_username", "your_password"); } }); ``` 2. 创建一个 MimeMessage 对象,设置邮件的基本信息,如发件人、收件人、主题等。 ``` MimeMessage message = new MimeMessage(session); message.setFrom(new InternetAddress("sender@example.com")); message.addRecipient(Message.RecipientType.TO, new InternetAddress("recipient@example.com")); message.setSubject("Test email with attachment"); ``` 3. 创建一个 Multipart 对象,用于包含邮件正文和附件。 ``` Multipart multipart = new MimeMultipart(); ``` 4. 创建一个 MimeBodyPart 对象,用于包含邮件正文,并将其添加到 Multipart 对象中。 ``` MimeBodyPart bodyPart = new MimeBodyPart(); bodyPart.setText("This is the email body"); multipart.addBodyPart(bodyPart); ``` 5. 创建一个 MimeBodyPart 对象,用于包含附件,并将其添加到 Multipart 对象中。 ``` MimeBodyPart attachmentPart = new MimeBodyPart(); attachmentPart.attachFile(new File("path/to/attachment")); attachmentPart.setFileName("attachment.txt"); multipart.addBodyPart(attachmentPart); ``` 6. 将 Multipart 对象设置为 MimeMessage 对象的内容,并发送邮件。 ``` message.setContent(multipart); Transport.send(message); ``` 以上是 JavaMail 发送附件邮件的基本步骤,你可以根据实际需求进行修改和扩展。希望能对你有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值