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

StackOverflow https://stackoverflow.com/questions/81862

  •  09-06-2019
  •  | 
  •  

Вопрос

Я хотел бы призвать пользователей нашего приложения RCP отправлять подробную информацию о проблеме в наш отдел поддержки.С этой целью я добавил виджет "Связаться со службой поддержки" в наш стандартный диалог об ошибках.

Мне удалось использовать заголовки URI для отправки stacktrace с помощью вызова JDIC в Java 6: Desktop.getDesktop().mail(java.net.URI).Это запустит почтовый клиент пользователя, готовый к добавлению им своих комментариев, и нажмет отправить.

Мне нравится запускать почтовый клиент, потому что это то, к чему пользователь привык, он многое рассказывает службе поддержки о пользователе (sigs, контактные данные и т.д.), И я действительно не хочу для отправки с Java Mail.

Что я хотел бы сделать, так это прикрепить файл журнала и stacktrace в виде файла, чтобы не было требований к максимальной длине, и пользователь видел красивое, чистое электронное письмо, а у отдела поддержки было намного больше информации для работы.

Могу ли я сделать это с тем подходом, который я использую?Или есть способ получше?

Редактировать:Я нахожусь в контексте OSGi, поэтому было бы необходимо объединить JDIC.Если возможно, я бы хотел поставлять как можно меньше зависимостей, а объединение JDIC для нескольких платформ звучит неинтересно, особенно для такой небольшой функции.

JavaMail может подойти, но для того, чтобы это было на рабочих столах наших корпоративных клиентов.Тот Самый настройка / обнаружение конфигурации она должна быть прозрачной, автоматической и надежной.Что касается JavaMail, настройка, похоже, выполняется только вручную.Так ли это на самом деле?

Ответ, который мне нравится больше всего, заключается в использовании Desktop.open() для файла *.eml.К сожалению Outlook Express (а не Outlook) открывает файлы eml.Я понятия не имею, является ли это обычным или по умолчанию для настройки Windows на открытие подобных EML-файлов.Это обычное дело?Или есть другой текстовый формат, который а) легко сгенерировать, б) открывается по умолчанию в том же почтовом клиенте, который уже используют пользователи?

Это было полезно?

Решение

Вы могли бы сохранить временный eml-файл и Desktop.getDesktop().open(emlFile)
Редактировать: Как вы указали, это, к сожалению, приведет к открытию Outlook Express вместо outlook.
Однако, если у вас установлена Windows Live Mail, она будет использовать это.

Другие советы

Если вы используете JDK 6 (вам действительно следует это сделать), Desktop API теперь является частью JRE.Видишь http://java.sun.com/developer/technicalArticles/J2SE/Desktop/javase6/desktop_api/ для получения дополнительной информации.

В качестве совершенно другого способа решения той же проблемы мы используем багтрекер с интерфейсом XML-RPC, и наше приложение (кстати, также RCP) взаимодействует с ним, используя пользовательский диалог отправки.Это означает, что мы можем отправить файлы журналов, чтобы помочь диагностировать проблему, без необходимости поиска их пользователем.

Я уверен, что у большинства багтрекеров есть что-то подобное.Мы используем Jira, и она отлично работает (по-видимому, они только что выпустили бесплатную персональную версию, которая упрощает ее использование).

Используя этот метод, вы можете задать строку темы и основной текст с помощью URI, подобного

mailto:me@here.com?SUBJECT=Support mail&BODY=This is a support mail

Однако длина темы и основного текста будет есть некоторые ограничения

Я не могу придумать, как прикрепить файл, используя этот метод или что-то подобное (без добавления javamail в ваше приложение)

JDIC не всегда может быть доступен на платформе вашего пользователя.Хороший способ сделать это - использовать javamail API.Вы можете отправить электронное сообщение, состоящее из нескольких частей, как описано в этом руководстве SUN:

Отправка вложений

import java.awt.Desktop;
import java.io.File;
import java.net.URI;


public class TestMail {

    public static void main(String[] args) {
        try {       
         Runtime.getRuntime().exec(
                  new String[] {"rundll32", "url.dll,FileProtocolHandler",
                        "mailto:a@a.de?subject=someSubject&cc=a@a.de&bcc=a@a.de&body=someBodyText&Attach=c:\\test\\test.doc"}, null
                  );


        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top