#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.
Третий аргумент — путь к вложению