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

时间:2017-12-27 11:54:08

标签: java email outlook javamail

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

程序本身并不复杂,我或多或少都解决了,但我在发送邮件方面失败了。我一直在寻找,我已经找到了JavaMail API,我甚至学会了用它发送电子邮件,或多或少,但我的公司阻止任何外部程序发送电子邮件的尝试,所以我决定给它是一种不同的方法,尝试不是自动发送,而是在Outlook编辑器本身准备邮件,准备发送,并且用户只需在查看后点击发送。

但是看到这里,或Javamail文档,甚至谷歌搜索,我都找不到任何人参与,甚至知道它可以做到,因为我一直在使用一些这样做的程序他们自己!

所以,问题是:我可以用JavaMail做到这一点吗?如果是的话,您能否提供一个示例或其他内容来学习如何使用它?如果没有,任何其他图书馆都可以做到吗?

也许这是一个简单的问题,也许Java本身就有这样做的功能。但是我已经找了一个星期了,我找不到任何可以使用的东西。

我非常非常喜欢编程(一年多一点),所以请尽量将答案保持在新手可以理解的基本水平上。

作为一个例子,我们说我有一台名为X的设备。程序问我" X会产生过多的噪音吗?"我检查"纠正"按钮。然后,它询问" X是否正常压力水平?",我检查"不正确"按钮,并添加注释"压力等级为高"。等等,直到我回答了每一个问题。然后,当我完成X设备,并推动"完成"按钮,我想要一个"新电子邮件"展望窗口弹出,接收器已经完成,"设备X 27/12/2017早上修订"作为主体,和身体类似:
"Noise revision: correct Pressure level: incorrect Comment: Pressure level to high Question 3: correct Question 4: correct etc."

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

1 个答案:

答案 0 :(得分:1)

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

现在,您无法立即发送特定邮件,因为邮件标头不包含以下行:

"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);
}
}

希望这有帮助。