- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试弄清楚如何使用 javax.mail 打开电子邮件。我的目标是提供一项功能,用户单击按钮,就会打开带有附件的默认电子邮件。到目前为止,我正在使用 javax.mail,它的作用只是在单击按钮时发送电子邮件。有没有办法只打开电子邮件而不直接发送?如果是这样,怎么办?我正在使用 Java 8。
我无法使用“mailto:”,因为当用户打开电子邮件时我需要附加一个 png 文件。另外,我不确定是否应该使用 ProcessBuilder 打开 Outlook,因为每个用户的计算机在 C 驱动器内都有不同的用户名,或者我不确定如何使用它。
这是我的代码,以防万一您需要它
String result;
String to = "....gov";
String from = "....gov";
String host = "....gov";
Properties properties = System.getProperties();
properties.setProperty("mail.smtp.host", host);
Session mailSession = Session.getDefaultInstance(properties);
try{
MimeMessage message = new MimeMessage(mailSession);
message.setFrom(new InternetAddress(emailFrom));
message.addRecipient(Message.RecipientType.TO,new InternetAddress(emailTo));
message.setSubject("meh!");
BodyPart messageBodyPart = new MimeBodyPart();
messageBodyPart.setText("text body mehmehmehmeh");
// Create a multipar message
Multipart multipart = new MimeMultipart();
// Set text message part
multipart.addBodyPart(messageBodyPart);
// Part two is attachment
messageBodyPart = new MimeBodyPart();
String filename = "testing.png";
DataSource source = new FileDataSource(filename);
String imageString = toDataURL.substring("data:image/png;base64," .length());
byte[] contentdata = imageString.getBytes();
ByteArrayDataSource ds = new ByteArrayDataSource(contentdata, "image/png");
messageBodyPart.setDataHandler(new DataHandler(ds));
messageBodyPart.setFileName(filename);
multipart.addBodyPart(messageBodyPart); //
// Send the complete message parts
message.setContent(multipart);
Transport.send(message);
result = "Sent message successfully....";
}catch (MessagingException mex) {
mex.printStackTrace();
result = "Error: unable to send message....";
}
最佳答案
Is there a way to just open the email without direct sending? If so, how?
不要调用Transport.send
。然后follow the steps in this answer.并从 msg.saveChanges()
开始。该答案中有一个 X-Unsent
header ,可用于切换某些 Outlook 功能。
Also I'm not sure if I should use ProcessBuilder to open outlook because every user's machine will have a different userName within the C Drive or I'm not sure how to use that.
您使用 File.createTempFile
因为这将考虑用户名。如果您需要保存在不同的位置,您可以阅读 System.getProperty
或者,如果您仅针对 Windows 计算机,您可以阅读 System.getenv 。要列出所有环境变量,您可以在命令窗口中键入 set
。
关于Javax.mail 或 java email - 如何在不直接发送的情况下打开电子邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50350997/
我是一名优秀的程序员,十分优秀!