Нужно открыть 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();
    }
}

Вам придется заниматься очисткой после закрытия почтового клиента.

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

Другие вопросы по тегам