как открыть Outlook mail из программы Java и прикрепить файл к почте из каталога

#java

#java

Вопрос:

Мне нужно реализовать функциональность электронной почты в моем Java-приложении, которое откроет Microsoft Outlook и прикрепит файл из моего каталога. Кто-нибудь реализовал то же самое?

Ответ №1:

Согласно этим документам, вам нужна команда

 "path/to/Outlook.exe /c ipm.note /a "path/to/attachment""
  

Соберите это и запустите через ProcessBuilder

(Или послушайте Маркос, который приводит очень хороший пример того, почему иногда лучше не отвечать на вопросы буквально :-))

Ответ №2:

Если вы хотите реализовать функции электронной почты на Java, рассмотрите JavaMail. Кроме того, если в вашем приложении есть функции электронной почты, то вам не нужно открывать другой почтовый клиент (например, Outlook).

Комментарии:

1. Это нормально для серверного приложения или для некоторых конкретных вариантов использования на рабочем столе, но в целом для отправки электронной почты вам нужен SMTP-сервер. И не многие пользователи (по статистике, никто) запускают его на своем локальном компьютере. Вы можете использовать удаленный SMTP-сервер, но даже если вы создадите всю поддержку для обхода брандмауэров и других препятствий, вы не захотите этого делать, так как спамеры съедят это как легкий обед.

2. @serg.nechaev вам в любом случае нужен почтовый сервер (SMTP, Exchange, Domino, что угодно) для отправки электронного письма 🙂

Ответ №3:

Вы можете открыть почтовый клиент системы, используя класс desktop.

 Desktop.getDesktop().mail( new URI( "mailto:address@somewhere.com" ) )
  

Комментарии:

1. Да, но не с вложением

Ответ №4:

Я смог открыть MS Outlook 2007 с помощью электронного письма в формате HTML. Я сделал это с помощью SWT OLE API. Вот руководство по Vogela:http://www.vogella.com/articles/EclipseMicrosoftIntegration/article.html

В руководстве говорится, что это также работает для Java, отличной от RCP.

 public void sendEMail()
{

    OleFrame frame = new OleFrame(getShell(), SWT.NONE);

    // This should start outlook if it is not running yet
    OleClientSite site = new OleClientSite(frame, SWT.NONE, "OVCtl.OVCtl");
    site.doVerb(OLE.OLEIVERB_INPLACEACTIVATE);

    // Now get the outlook application
    OleClientSite site2 = new OleClientSite(frame, SWT.NONE, "Outlook.Application");
    OleAutomation outlook = new OleAutomation(site2);

    OleAutomation mail = invoke(outlook, "CreateItem", 0 /* Mail item */).getAutomation();

    setProperty(mail, "BodyFormat", 2 /* HTML */);
    setProperty(mail, "Subject", subject);
    setProperty(mail, "HtmlBody", content);

    if (null != attachmentPaths)
    {
        for (String attachmentPath : attachmentPaths)
        {
            File file = new File(attachmentPath);
            if (file.exists())
            {
                OleAutomation attachments = getProperty(mail, "Attachments");
                invoke(attachments, "Add", attachmentPath);
            }
        }
    }

    invoke(mail, "Display" /* or "Send" */);

}
  

Комментарии:

1. Такой ответ более полезен сообществу, когда вы предоставляете выдержку из статьи в дополнение к ссылке. В какой-то момент в будущем эта ссылка может не работать — и кто-то, кто найдет этот ответ, снова застрянет.

Ответ №5:

Вот точная команда, которую вы хотите:-

 new ProcessBuilder("C:\Program Files\Microsoft Office\Office14\OUTLOOK.exe","/a","C:\Desktop\stackoverflow.txt").start();
  

Первый аргумент — путь к Outlook.

Второй аргумент — команда Outlook attachment.

Третий аргумент — путь к вложению