Нужно открыть MS Outlook с вложениями
Мне нужно реализовать приведенную ниже логику с использованием Java.
-> Когда я нажимаю на кнопку, MS Outlook нужно открыть с помощью To,CC, Тема и вложение.
Мы можем использовать mailto для этого, но мы не можем добавить вложение, если мы используем mailto.
мне нужно добавить несколько вложений из общей папки в MS Outlook
Пожалуйста, помогите мне.
С помощью переключателя можно иметь одно вложение, но мне нужно открыть outlook с вложением 2+ и должна быть доступна кнопка отправки, чтобы пользователь мог отправлять почту
1 ответ
Используйте JavaMail для создания составного сообщения MIME с вашими To, CC, Subject и вложением. Затем вместо транспортировки сообщения вызовите saveChanges и writeTo и сохраните письмо в файловой системе.
Есть недокументированный /eml
переключатель, который можно использовать для открытия стандартного формата MIME. Например, outlook /eml filename.eml
Есть документированный /f
переключатель, который откроет msg
файлы. Например outlook /f filename.msg
x-unsent
может использоваться для переключения кнопки отправки.
Вот пример для начала:
public static void main(String[] args) throws Exception {
//Create message envelope.
MimeMessage msg = new MimeMessage((Session) null);
msg.addFrom(InternetAddress.parse("you@foo.com"));
msg.setRecipients(Message.RecipientType.TO,
InternetAddress.parse("support@bar.com"));
msg.setRecipients(Message.RecipientType.CC,
InternetAddress.parse("manager@baz.com"));
msg.setSubject("Hello Outlook");
//msg.setHeader("X-Unsent", "1");
MimeMultipart mmp = new MimeMultipart();
MimeBodyPart body = new MimeBodyPart();
body.setDisposition(MimePart.INLINE);
body.setContent("This is the body", "text/plain");
mmp.addBodyPart(body);
MimeBodyPart att = new MimeBodyPart();
att.attachFile("c:\\path to file.attachment");
mmp.addBodyPart(att);
msg.setContent(mmp);
msg.saveChanges();
File resultEmail = File.createTempFile("test", ".eml");
try (FileOutputStream fs = new FileOutputStream(resultEmail)) {
msg.writeTo(fs);
fs.flush();
fs.getFD().sync();
}
System.out.println(resultEmail.getCanonicalPath());
ProcessBuilder pb = new ProcessBuilder();
pb.command("cmd.exe", "/C", "start", "outlook.exe",
"/eml", resultEmail.getCanonicalPath());
Process p = pb.start();
try {
p.waitFor();
} finally {
p.getErrorStream().close();
p.getInputStream().close();
p.getErrorStream().close();
p.destroy();
}
}
Вам придется заниматься очисткой после закрытия почтового клиента.
Вы также должны подумать о последствиях безопасности сообщений электронной почты, оставляемых в файловой системе.