Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Start Mail-Client with Attachment?

Tags:

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 limitations of the RFC the java.awt.Desktop.mail-Method is not working with attachments. The JDIC-project is dead and the JMAPI-project is rather obscure in the building process. (Needs 1.4 Mozilla-Sources) And I have to build it for 64 bit systems myself.

Is there an alternative? I already read the articles here but using the rundl32.dll and such "solutions" aren't something I want to put in production code.

like image 252
schlingel Avatar asked May 17 '11 10:05

schlingel


People also ask

How do I open the default Mail client in C#?

But you can use mailto:[email protected] link in asp.net or you can start process in windows application with passing mailto:[email protected].

How do I set default Mail client?

Change Windows 10 Default Email App To set your favorite email client as the system-wide default, head to Settings > Apps > Default Apps. Then in the right panel under the Email section, you will see it is set to the Mail app. Just click on it and choose the email app you want to use as the default from the list.

How do I set the default Mail client in Windows 11?

Or you can right-click the Start button in your taskbar and select “Settings.” When Settings opens, click “Apps” in the sidebar, and then select “Default Apps.” In Default Apps, click the search bar and type in the name of the email app you'd like to use as your default.


1 Answers

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("[email protected]");         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.

like image 52
Rajiv Makhijani Avatar answered Oct 23 '22 02:10

Rajiv Makhijani