【问题标题】:Javax.mail or java email - how to open email without direct sendingJavax.mail 或 java 电子邮件 - 如何在不直接发送的情况下打开电子邮件
【发布时间】:2018-05-15 22:14:03
【问题描述】:

我试图弄清楚如何使用 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....";
       }

【问题讨论】:

    标签: java email jakarta-mail javax


    【解决方案1】:

    有没有办法只打开电子邮件而不直接发送?如果有,怎么做?

    不要打电话给Transport.send。然后follow the steps in this answer. 并以msg.saveChanges() 开头。该答案中有一个 X-Unsent 标头,可用于切换某些 Outlook 功能。

    我也不确定是否应该使用 ProcessBuilder 打开 Outlook,因为每个用户的机器在 C 驱动器中都有不同的用户名,或者我不确定如何使用它。

    您使用File.createTempFile,因为这将说明用户名。如果您需要保存在不同的位置,您可以从 System.getProperty​ 读取,或者如果您只针对 Windows 机器,您可以从 System.getenv 读取。要列出所有环境变量,您可以在命令窗口中键入 set

    【讨论】:

      猜你喜欢
      • 2021-05-19
      • 2012-02-04
      • 2021-10-08
      • 1970-01-01
      • 1970-01-01
      • 2018-07-04
      • 2012-12-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多