Подтвердить что ты не робот

Запустить почтовый клиент с приложением?

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

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

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

4b9b3361

Ответ 1

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

В 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("[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);
    }

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

Ответ 2

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

Ответ 3

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

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

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