Как я могу отправить вложение электронной почты с помощью назначенного клиента, программно из Java - PullRequest
5 голосов
/ 17 сентября 2008

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

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

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

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

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

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

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

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

Ответы [ 6 ]

3 голосов
/ 17 сентября 2008

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

1 голос
/ 17 сентября 2008

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

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

1 голос
/ 17 сентября 2008

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

0 голосов
/ 25 октября 2010
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();
        }
    }

}
0 голосов
/ 17 сентября 2008

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

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

0 голосов
/ 17 сентября 2008

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...