簡體   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