2010-04-29 56 views
1

我有以下方法发送电子邮件,但我无法获得附加的对象,为什么?如何使用Java在电子邮件中附加对象?

void Send_Email(String From,String To,String Subject,Text Message_Text,Contact_Info_Entry An_Info_Entry) 
    { 
    Properties props=new Properties(); 
    Session session=Session.getDefaultInstance(props,null); 
    String htmlBody="<Html>Hi</Html>"; 
    byte[] attachmentData; 
    Multipart multipart=new MimeMultipart(); 
    BASE64Encoder BASE64_Encoder=new BASE64Encoder(); 
    try 
    { 
     Message message=new MimeMessage(session); 
     message.setFrom(new InternetAddress(From,"NM-Java Admin")); 
     message.addRecipient(Message.RecipientType.TO,new InternetAddress(To,"Ni , Min")); 
     // You may need to encode the subject with this special method ! 
     // message.setSubject(javax.mail.internet.MimeUtility.encodeText("Testing javamail with french : ��� ")); 
     message.setSentDate(new Date()); 
     message.setSubject(Subject); 

     MimeBodyPart messageBodyPart=new MimeBodyPart();       // Create the message part 
     messageBodyPart.setText(Message_Text.getValue());      // Fill message 
     multipart.addBodyPart(messageBodyPart); 

     MimeBodyPart htmlPart=new MimeBodyPart(); 
     htmlPart.setContent(htmlBody,"text/html"); 
     multipart.addBodyPart(htmlPart); 
//setHTMLContent(message); 

     ByteArrayOutputStream bStream=new ByteArrayOutputStream(); 
     ObjectOutputStream oStream=new ObjectOutputStream(bStream); 
     oStream.writeObject(An_Info_Entry); 
//  attachmentData=bStream.toByteArray(); 
//  attachmentData=BASE64_Encoder.encode(bStream.toByteArray()); 

     MimeBodyPart attachment=new MimeBodyPart(); 
     attachment.setFileName(An_Info_Entry.Contact_Id); 
     attachment.setContent(BASE64_Encoder.encode(bStream.toByteArray()),"application/x-java-serialized-object"); 
     multipart.addBodyPart(attachment); 

     setBinaryContent(message,BASE64_Encoder.encode(bStream.toByteArray()).getBytes()); 

     message.setContent(multipart);            // Put parts in message 
     message.setText(Message_Text.getValue()+" [ An_Info_Entry.Contact_Id = "+An_Info_Entry.Contact_Id+" ]"); 

     Transport.send(message); 
    } 
    catch (Exception ex) 
    { 
     // ... 
    } 
    } 

回答

1

可能是因为:

  1. 你设置你的内容类型:text/html和你真的发送原始的二进制。

    MimeBodyPart attachment=new MimeBodyPart(); 
    attachment.setFileName(An_Info_Entry.Contact_Id); 
    attachment.setContent(attachmentData,"text/html"); // <-- Here 
    multipart.addBodyPart(attachment); 
    
  2. 即使你使用正确的内容类型,您应该编码内容使用Base64这样的附件可以使它槽净。

    // This 
    //attachmentData=bStream.toByteArray(); 
    // should be something like: 
    attachmentData=Base64Coder.encode(bStream.toByteArray()); 
    
+0

好了,我应该怎么投入attachment.setContent(attachmentData, “?”)? – Frank 2010-04-29 20:36:16

+0

指定附加数据的MIME类型。例如,对于PNG图像,使用“image/png”。 – 2010-04-30 11:05:42

+0

可能'应用程序/ x-java-serialized-object'为了更好地看到:http://en.wikipedia.org/wiki/Internet_media_type – OscarRyz 2010-04-30 15:22:34

相关问题