Изображение источника данных становится поврежденным при отправке строки во встроенном javax.mail - PullRequest
0 голосов
/ 27 января 2020

Я пытаюсь отправить встроенное изображение e по почте через java. У меня есть байтовый массив , поэтому я преобразовал байтовый массив в строка с использованием функции ниже.

 public static String getImgString(byte[] fileImg) throws IOException {
    String imageString = new String(fileImg,"UTF-8");
    return imageString;
}

Я получил строку, и эту строку я проверил через преобразователь, отобразил ее и использованное изображение.

Теперь я прикрепил свое изображение к телу mail с кодом ниже.

byte[] arr = getImageFileBytes(); // I got byte[] from this function
DataSource dataSourceImage = new ByteArrayDataSource(getImgString(arr),"image/png"");

MimeBodyPart imageBodyPart = new MimeBodyPart();
imageBodyPart.setDataHandler(new DataHandler(dataSourceImage));

Я получаю электронное письмо, как показано ниже.

Я думаю, что есть какой-то формат, который мне не хватает в преобразовании источника данных, или мне нужно добавить дополнительные данные: image / png; base64 в строку изображения ??

Какие изменения мне нужно сделать, чтобы получить изображение, которое у меня есть в строке.

Заранее спасибо.

enter image description here

1 Ответ

2 голосов
/ 28 января 2020

Если ваши данные изображения на самом деле находятся в файле, вы должны использовать метод attachFile :

MimeBodyPart mbp = new MimeBodyPart();
mbp.attachFile("file.png", "image/png", "base64");

Если у вас есть только данные изображения в памяти, вам нужно что-то сделать например:

MimeBodyPart mbp = new MimeBodyPart();
ByteArrayDataSource bds = new ByteArrayDataSource(getImageFileBytes(), "image/png");
mbp.setContent(new DataHandler(bds));

Конечно, если вы ссылаетесь на это изображение из отдельной html части, вам нужно убедиться, что обе они заключены в составную / связанную часть.

Дополнительную информацию можно найти в FAQ по JavaMail .

...