Запустить Mail-клиент с вложением?

В настоящее время я ищу способ (на Java) запустить почтовый клиент по умолчанию с определенным получателем, темой и телом и с предопределенным вложением.

Из-за ограничений RFC java.awt.Desktop.mail-Method не работает с вложениями. JDIC-проект мертв, а JMAPI-проект довольно неясен в процессе строительства. (Требуется 1.4 Mozilla-Sources) И я должен сам собрать его для 64-битных систем.

Есть ли альтернатива? Я уже читал статьи здесь, но использование rundl32.dll и такие "решения" не то, что я хотел бы включить в рабочий код.

3 ответа

Кажется, что нет никакого независимого от ОС способа сделать это в Java, поскольку не все ОС предоставляют стандартный способ запуска приложения электронной почты по умолчанию с более чем основными полями для новой электронной почты.

В Windows можно использовать интерфейс JNI для MAPI, который обеспечит больший контроль над открытием электронной почты в почтовом приложении. Как вы упомянули, одной из таких библиотек является JMAPI - однако, похоже, что существует много библиотек с таким именем с похожими целями. Я обнаружил один, который недавно поддерживается и кажется довольно простым. Он включает в себя предварительно созданный двоичный DLL и сопровождающую библиотеку Java на основе JNI.

https://github.com/briandealwis/jmapi

С этим кодом кажется, что вам нужно всего лишь создать объект сообщения и вызвать метод для его запуска в почтовом приложении: 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);
    }

Другая возможность, которая может работать для Windows и Mac (и, возможно, других ОС), - это создать файл ".eml" или ".msg" с содержимым и вложениями, которые вы хотели бы включить, уже зашифрованными как часть электронного письма. Этот файл может быть запущен с обработчиком по умолчанию для соответствующего формата файла электронной почты. Однако это не гарантирует открытие обработчика электронной почты по умолчанию, и формат файла не будет совместим с любым почтовым клиентом.

(насколько я знаю) В настоящее время невозможно добавить предопределенное вложение, но вы можете сделать другие вещи, которые вы упомянули (для запуска почтового клиента по умолчанию с определенным получателем, темой и телом), используя java.awt.Desktop.mail. Я считаю, что вы уже проверили здесь. Это было бы очень полезно, хотя.

Возможно, уже слишком поздно, но на тот случай, если кто-нибудь все еще найдет эту проблему:

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

должен делать трюк независимым от платформы способом.

Другие вопросы по тегам