Creation of a EML file with an attachment using JavaMail

12,590

Solution 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.

Solution 2

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...

Share:
12,590
Thomas
Author by

Thomas

Thomas Zuberbühler | Swiss Expat in Canada | www.geomo.ch Python, Java, JavaScript, TypeScript, C# and more. Passion for maps and spatial applications. Coffee is always appreciated... ;) https://www.buymeacoffee.com/moosetraveller I am mostly just here to answer questions. I think the Stackoverflow system is flawed and questioners are sometimes treated unfriendly, arrogant and unpleasant by some users especially towards non-English speaker. Just because someone earned 10,000 reputation from a beginner's question they asked 10 years ago, it's not ok in my opinion to treat new beginners with disrespect by downvoting and close their question within seconds. I've seen this over and over again. Give beginners a chance!! And accept that not everyone's first language is English and is as good as you to express themselves in a foreign language. Ask for clarification before you downvote or close a question! Also, closing questions because they are supposed to be duplicated (even if they are slightly different) should not be allowed in my opinion. Stackoverflow should rather provide a list of possible duplicated questions. In the FAQ it is even mentioned that a duplicate question can be a signpost for other questions. Maybe this even triggers someone to give an even better or newer answer who would otherwise never came across with this or the duplicated question! Finally, why are outdated answers (old but with a lot of upvotes) favoured over the new ones? Anyways, I am here to help people and when I answer a question, I mostly learn something as well. That said, thank you for asking and helping me to improve my skills. :)

Updated on June 04, 2022

Comments

  • Thomas
    Thomas almost 2 years

    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