Javax.mail или java email - как открыть почту без прямой отправки - PullRequest
0 голосов
/ 15 мая 2018

Я пытаюсь понять, как открыть письмо, используя 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 Ответ

0 голосов
/ 15 мая 2018

Есть ли способ просто открыть письмо без прямой отправки? Если да, то как?

Не звоните Transport.send. Затем выполните шаги в этом ответе. и начните с msg.saveChanges(). В этом ответе есть заголовок X-Unsent, который можно использовать для переключения некоторых функций Outlook.

Кроме того, я не уверен, стоит ли мне использовать ProcessBuilder для открытия внешнего вида, потому что на компьютере каждого пользователя будет свое имя пользователя на диске C, или я не уверен, как его использовать.

Вы используете File.createTempFile , поскольку это будет учитывать имена пользователей. Если вам нужно сохранить в другом месте, вы можете прочитать с System.getProperty​ или если вы ориентируетесь только на компьютеры Windows, вы можете прочитать с System.getenv . Чтобы вывести список всех переменных среды, вы можете набрать set в командной строке.

...