gpt4 book ai didi

Javax.mail 或 java email - 如何在不直接发送的情况下打开电子邮件

转载 作者:行者123 更新时间:2023-12-02 11:14:57 25 4
gpt4 key购买 nike

我正在尝试弄清楚如何使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com