java - 使用 javax.mail 在邮件正文中发送编码图像

标签 java email base64 jakarta-mail

我需要使用 java 发送图像作为电子邮件正文的一部分:-

我遵循的步骤如下

  • 获取图像并使用 org.apache.commons.codec.binary.Base64 对其进行编码,然后在 html 中将其用作图像 src 标记。

  • 解码编码图像并使用邮件程序 API 发送。

我面临的问题是,某些图像正在通过邮件程序 API 传递并在电子邮件正文中可见,而有些图像则不可见。

是图像的大小造成了问题吗?

感谢和问候 昆丹赛尼

public static void main(String[] args) {

     String htmlContent = readFile("c:\\temp\\imagenotsending.html");


     String encodeHtmlContent = encodeStringToBase64(htmlContent);
     System.out.println(encodeHtmlContent);

     String decodeHtmlBody = decodeStringToBase64(encodeHtmlContent);
     sendMailNew(decodeHtmlBody);
 }  

 public static void sendMailNew(String body) {
    String to = "to address";

    // Sender's email ID needs to be mentioned
    String from = "from address here";

    // Assuming you are sending email from localhost
    String host = "host here";

    // Get system properties
    Properties properties = System.getProperties();

    // Setup mail server
    properties.setProperty("host", host);

    // Get the default Session object.
    Session session = Session.getDefaultInstance(properties);

    try {
        // Create a default MimeMessage object.
        MimeMessage message = new MimeMessage(session);

        message.setContent(body, "text/html; charset=utf-8");

        // Set From: header field of the header.
        message.setFrom(new InternetAddress(from));

        // Set To: header field of the header.
        message.addRecipient(Message.RecipientType.TO, new InternetAddress(
                to));

        // Set Subject: header field
        message.setSubject("This is the Subject Line!");

        // Send message
        Transport.send(message);
        System.out.println("Sent message successfully....");
    } catch (MessagingException mex) {
        mex.printStackTrace();
    }
}


public static String encodeStringToBase64(String aString) {
    byte[] encodedBytes = Base64.encodeBase64(aString.getBytes());
    return new String(encodedBytes);
}

public static String decodeStringToBase64(String aString) {
    byte[] decodedBytes = Base64.decodeBase64(aString.getBytes());
    return new String(decodedBytes);
}

Html 文件如下:-

<html>

<head>
    <title>Test</title>
</head>

<body>
    
					<img src="data:image/png;base64,iVBORw0KGg.......rkJggg==">

                   
</body>

</html>

Base 64 encoding of image below not sending Base 64 encoding of image below is sending

最佳答案

所以您正在尝试在邮件正文中发送 Base64 图像。问题可能与某些邮件代理不支持这一事实有关。

您可以在这里看到:Send a base64 image in HTML email

所以基本上在邮件正文中发送图像的更好方法是使用 cid 和图像作为附件(也不是在任何地方都有效)。

有一篇很好的文章描述了向邮件添加图像的不同方法及其优缺点: https://sendgrid.com/blog/embedding-images-emails-facts/

关于java - 使用 javax.mail 在邮件正文中发送编码图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47076846/

相关文章:

java - 是否可以在java swing中从ListSelectionEvents中提取字符串?

java - 如何在改造的GET中使用多个@Path参数

java - 如何在 Robolectric 3 中获取上下文

c# - 是否可以从 XNA 发送电子邮件?

javascript - 编码然后以 Base64 解码不会输出我的输入数组缓冲区

java - spring boot 2.1.7 默认登录不成功

ruby-on-rails - 使用 ActionMailer 发送多部分邮件时出现问题

Python 搜索 imap 电子邮件中的字符串

iOS 将 base64 编码图像上传到 RESTful 服务器时获取 http 400

javascript - 如何在不使用 eval() 的情况下以 Base62 编码压缩 JavaScript 代码?