我正在尝试在重置密码电子邮件中显示公司 Logo 。 我已经检查了 keycloak 文档,发现它们不支持它。我还尝试将图像编码为 base64,但 Gmail 不支持。我怎样才能做到这一点?
最佳答案
您需要创建一个自定义主题。 检查Keycloak的文档第3章:docs
有五种类型的主题/页面:
- 帐户 - 帐户管理
- 管理员 - 管理控制台
- 电子邮件 - 电子邮件
- 登录 - 登录表单
- 欢迎 - 欢迎页面
您可以从 checkout 此示例存储库开始 kc themes sample ,编辑模板并将其部署到您的 keycloak 中。
就像链接所说...部署它:
Copy
Simplest way to deploy the themes is to copy src/main/resources/theme/* to themes/.
Module
Alternatively you can deploy as modules. This can be done by first running:
mvn clean install $KEYCLOAK_HOME/bin/jboss-cli.sh --command="module add --name=org.keycloak.example.themes --resources=target/keycloak-example-themes.jar"
Then open
standalone/configuration/standalone.xml
and register the theme module by adding:<theme> ... <modules> <module>org.keycloak.example.themes</module> </modules> </theme>
您可以复制其他主题或从 base templates 复制扩展它到您的自定义主题项目。
电子邮件基本模板:email templates
在 checkout 项目和源代码之前,请注意选择相同的 Keycloak 版本。
将 Logo 添加到现有自定义主题内的电子邮件模板的步骤
- 找到您的模板文件:/html/password-reset.ftl(例如 base sample file )
<html>
<body>
${kcSanitize(msg("passwordResetBodyHtml",link, linkExpiration, realmName, linkExpirationFormatter(linkExpiration)))?no_esc}
</body>
</html>
- 替换为您的代码。例如。使用 Base64 图像或对图像文件的链接引用( https://static.myserver.com/image.png 等...)
<html>
<body>
<div>
<img src="data:image/png;base64, iVBORw0KGgoAAAANSUhEUgAAAAUA
AAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO
9TXL0Y4OHwAAAABJRU5ErkJggg==" alt="Red Logo">
</div>
<div>
${kcSanitize(msg("passwordResetBodyHtml",link, linkExpiration, realmName, linkExpirationFormatter(linkExpiration)))?no_esc}
</div>
</body>
</html>
也更新您的纯文本模板(如果您需要,因为并非所有客户端都支持 html)。您无法在此处添加图像,但如果有短信 [file text/password-reset.ftl]
在 Keycloak 中打包并部署主题
在“领域配置”选项卡中选择您的电子邮件模板
正如您在类里面看到的那样 DefaultEmailSenderProvider.java Keycloak 将尝试发送 HTML 电子邮件,如果您未定义,它将使用 text-plain (文件:text/password-reset.ftl
更新:
目前,某些电子邮件客户端存在一些限制。 我建议您阅读以下有关它的注释 ( read me )。
正如上面所说,许多 Web 客户端不会显示包含多个嵌入 Base64 图像的电子邮件(或不显示任何图像)。
因此,Keycloak 电子邮件的一个好策略是使用对静态内容服务器提供的图像的引用(如果您没有其中之一,keycloak 位于也可以配置为静态服务器的 Wildfly 上) )。
因此,您可以实现的最佳解决方案是添加图像,如下所示: 例如。
<img src = "https://static.myserver.com/static/logo.png" alt = "img" />
关于java - Keycloak 在重置密码电子邮件中添加公司 Logo ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57692616/