Запустить 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"));
должен делать трюк независимым от платформы способом.