首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Javax.mail或java电子邮件-如何在不直接发送的情况下打开电子邮件

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

Stack Overflow用户
提问于 2018-05-15 21:05:13
回答 1查看 586关注 0票数 0

我正在尝试解决如何使用javax.mail打开电子邮件。我的目标是提供一个功能,用户点击一个按钮,默认的电子邮件就会打开一个附件。到目前为止,我使用的是javax.mail,它所做的就是在点击按钮时发送电子邮件。有没有办法直接打开电子邮件而不直接发送?如果是这样的话,是怎么做的?我使用的是Java 8。

我不能使用“mailto:”,因为当用户打开电子邮件时,我需要附加一个png文件。此外,我不确定是否应该使用ProcessBuilder打开outlook,因为每个用户的机器在C盘中都会有一个不同的userName,或者我不确定如何使用它。

这是我的代码,以防万一你需要它

代码语言:javascript
复制
 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....";
       }
EN

回答 1

Stack Overflow用户

发布于 2018-05-15 22:14:04

有没有办法直接打开电子邮件而不直接发送?如果是这样的话,是怎么做的?

别给Transport.send打电话。然后使用follow the steps in this answer.,并从msg.saveChanges()开始。答案中有一个X-Unsent标题,可以用来切换一些outlook功能。

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

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50350997

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档