Start Mail-Client with Attachment?

后端 未结 3 1001
一整个雨季
一整个雨季 2020-11-27 07:01

I\'m currently searching for a way (in Java) to start the default mail client with defined receiver, subject and body and with a predefined attachment.

Due to the li

相关标签:
3条回答
  • 2020-11-27 07:37

    Probably it's too late by now, but just in case anybody still finds this problem:

    Desktop.getDesktop().mail(new URI("mailto:email@example.com?subject=attachment_example&body=see_attached_file&attachment=/path/to/attachment"));
    

    should do the trick in a platform-independent way.

    0 讨论(0)
  • 2020-11-27 07:42

    (as far as I know) That is currently not possible to add a predefined attachment but you can do other things that you mentioned (to start the default mail client with defined receiver, subject and body) using java.awt.Desktop.mail.. I believe that you have already checked here. It would be very useful though.

    0 讨论(0)
  • 2020-11-27 08:02

    There does not appear to be any OS agnostic method of doing this in Java as not all OSes provide a standard way to launch the default e-mail application with more than the basic fields for a new email.

    On Windows, it is possible to use a JNI interface to MAPI, which will provide more control over opening an email in a mail application. As you mentioned, one such library is JMAPI - however, it appears there are many libraries by such a name with similar purposes. I discovered one that is recently maintained and seems fairly straight-forward. It includes a pre-built binary dll and an accompanying Java JNI-based library.

    https://github.com/briandealwis/jmapi

    With this code, it seems you would only need to construct a message object and call a method to launch it in a mail application: import jmapi.*; ...

        if (JMAPI.isMapiSupported()) {
            Message msg = new Message();
            msg.setSubject("test!");
            msg.setBody("Hello world");
    
            List<String> toAddresses = new LinkedList<String>();
            toAddresses.add("example@example.com");
            msg.setToAddrs(toAddresses);
    
            List<String> attachPaths = new LinkedList<String>();
            //Must be absolute paths to file
            attachPaths.add("C:\Users\Documents\file.jpg");
            msg.setAttachments(attachPaths);
    
            JMAPI.open(msg);
        }
    

    Another possibility that might work for Windows and Mac (and potentially other OSes) is to generate a ".eml" or ".msg" file with the content and attachments you would like to include already encoded as part of the email. This file could then be launched with the default handler for the respective email file format. However, this is not guaranteed to open the default email handler, nor is the file format going to be compatible with everyone email client.

    0 讨论(0)
提交回复
热议问题