如何使用 java 在 outlook 中准备(而不是发送)电子邮件?

How to prepare (not send) an e-mail in outlook, with java?

我正在尝试编写一个程序,在用户查看某些设备并回答有关它们的一些问题后,它会创建一个报告并自动将其发送到数据库。

程序本身不是很复杂,我也差不多解决了,就是发送邮件的部分失败了。我一直在搜索,找到了 JavaMail API,我什至学会了用它发送电子邮件,或多或少,但我的公司阻止了任何外部程序发送电子邮件的尝试-mail,所以我决定给它一个不同的方法并尝试而不是自动发送它,在 Outlook 编辑器本身准备邮件,准备发送,并且用户只需点击发送,在查看它之后.

但是看这里,或者 Java 邮件文档,甚至谷歌搜索,我找不到任何关于人们这样做的参考,即使我知道它可以完成,因为我一直在使用一些程序他们自己做的!

所以,问题是:我可以用 JavaMail 做到这一点吗?如果是的话,你能给我提供一个例子或其他东西来学习如何使用它吗?如果没有,还有其他图书馆可以做到吗?

也许这是一个简单的问题,也许Java本身就有做这件事的功能。但是我已经找了一个星期了,没找到我能用的。

我对编程非常陌生(一年多一点),所以请尽量将答案保持在一些新手可以理解的基础水平。

例如,假设我有一个名为 X 的设备。程序询问我 "Does X makes excessive noise?",然后我检查 "Correct" 按钮。然后,它询问 "Has X a normal pressure level?",我选中 "Incorrect" 按钮,并添加评论 "Pressure level to high"。依此类推,直到我回答完所有问题。然后,当我完成 X 设备并按下 "Finish" 按钮时,我想要一个 "New Email" outlook window 弹出,接收器已经完成,"Equipment X 27/12/2017 morning revision" 作为主题,正文类似于:
"Noise revision: correct Pressure level: incorrect Comment: Pressure level to high Question 3: correct Question 4: correct etc."

我已经解决了如何创建正文并将每个参数分配到它的位置。问题是弹出和自动完成的东西,如何将所有数据导出到 outlook 以准备发送。是的,老板指定我必须使用outlook。

所以我建议使用 JavaMail 创建和保存一条消息,正如所讨论的那样 here

现在,您无法立即发送特定消息,因为消息 header 不包含以下行:

"X-Unsent":1

(实际上会指示 Outlook 客户端邮件处于草稿状态)

因此代码应如下所示:

(注意这个没有测试,只是从不同来源复制粘贴)

public static void createMessage(String to, String from, String subject, String body, List<File> attachments) {
try {
    Message message = new MimeMessage(Session.getInstance(System.getProperties()));
    message.setFrom(new InternetAddress(from));
    message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to));
    message.setSubject(subject);

    //make it a draft!!             
    message.setHeader("X-Unsent", "1");

    // create the message part 
    MimeBodyPart content = new MimeBodyPart();
    // fill message
    content.setText(body);
    Multipart multipart = new MimeMultipart();
    multipart.addBodyPart(content);
    // add attachments
    for(File file : attachments) {
        MimeBodyPart attachment = new MimeBodyPart();
        DataSource source = new FileDataSource(file);
        attachment.setDataHandler(new DataHandler(source));
        attachment.setFileName(file.getName());
        multipart.addBodyPart(attachment);
    }
    // integration
    message.setContent(multipart);
    // store file
    message.writeTo(new FileOutputStream(new File("c:/mail.eml")));
} catch (MessagingException ex) {
    Logger.getLogger(Mailkit.class.getName()).log(Level.SEVERE, null, ex);
} catch (IOException ex) {
    Logger.getLogger(Mailkit.class.getName()).log(Level.SEVERE, null, ex);
}
}

希望对您有所帮助。