Javax.mail или java email - как открыть почту без прямой отправки
Я пытаюсь понять, как открыть электронную почту, используя javax.mail. Моя цель - предоставить функцию, при которой пользователь нажимает кнопку, и по умолчанию электронное письмо открывается с вложением. До сих пор я использую javax.mail, и он просто отправляет электронное письмо прямо при нажатии кнопки. Есть ли способ просто открыть письмо без прямой отправки? Если так, то как? Я использую Java 8.
Я не могу использовать mailto: потому что мне нужно прикрепить png-файл, когда пользователь открывает электронное письмо. Кроме того, я не уверен, стоит ли мне использовать ProcessBuilder для открытия внешнего вида, потому что на компьютере каждого пользователя будет свое имя пользователя на диске 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....";
}
1 ответ
Есть ли способ просто открыть письмо без прямой отправки? Если так, то как?
Не звони Transport.send
, Затем следуйте инструкциям в этом ответе. и начать с msg.saveChanges()
, Есть X-Unsent
заголовок в этом ответе, который можно использовать для переключения некоторых функций Outlook.
Кроме того, я не уверен, стоит ли мне использовать ProcessBuilder для открытия внешнего вида, потому что на компьютере каждого пользователя будет свое имя пользователя на диске C, или я не уверен, как его использовать.
Ты используешь File.createTempFile
Как это будет учитывать имена пользователей. Если вам нужно сохранить в другом месте, вы можете прочитать из System.getProperty
или если вы ориентируетесь только на компьютеры Windows, вы можете прочитать из System.getenv. Чтобы перечислить все переменные среды, вы можете набрать set
в командном окне.