在Thymeleaf生成的HTML文档中包含<img>
在我的 Spring Boot 应用程序中,我使用 Thymeleaf 生成 HTML 电子邮件。我想<img>在这些电子邮件中包含一个。图像存储在/src/main/resources/static/img/logo.png。
我已经确认可以通过在本地启动应用程序并http://localhost:8080/img/logo.svg在浏览器中请求来解析图像。
要将这张图片包含在 HTML 中,我已经尝试了以下所有内容
<img th:src="@{/img/logo.png}" /><img th:src="@{img/logo.png}" /><img th:src="@{~/img/logo.png}" />- Base64 编码的图像
<img src="data:image/png;base64,iVBORw0KGgoAA..." />
每一个的结果是:
- 抛出异常:org.thymeleaf.exceptions.TemplateProcessingException:链接基“/img/logo.svg”不能是上下文相关的(/...),除非用于执行引擎的上下文实现了 org.thymeleaf.context.IWebContext 接口
- 呈现
<img src="img/logo.png" />在电子邮件中显示为损坏的图像 - 呈现
<img src="/img/logo.png" />在电子邮件中显示为损坏的图像 - 该图像在我测试的大多数电子邮件客户端中呈现,但被 GMail 阻止,并且无法通过设置解除阻止。
我想为了在电子邮件中正确呈现图像,我需要提供绝对 URL,但我不确定如何实现。
部分问题在于,电子邮件之所以没有显示是因为 URL 不正确,还是因为电子邮件客户端阻止了图像,这一点并不明显。
更新
我认为这很明显,但显然不是:我不能使用任何将主机名硬编码为的解决方案,localhost:8080因为这只是我在本地运行时使用的 URL,而且我还需要它在其他环境中工作,例如 prod