【问题标题】:JavaMail Exchange server MimeContentJavaMail Exchange 服务器 MimeContent
【发布时间】:2017-12-09 21:21:26
【问题描述】:

我正在使用 JavaMail api,我必须通过 Exchange 服务器发送电子邮件,然后在电子邮件正文中嵌入图像。为此,我使用 ExchangeService 与 Exchange 服务器建立连接。注意:如果是 SMTP,我会通过 Session 和 Authenticator。

我在这里面临的挑战是我最终必须使用 EmailMessage 来发送邮件。我没有选项在 EmailMessage 中设置嵌入消息(MIMEContent)并发送它。

try{

                    ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2010_SP2);
                    ExchangeCredentials credentials = new WebCredentials(userName, password, domain);
                    service.setCredentials(credentials);
                    service.setUrl(new URI(host));
                    EmailMessage msg = new EmailMessage(service);
                    msg.setSubject(subject); //email subject
                    msg.getFrom().setAddress(from);
                    msg.getToRecipients().add(to); //email receiver
                    MimeBodyPart messageBodyPart = new MimeBodyPart();
                    messageBodyPart.setContent(bodyStart, "text/html");

                    // creates multi-part
                    MimeMultipart multipart = new MimeMultipart();
                    multipart.addBodyPart(messageBodyPart);
                    MimeBodyPart imagePart = new MimeBodyPart();
                    imagePart.setHeader("Content-ID", "<123234325>");
                    imagePart.setDisposition(MimeBodyPart.INLINE);
                    imagePart.attachFile("C:/selenium/ma000xsspf01.png");
                    multipart.addBodyPart(imagePart);
                    msg.send(); //send email
}catch(Exception e){
}

请告诉我如何使用对象“msg”将其中的图像设置为嵌入式图像。

【问题讨论】:

  • 您似乎将 Exchange Web 服务和 JavaMail 的 API 混合在一起。可能有一种方法可以只使用 EWS API 来做您想做的事情,但您需要 EWS 专家来帮助您。您或许可以使用 JavaMail API 创建邮件的 MIME 内容,然后使用 EWS EmailMessage.setMimeContent 方法。

标签: java jakarta-mail exchangewebservices


【解决方案1】:

通过使用Datahandler。我想这就是你要找的mail with attachment

【讨论】:

    【解决方案2】:

    尝试以下方法:

    MimeMessage msg = new MimeMessage(objSession);
    MimeBodyPart imagePart = new MimeBodyPart();
    String origFileName = null;
    origFileName = /* Get File Name here*/;
    
    // set the byte content
    DataSource fds = new ByteArrayDataSource(/*Get Image Stream or content array*/, "image/jpeg");
    imagePart.setDataHandler(new DataHandler(fds));
    
    // this header connects the html content to the image mime part
    imagePart.addHeader("Content-ID", "<" + newContentId + ">");
    
    // set the name of resource - after encoding it with Mime utility
    imagePart.setFileName(MimeUtility.encodeText(origFileName, "utf-8", null).replaceAll("\r\n", ""));
    
    // set disposition as inline
    imagePart.setDisposition(MimeBodyPart.INLINE);
    
    MimeMultipart relatedMail = new MimeMultipart("related");
    relatedMail.addBodyPart(imagePart);
    msg.setContent(relatedMail);
    

    【讨论】:

    • 您共享的 sn-p 适合 SMTP 连接。在我的场景中,我使用的是 Exchange 服务器 URL
    • 没关系,使用我分享的 MimeBodyPart 代码。您如何创建 MimeMessage 可能是您的实现。没用?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-11-15
    • 2015-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-09
    • 1970-01-01
    相关资源
    最近更新 更多