2

I'll create a EML file with an attachment using JavaMail.

I created a simple EML file successfully, but adding an attachment don't work properly. I'm going to add a PDF file. My EML file will be created successfully. If I open the generated EML file with Outlook I'll find not my PDF file as attachment but I'll find the EML file itself as attachment. Does anyone has an idea?

I tried two variants (with same result), I used the FileDataSource class and the simple way with MimeBodyPart#attachFile(File).

I'm going to post an example:

File pdfFile = new File("somePdfFile");

Properties p = System.getProperties();
Session session = Session.getInstance(p);
MimeMessage message = new MimeMessage(session);
// MimeBodyPart txt = new MimeBodyPart();
// txt.setText("");
MimeBodyPart mbp = new MimeBodyPart();
mbp.attachFile(attachment);
// FileDataSource fds = new FileDataSource(attachment);
// fds.setFileTypeMap(new FileTypeMap() {
//    
//   @Override
//   public String getContentType(String arg0) {
//     return "application/pdf";
//   }
//    
//    @Override
//    public String getContentType(File file) {
//      return "application/pdf";
//    }
//      
//  });
//  mbp.setDataHandler(new DataHandler(fds));
//  mbp.setFileName("\"" + attachment.getName() + "\"");
//  mbp.setDisposition(MimePart.ATTACHMENT);
//  mbp.setHeader("Content-ID", "Attachment");
Multipart mp = new MimeMultipart();
//  mp.addBodyPart(txt);
mp.addBodyPart(mbp);
message.setContent(mp);
File emlFile = new File("message.eml");
emlFile.createNewFile();
message.writeTo(new FileOutputStream(emlFile));

// do something with the EML file
// Desktop.getDesktop().open(emlFile);

Create a .eml (email) file in Java


Thank you for your response. I uploaded a PDF file (that I use for testing, it's a simple HelloWorld generated with Crystal Reports) and the generated EML file which should include the PDF file.

I just noticed that if I open the linked EML file with Apple Mail or with Outlook Express it works (but without edit possibility). Maybe it's an issue of Microsoft Outlook?

The links are removed

Community
  • 1
  • 1
Thomas
  • 8,357
  • 15
  • 45
  • 81
  • Can you post the email file that got generated? Being that it's probably TNEF encoded, it will be a binary file, but I'm courious what output your code generated. When you call mbp.attachFile(), make sure that the function is setting the mime type correctly, etc. If not, you will have to set it for that mime part, and you probably want it to be "attachment", (which may not be implied, even though you called attachFile(), as that function can also be used to attach HTML inline, etc). (I think it's the content-disposition that you want to set to "attachment", and the content-type to be the files – LarryF Jan 07 '09 at 20:43

2 Answers2

1

Zubi, it looks like the issue is the content type on the attachment is set to "application/octet-stream". So, it looks like the mail reader is taking the PDF file as an alternate display for the "text" body of the message which does not exist, (it's just blank).

You'll have to forgive me, it's been more than a year since I've dealt with Mime, but I think you are going to want to A) Put some body text in the message, B) Make sure the type on the attachment is set to application/pdf. Hopefully, this will prevent the mail reading from trying to display the PDF as the primary body of the message.

Other than that, it looks normal... Now, Outlook MIGHT bitch because there are no RFC 822 headers in the main body. You may want to add at LEAST a From:, To:, and a Subject:.

The message passed MY MIME parsing code...

bluish
  • 26,356
  • 27
  • 122
  • 180
LarryF
  • 4,925
  • 4
  • 32
  • 40
1

You should try adding the header lines I mentioned to the very top of the message and see how Outlook deals with it then. Add a To:, From:, Subject: and maybe even a Date: with real data in them, and Outlook is more likely to treat it as a message, rather that just a file.

bluish
  • 26,356
  • 27
  • 122
  • 180
LarryF
  • 4,925
  • 4
  • 32
  • 40