繁体   English   中英

Java Mail-附件未显示在电子邮件客户端中?

[英]Java Mail - Attachments not showing in email clients?

好的,所以我不得不更改他为使用Java Mail从我们的应用程序发送电子邮件而发送的另一个开发人员的一些旧代码。 长期以来,这种方法一直很好,但是现在我们也需要发送pdf附件。

因此,基本上在下面,假设有一个对象“邮件”,该对象具有用于文本和html消息的吸气剂,以及一个用于pdf文件名的吸气剂,以从文件系统加载并附加到邮件。

我已经更改了以下标记了代码,因此,如果要附加pdf,请从文件系统加载并附加。 我尝试使用与先前代码相同的结构,尽管我怀疑它不是全部必需的吗?

            Multipart mp = new MimeMultipart("alternative");

            // Create a "text" Multipart message
            BodyPart textPart = new MimeBodyPart();
            textPart.setContent(mail.getText(), "text/plain");
            mp.addBodyPart(textPart);

            // Create a "HTML" Multipart message
            Multipart htmlContent = new MimeMultipart("related");
            BodyPart htmlPage = new MimeBodyPart();

            htmlPage.setContent(mail.getHtml(), "text/html; charset=UTF-8");
            htmlContent.addBodyPart(htmlPage);
            BodyPart htmlPart = new MimeBodyPart();
            htmlPart.setContent(htmlContent);
            mp.addBodyPart(htmlPart);

            // NEW CODE STARTS HERE
            if(StringUtils.isNotBlank(mail.getPdfAttachmentFileName())) {
                Multipart pdfContent = new MimeMultipart("mixed"); //<---- this appears to be an issue???
                BodyPart pdfPage = new MimeBodyPart();

                File file = new File(uploadDir + "/" + mail.getPdfAttachmentFileName());
                DataSource dataSource = new ByteArrayDataSource(new FileInputStream(file), "application/pdf");

                pdfPage.setDataHandler(new DataHandler(dataSource));
                pdfPage.setFileName(mail.getPdfAttachmentFileName());
                pdfContent.addBodyPart(pdfPage);


                BodyPart pdfPart = new MimeBodyPart();
                pdfPart.setContent(pdfContent);
                mp.addBodyPart(pdfPart);
            }
            // NEW CODE ENDS HERE

            mimeMessage.setContent(mp);

无论如何,以上方法都可以。 没有错误或异常,并且消息已发送。 但是附件是否出现取决于您接收邮件的电子邮件客户端。

使用上面的代码,Outlook会以可读的方式接收邮件,并且附件可见并且可以下载。 太棒了。 但是在GMail中,该消息仍然可读,回形针似乎表明有附件,但是没有附件可供下载?

如果您切换`Multipart pdfContent = new MimeMultipart(“ mixed”);' 被“关联”而不是“混合”,恰恰相反。 GMail收到的邮件非常完美,但是Outlook只收到邮件和回形针,没有实际的附件。

显然,我们需要向我们的客户发送电子邮件,而无需知道他们用来打开它们的电子邮件客户端! 显然,我是Java Mail的新手,因此只复制了建议的代码,但这与我们现有的代码并不一致!

有什么想法如何更改上述内容以使其完全独立于电子邮件客户端?

好吧,事实证明Spring有一个帮助器类,可以将所有这些混乱隐藏在你的眼前。

我已经将以上所有代码重构为以下代码,并且效果很好;

            MimeMessageHelper message = new MimeMessageHelper(mimeMessage, true, "UTF-8");
            message.setTo(mail.getTo());
            message.setFrom(mail.getFrom());
            message.setSubject(mail.getSubject());
            message.setText(mail.getText(), mail.getHtml());

            if(StringUtils.isNotBlank(mail.getPdfAttachmentFileName())) {
                File file = new File(uploadDir + "/" + mail.getPdfAttachmentFileName());
                DataSource dataSource = new ByteArrayDataSource(new FileInputStream(file), "application/pdf");
                message.addAttachment(mail.getPdfAttachmentFileName(), dataSource);
            }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM