微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将 S3 签名 URL Pdf 作为电子邮件附件发送

如何解决将 S3 签名 URL Pdf 作为电子邮件附件发送

我正在尝试将 S3 pdf 文档作为电子邮件附件发送。我使用文档的签名 URL 并构建 MimeBodyPart,如下所示。

 Multipart multipart = new MimeMultipart();

 // have another MimeBodyPart for text/html content



BodyPart attachment = new MimeBodyPart();
attachment.setDataHandler(new DataHandler(new URLDataSource(attachmentUrl)));
attachment.setFileName(<filename>);
attachment.setdisposition(MimeBodyPart.ATTACHMENT);
attachment.setContent(<filename>,"application/pdf");
multipart.addBodyPart(attachment)

我面临的问题是附件已成功附加但没有任何内容。我的意思是它总是 1KB。并且无法打开/查看任何内容

pdf 文件就面临上述问题。但是,如果我提供一些图片 URL 并删除 setContentsetdisposition 一切都会按预期工作。

调试更多查看原始电子邮件可以看到附件的标题不同。

附加此 URL 中的图像时

Content-Type: image/png; name=googlelogo_color_272x92dp.png
Content-transfer-encoding: base64
Content-disposition: attachment; filename=googlelogo_color_272x92dp.png

但是当我通过 URL 附加任何已签名的 PDf/S3 时,我得到如下

Content-Type: application/pdf; name=structures-and-c.pdf
Content-transfer-encoding: 7bit
Content-disposition: attachment; filename=structures-and-c.pdf

当我没有明确设置内容类型时出现的异常。图像不会受到同样的抱怨。

javax.mail.internet.ParseException: In Content-Type string <pdf>,expected '/',got null

    at javax.mail.internet.ContentType.<init>(ContentType.java:80)
    at javax.mail.internet.MimeBodyPart.updateHeaders(MimeBodyPart.java:1486)
    at javax.mail.internet.MimeBodyPart.updateHeaders(MimeBodyPart.java:1148)
    at javax.mail.internet.MimeMultipart.updateHeaders(MimeMultipart.java:498)
    at javax.mail.internet.MimeBodyPart.updateHeaders(MimeBodyPart.java:1509)
    at javax.mail.internet.MimeMessage.updateHeaders(MimeMessage.java:2238)
    at javax.mail.internet.MimeMessage.saveChanges(MimeMessage.java:2198)
    at javax.mail.internet.MimeMessage.writeto(MimeMessage.java:1877)
    at javax.mail.internet.MimeMessage.writeto(MimeMessage.java:1854)

解决方法

如果您使用上述方式将 S3 签名 url 用于 PDF,则无需设置以下内容。

attachment.setDisposition(MimeBodyPart.ATTACHMENT);
attachment.setContent(<filename>,"application/pdf");

确保在生成签名 URL 时正确设置以下内容

GetObjectRequest.builder()
                    .bucket(bucketName)
                    .key(objectName)
                    .responseContentDisposition("attachment;filename=" + objectName)
                    .responseContentEncoding("base64")
                    .responseContentType("application/pdf")

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。