java 如何在gmail中显示字符串的QR码

dgtucam1  于 2023-02-18  发布在  Java
关注(0)|答案(2)|浏览(145)

我有一个带有<img>标签的HTML模板,用于显示用户ID的QR码表示,为此,我简单地使用了**https://sendgrid.com/blog/embedding-images-emails-facts/一节中内联嵌入(Base64编码)**建议的数据URL技术src="data:image/png;base64, base64String
这是在outlook工作,但似乎有一个Gmail的问题。什么是最好的方式来显示这个QR码在电子邮件客户端,特别是在Gmail。注意,我没有一个实际的图像文件,因为QR是从用户ID生成的,最多我只有字节数组表示QR图像。
我正在使用sendgrid发送电子邮件。

tvokkenx

tvokkenx1#

正如这个答案所建议的https://stackoverflow.com/a/29205203/2017536下面是如何使用javax.mail包来解决这个问题

@Autowired
private JavaMailSender mailSender;

 private void sendMail(String to, String subject, String bodyPlainText, String bodyHtml, String contentId, String base64Image) {
    try {
        MimeMessage message = mailSender.createMimeMessage();
        message.setSubject(subject);
        message.setFrom(new InternetAddress(from));
        message.setRecipient(Message.RecipientType.TO, new InternetAddress(to));

        MimeBodyPart textPart = new MimeBodyPart();
        textPart.setContent(bodyPlainText, "text/plain; charset=UTF-8");

        MimeBodyPart htmlPart = new MimeBodyPart();
        htmlPart.setContent(bodyHtml, "text/html; charset=UTF-8");

        Multipart multiPart = new MimeMultipart("alternative");

        // create a new imagePart and add it to multipart so that the image is inline attached in the email
        byte[] rawImage = Base64.getDecoder().decode(base64Image);
        BodyPart imagePart = new MimeBodyPart();
        ByteArrayDataSource imageDataSource = new ByteArrayDataSource(rawImage,"image/png");

        imagePart.setDataHandler(new DataHandler(imageDataSource));
        imagePart.setHeader("Content-ID", "<qrImage>");
        imagePart.setFileName("someFileName.png");

        multiPart.addBodyPart(imagePart);
        multiPart.addBodyPart(textPart);
        multiPart.addBodyPart(htmlPart);

        message.setContent(multiPart);

        mailSender.send(message);
    } catch (MessagingException exception) {
        //log error
    }
}

在你的html模板中你应该有<img src="cid:qrImage" alt="qr code">

ca1c2owp

ca1c2owp2#

前段时间我遇到过这种情况,我可以使用一个API来处理它,这个API返回一个image/png内容类型。试试这个链接https://goqr.me/api/,它会帮助你。

<img src="https://api.qrserver.com/v1/create-qr-code/?size=150x150&data=MYTEST" width="150" />

如果您需要使用敏感数据,则需要对其进行加密。

相关问题