2011-07-25 24 views
3

我有一个java代码,我必须发送一个附件,它可能是.doc,.db或.file。所以我使用下面的代码,消息已成功传递,并且特定的附件文件未被发送并且也被接收。在java中发送附件文件

我的代码是:

import java.util.Date; 
import java.util.Properties; 

import javax.activation.DataHandler; 
import javax.activation.FileDataSource; 
import javax.mail.Message; 
import javax.mail.Message.RecipientType; 
import javax.mail.MessagingException; 
import javax.mail.Multipart; 
import javax.mail.Session; 
import javax.mail.Transport; 
import javax.mail.internet.AddressException; 
import javax.mail.internet.InternetAddress; 
import javax.mail.internet.MimeBodyPart; 
import javax.mail.internet.MimeMessage; 
import javax.mail.internet.MimeMultipart; 

public class SendEmail { 

    private String from = "[email protected]"; 
    private String to; 
    private String subject; 
    private String text; 
    String filename = "hardWare_Dtls.file"; 
    String host = "smtp.gmail.com"; 

    public SendEmail(String from, String to, String subject, String text,String filename) { 
     // System.out.println("From Adress inside constr"+from); 
     this.from = from; 
     this.to = to; 
     this.subject = subject; 
     this.text = text; 
     this.filename=filename; 
    } 

    public void send() { 

     Properties props = System.getProperties(); 
     System.out.println("Email Options SendEmail"); 
     props.put("mail.smtp.host", host); 
     props.put("mail.smtp.user", from); 
     props.put("mail.smtp.password", "123456"); 
     props.put("mail.smtp.port", "587"); // 587 is the port number of yahoo 
              // mail 
     props.put("mail.smtp.auth", "true"); 
     props.put("mail.smtp.starttls.enable", "true"); 

     Session mailSession = Session.getDefaultInstance(props, null); 
     Message simpleMessage = new MimeMessage(mailSession); 

     InternetAddress fromAddress = null; 
     InternetAddress toAddress = null; 
     try { 
      fromAddress = new InternetAddress(from); 
      toAddress = new InternetAddress(to); 

     } catch (AddressException e) { 
      // TODO Auto-generated catch block 
      // e.printStackTrace(); 
      System.out.println("Address Exception" + e.getMessage()); 
     } 

     try { 
      System.out.println("From Address" + fromAddress); 
      simpleMessage.setFrom(fromAddress); 
      simpleMessage.setRecipient(RecipientType.TO, toAddress); 
      System.out.println("To Address" + toAddress); 
      simpleMessage.setSubject(subject); 
      simpleMessage.setText(text); 
      simpleMessage.setSentDate(new Date()); 

      MimeBodyPart attachmentPart = new MimeBodyPart(); 
       FileDataSource fileDataSource = new FileDataSource(filename) { 
        @Override 
        public String getContentType() { 
         return "application/octet-stream"; 
        } 
       }; 
       attachmentPart.setDataHandler(new DataHandler(fileDataSource)); 
       attachmentPart.setFileName(filename); 

       Multipart multipart = new MimeMultipart(); 
       // multipart.addBodyPart(messagePart); 
       multipart.addBodyPart(attachmentPart); 


      // simpleMessage.setText(attachment); 

      Transport transport = mailSession.getTransport("smtps"); 
      transport.connect("smtp.gmail.com", "[email protected]", 
        "123456"); 
      simpleMessage.saveChanges(); 
      transport.sendMessage(simpleMessage, 
        simpleMessage.getAllRecipients()); 
      Transport.send(simpleMessage); 

      transport.close(); 
      // Transport.send(simpleMessage); 
     } catch (MessagingException e) { 
      // TODO Auto-generated catch block 
      // e.printStackTrace(); 
      System.out.println("Messagine Exception" + e.getMessage()); 
     } 
    } 

} 
在此代码,我有什么错

。如果有任何其他代码使用Java代码发送带附件的消息,请寄给我。提前致谢。

我在主类使用此代码:

  String from = "[email protected]"; 
     String to = "[email protected]"; 
     String subject = "Sample Text Message"; 
     String message = "Sample Msg with File attachment"; 
     String filename="hardWare_Dtls.file"; 

     SendEmail sendMail = new SendEmail(from, to, subject, message,filename); 
     sendMail.send(); 
+0

你看过接收到的原始消息,看看它是什么原因。 –

+0

你在哪里发送多部分请求?你只发送简单的消息。 –

+0

如何包含Multipart。 – Aerrow

回答

1

你有几乎所有的作品,但你应该使用MimeMessage(而不仅仅是信息),并设置其内容为你的多部分。我觉得你其实想这​​样做,但你的代码将无法编译,所以你注释掉行:

// simpleMessage.setText(attachment); 

取而代之的是这样做:

((MimeMessage) simpleMessage).setContent(multipart); 

并再次测试。它应该工作。

+0

我试过但我得到异常。 – Aerrow

+0

你有什么异常? – Perception

+0

“Messagine异常”..我认为如果源可能找不到。 – Aerrow