Я пытаюсь отправить html-письма с логотипом и изображением подписи пользователя. Я использую Apache Commons Mail. Я следовал учебному пособию по Apache и пробовал разные подходы, найденные в Интернете, но я не могу вставить любое изображение.
Я хотел бы отметить, что я не могу использовать URL-адреса для получения встроенного изображения, поскольку это приложение для внутренней сети и, во всяком случае, за системой единого входа, которая блокирует любой доступ извне.
Более того, это не совсем HTML, а XML, который приложение использует в качестве шаблона.
Ниже я добавил xml - html (текст примечания отображается правильно, только встроенные изображения и другие проблемы) и код, который я использую для встраивания изображения, может кто-нибудь указать на любую ошибку, которую я делаю, или предложить решение моей проблемы пожалуйста ?
результирующий html / xml:
<?xml version="1.0" encoding="UTF-8"?><div style="margin-top: 20px; font-size: small;">
<br/>
<div class="auto-style1">
<div style="text-align: left;">
...
<div class="MsoNormal" style="text-align: right; padding-right: 100px; font-family: arial black,sans-serif;">
<img id="signature" src="cid:jrvoirylpp"/>
</div>
...
мой код для отправки почты:
HtmlEmail htmlMail = new HtmlEmail();
initMail(htmlMail);//set commons parameters (host,port,...
htmlMail.setContent(htmlCorpoMessaggio, "text/html");
//i'm trying to retrieve the raw byte array from my app resources
InputStream is = this.getClass().getResourceAsStream(
String.format("%s%s",
Configurator.getString("Template.resources"),
Configurator.getString("Template.firma")));
byte[] image = IOUtils.toByteArray(is);
//can't send an url i'm trying to truly embed the image inside the mail message
DataSource ds = new ByteArrayDataSource(image, "image/png");
String cid = htmlMail.embed(ds, "signature");
//i need to replace the src="an app path" to cid
Document doc = XmlHelper.loadXMLFromString(htmlCorpoMessaggio);
NodeList nodeList = doc.getElementsByTagName("img");
Node currentNode = null;
for(int i = 0; i < nodeList.getLength(); i++)
{
currentNode = nodeList.item(i);
}
NamedNodeMap nodiAttributo = currentNode.getAttributes();
for(int i= 0 ; i < nodiAttributo.getLength() ; i++ )
{
Node n = nodiAttributo.item(i);
if(n.getNodeName().equals("src"))
n.setNodeValue("cid:" + cid);
}
htmlCorpoMessaggio = XmlHelper.getStringFromDocument(doc);
for(MailAttachment allegato : allegati)
{
//la stringa vuota rappresenta la descrizione dell'allegato
htmlMail.attach(allegato.getDataSource(),
allegato.getFilename(),"",EmailAttachment.ATTACHMENT);
}
htmlMail.send();