我正在尝试编写一个程序,在用户查看某些设备并回答有关它们的一些问题后,它会创建一个报告并自动将其发送到数据库。
程序本身并不复杂,我或多或少都解决了,但我在发送邮件方面失败了。我一直在寻找,我已经找到了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。
答案 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);
}
}
希望这有帮助。