发送电子邮件图像Bufferedimage / ImageIO

时间:2016-07-26 02:09:12

标签: java email base64 bufferedimage javax.imageio

我正在尝试将base64图像转换为可以在gmail / outlook上看到的文件。目前,当我向我现有的Gmail发送带有图像的电子邮件时,图像消失,我可以看到除图像之外的所有文本。但我可以在苹果邮箱中查看图像。我做了一些研究,它说gmail已经阻止了base64图像。所以我唯一能做的就是转换base64图像。

     <img alt=3D"" src=3D"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAANsA=AABpCAIAAAA848FpAAAF/0lEQVR4nO2c2ZXjOAxFnW5l4VCcWyeADGo+elqmiIXgI......=3D" /></div>

我使用缓冲的image / imageIO修改了我的代码,但是当我发送电子邮件时它并没有什么区别。这有什么不对吗?或者还有其他方法可以看到base64图像吗?

这是我的图像代码。

    String _message = _n.getRichcontent();  
    String[] _s = _message.split(",");
    String message = _s[1];
    System.out.println(_s[1]);

    // create a buffered image
    BufferedImage image = null;
    byte[] imageByte;
    BASE64Decoder decoder = new BASE64Decoder();
    try {
        imageByte = decoder.decodeBuffer(message);  
        ByteArrayInputStream bis = new ByteArrayInputStream(imageByte);

        image = ImageIO.read(bis);
        System.out.println("Reading complete.");

        bis.close();

        // write the image to a file
        File outputfile = new File("image.png");

        ImageIO.write(image, "png", outputfile);
        System.out.println("Writing complete." + outputfile);


    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
        System.out.println("Error: "+e);
    }

这是我的电子邮件中显示图片的代码。

    _msg = _msg + _message + "<BR><BR>"; 

这是发送电子邮件。

   sendMail(_sender, _receipients, _subject, _msg);

1 个答案:

答案 0 :(得分:0)

不,没有直接的方法。但是......

想象一下一个html表,它具有图像的宽度和图像的高度,每个单元格都有不同的背景颜色,如下所示:

        String str = "Thank you very much [icon]";
        int start = str.indexOf("[icon]");
        int end = start + "[icon]".length();
        SpannableString ss = new SpannableString(str); 
        Drawable d = getResources().getDrawable(R.drawable.headphones); 
        d.setBounds(0, 0, d.getIntrinsicWidth(), d.getIntrinsicHeight()); 
        ImageSpan span = new ImageSpan(d); 
        ss.setSpan(span, start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 
        textView.setText(ss); 

每个像素约为31个字节。

如果您的64x64图像为64 * 64 * 31字节= 127kb的实色。

你能忍受吗?

如果是,this discussion may help