如何在gmail中显示字符串的二维码
How to display QR code of a string in gmail
我有一个带有 <img>
标签的 HTML 模板来显示用户 ID 的 QR 代码表示,为此我只是使用数据 URL 技术 src="data:image/png;base64, base64String
作为https://sendgrid.com/blog/embedding-images-emails-facts/ 在 内联嵌入(Base64 编码).
部分下建议
这在 outlook 中有效,但 Gmail 似乎有问题。在电子邮件客户端中显示此二维码的最佳方式是什么,尤其是在 Gmail 中。请注意,我没有实际的图像文件,因为 QR 是从用户 ID 生成的,我最多只有代表 QR 图像的字节数组。
我正在使用 sendgrid 发送电子邮件。
正如这个答案所建议的那样
这是使用 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">
我有一个带有 <img>
标签的 HTML 模板来显示用户 ID 的 QR 代码表示,为此我只是使用数据 URL 技术 src="data:image/png;base64, base64String
作为https://sendgrid.com/blog/embedding-images-emails-facts/ 在 内联嵌入(Base64 编码).
这在 outlook 中有效,但 Gmail 似乎有问题。在电子邮件客户端中显示此二维码的最佳方式是什么,尤其是在 Gmail 中。请注意,我没有实际的图像文件,因为 QR 是从用户 ID 生成的,我最多只有代表 QR 图像的字节数组。
我正在使用 sendgrid 发送电子邮件。
正如这个答案所建议的那样 这是使用 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">