Запустить Mail-клиент с вложением? - PullRequest
21 голосов
/ 17 мая 2011

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

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

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

Ответы [ 3 ]

6 голосов
/ 23 мая 2011

Кажется, что нет никакого независимого от ОС способа сделать это в 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" с содержимым и вложениями, которые выхотел бы включить уже закодированный как часть письма.Этот файл может быть запущен с обработчиком по умолчанию для соответствующего формата файла электронной почты.Однако это не гарантирует открытие обработчика электронной почты по умолчанию, и формат файла не будет совместим с любым почтовым клиентом.

0 голосов
/ 22 сентября 2017

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

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

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

0 голосов
/ 22 мая 2011

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

...