代码之家  ›  专栏  ›  技术社区  ›  Hector Guerra

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

  •  0
  • Hector Guerra  · 技术社区  · 7 年前

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

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

    但是看看这里,或者Javamail文档,甚至Google,我都找不到任何关于做这件事的人的参考,即使我知道这是可以做到的,因为我一直在使用一些自己做这件事的程序!

    所以,问题是:我能用JavaMail做到这一点吗?如果是的话,你能给我举个例子,或者什么,来学习如何使用它吗?如果没有,还有其他库能够做到这一点吗?

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

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

    例如,假设我有一个名为X的设备。程序会问我“X是否发出过多噪音?”我检查“正确”按钮。然后,它会问“X的压力水平是否正常?”,我选中了“错误”按钮,并添加了一条注释“压力水平过高”。等等,直到我回答了所有的问题。然后,当我使用完X设备并按下“完成”按钮后,我希望弹出一个“新电子邮件”outlook窗口,收件人已经完成,“设备X 2017年12月27日上午修订版”作为主题,正文类似于:
    "Noise revision: correct Pressure level: incorrect Comment: Pressure level to high Question 3: correct Question 4: correct etc."

    我已经解决了如何创建实体,并将每个参数指定给它的位置。问题是如何将所有数据导出到outlook以准备发送,这是一个弹出并自动实现的问题。是的,老板指定我必须使用outlook。

    1 回复  |  直到 7 年前
        1
  •  2
  •   PKey    7 年前

    因此,我建议如前所述使用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);
    }
    }
    

    希望这有帮助。