如何使用 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);
}
}
希望对您有所帮助。
我正在尝试编写一个程序,在用户查看某些设备并回答有关它们的一些问题后,它会创建一个报告并自动将其发送到数据库。
程序本身不是很复杂,我也差不多解决了,就是发送邮件的部分失败了。我一直在搜索,找到了 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);
}
}
希望对您有所帮助。