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

问题描述 投票:0回答:1

这个问题在这里已有答案:

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

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

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

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

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

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

举个例子,假设我有一个名为X的设备。程序问我“X会产生过大的噪音吗?”然后我检查“正确”按钮。然后,它询问“X是否正常压力水平?”,然后检查“不正确”按钮,并添加注释“压力水平为高”。等等,直到我回答了每一个问题。然后,当我完成X设备并按下“完成”按钮后,我想要一个“新电子邮件”展示窗口弹出,接收器已经完成,“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。

java email outlook javamail
1个回答
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);
}
}

希望这可以帮助。

© www.soinside.com 2019 - 2024. All rights reserved.