2017-11-30 18 views
0

Java 응용 프로그램에서 전자 메일을 만들어 사용자에게 보냅니다. 전자 메일이 Gmail 계정으로 전송되고 사용자가 웹 브라우저에서 전자 메일을 온라인으로 확인하면 본문과 전자 메일의 하단에있는 이미지 (즉, 첨부 파일이 아닌)가 표시됩니다 . 그러나 전자 메일이 Microsoft Outlook을 통해 전자 메일을 검사하는 사용자에게 전송되면 (예 : 전자 메일이 Microsoft Exchange Server를 통과하는 경우) 이미지는 이진 파일로 변환 된 다음 전자 메일 메시지에 첨부됩니다. 전자 우편의 맨 아래에 파일 이름 "ATT00001.bin"이 표시됩니다. 이미지가 표시되도록이 문제를 해결하려면 어떻게합니까?Microsoft Outlook에서 인라인 이미지가 바이너리 첨부 파일로 변환되는 것을 방지하려면 어떻게해야합니까?

다음은 전자 메일의 맨 아래에있는 이미지와 전자 메일의 모양입니다. 여기

enter image description here

그러나 전자 메일 Microsoft Outlook에서 모습입니다. 이미지가없고 이진 파일 만 있습니다.

enter image description here

여기 인라인 이미지와 전자 메일을 생성하는 코드 내이다.

MimeMessage message = mailSender.createMimeMessage(); 
    message.setSubject("Subject"); 

    MimeMessageHelper msg = new MimeMessageHelper(message, true); 

    msg.setTo("[email protected]"); 
    msg.setFrom("[email protected]"); 
    msg.setSentDate(new Date()); 

    Multipart multipart = new MimeMultipart(); 

    MimeBodyPart messageBodyPart = new MimeBodyPart(); 
    messageBodyPart.setContent("<html><body>Test<br />" 
    + "<img src='cid:[email protected]'/></body></html>", "text/html"); 
    multipart.addBodyPart(messageBodyPart); 

    MimeBodyPart imagePart = new MimeBodyPart(); 
    DataSource imgSrc = new FileDataSource(new File(getClass().getClassLoader() 
    .getResource("images/Energy_Office-logo.png").toURI())); 
    imagePart.setDataHandler(new DataHandler(imgSrc)); 
    imagePart.setContentID("<[email protected]>"); 
    // The following code does not fix the issue either. 
    // imagePart.setHeader("Content-ID", "<" + "[email protected]" + ">"); 
    imagePart.setDisposition(MimeBodyPart.INLINE); 
    multipart.addBodyPart(imagePart); 

    MimeBodyPart pdfPart = new MimeBodyPart(); 
    DataSource pdfSrc = new ByteArrayDataSource(attachment, mime); 
    pdfPart.setDataHandler(new DataHandler(pdfSrc)); 
    pdfPart.setFileName("file.pdf"); 
    multipart.addBodyPart(pdfPart); 

    message.setContent(multipart, "text/html"); 

    message.saveChanges(); 

    mailSender.send(message); 
+0

는,' "<"+ "[email protected]"("콘텐츠 ID를"'사용 imagePart.setHeader 시도 + ">"); ' –

+0

Outlook에서 이미지가 인라인으로 표시되지 않을 수도 있습니다. http://www.addintools.com/documents/outlook/images/trust-center-window.png –

+0

나는 당신의 제안을 시도했으나 효과가 없었습니다. 테스트를 위해 Mac 버전 15.33 용 Microsoft Outlook을 사용하고 있으며이 버전은 Microsoft의 보안 센터를 포함하거나 지원하지 않는다는 점을 잊어 버렸습니다. –

답변

0

다음 코드를 작성하여 문제를 해결했습니다. 이 하나와 위의 차이점은 본문 텍스트에 setContent 대신 setText이라고 부르며 이미지에 setDataHandler 대신 attachFile을 호출했습니다. 대신 imagePart.setContentID ("<[email protected]>") '의

private void send(String toAddress, String subject, String text, byte[] attachment) { 
    JavaMailSenderImpl mailSender = new JavaMailSenderImpl(); 
    mailSender.setHost(mailHost); 

    MimeMessage message = mailSender.createMimeMessage(); 
    MimeMessageHelper msgHelper = new MimeMessageHelper(message, true); 
    msgHelper.setSubject(subject); 
    msgHelper.setFrom(fromAddress); 
    msgHelper.setTo(toAddress); 

    Multipart multipart = new MimeMultipart(); 

    MimeBodyPart messageBodyPart = new MimeBodyPart(); 
    messageBodyPart.setText(text, "UTF-8", "html"); 
    multipart.addBodyPart(messageBodyPart); 

    MimeBodyPart imagePart = new MimeBodyPart(); 
    imagePart.attachFile(new File(PdfMailServiceImpl.class.getClassLoader().getResource("images/Energy_Office-logo.png").toURI())); 
    imagePart.setContentID("<" + "101" + ">"); 
    imagePart.setDisposition(MimeBodyPart.INLINE); 
    multipart.addBodyPart(imagePart); 

    MimeBodyPart pdfPart = new MimeBodyPart(); 
    DataSource pdfSrc = new ByteArrayDataSource(attachment, mime); 
    pdfPart.setDataHandler(new DataHandler(pdfSrc)); 
    pdfPart.setFileName(formFilename); 
    multipart.addBodyPart(pdfPart); 

    message.setContent(multipart, "text/html"); 

    message.saveChanges(); 

    mailSender.send(message); 
}