首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Keycloak邮件模板: force‘`Content Transfer-Encoding:引号-printable`’用于文本MIME部件

Keycloak邮件模板: force‘`Content Transfer-Encoding:引号-printable`’用于文本MIME部件
EN

Stack Overflow用户
提问于 2022-08-09 04:07:43
回答 1查看 282关注 0票数 0

我用的是Keycloak 15.0.2。在发送帐户验证邮件时,发送的电子邮件将使用Content-Transfer-Encoding: 7bit作为电子邮件的文本部分。

这会导致验证链接位于一条线上,并通过一条很长的行违反了RFC 2822,导致我的电子邮件被弹出。

电子邮件的HTML部分使用Content-Transfer-Encoding: quoted-printable正确编码。

我一直在试图寻找Keycloak的来源,但是我对java的了解太少了,无法真正理解它。我确信在某个地方,MIME消息会被解析,此时它会为每个部分决定一个标头。但我找不到哪里。

我看到了一些消息,其中的文本部分确实有正确的编码。所以我假设某个特定的条件会迫使编码。但我找不到。

我如何才能强迫Keycloak (或Freemarker,或javax MimeBodyPart)使用quoted-printable

MIME输出示例:

代码语言:javascript
复制
Content-Type: multipart/alternative;    boundary="----=_Part_2_1488711957.1660016366185"
Date: Tue, 9 Aug 2022 03:39:26 +0000 (GMT)
From: Mails@covle.com
MIME-Version: 1.0
Message-ID: <126146379.3.1660016366188@b02efe4baa19>
Received: from b02efe4baa19 by mailhog.example (MailHog)
          id duuNy3ONelpvr8ukUqz7WBJnrtPd0oSw43G2W9w8Ix4=@mailhog.example; Tue, 09 Aug 2022 03:39:26 +0000
Reply-To: Mails@example.com
Return-Path: <Mails@examplecom>
Subject: Verify email
To: asdasd@example.com

------=_Part_2_1488711957.1660016366185
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 7bit

Someone has created a Bluppie account with this email address. If this was you, click the link below to verify your email address

http://localhost:8080/auth/realms/bluppie/login-actions/action-token?key=eyJhbGciOiJIUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICIzODYxY2JmMy0wMWYzLTRhMmQtOTg1NC02MmEyYWMyYzhjNzUifQ.eyJleHAiOjE2NjAwMTY2NjYsImlhdCI6MTY2MDAxNjM2NiwianRpIjoiZDVlYjlhODMtMDE0NS00YTBhLTk2M2YtYjBkMjI0ZTA0ZWVkIiwiaXNzIjoiaHR0cDovL2xvY2FsaG9zdDo4MDgwL2F1dGgvcmVhbG1zL2JsdXBwaWUiLCJhdWQiOiJodHRwOi8vbG9jYWxob3N0OjgwODAvYXV0aC9yZWFsbXMvYmx1cHBpZSIsInN1YiI6IjIxOGQ1NzkzLTA0NmYtNDQ4NS04ZmIxLTQ0M2E5NjEyM2FmZiIsInR5cCI6InZlcmlmeS1lbWFpbCIsImF6cCI6ImFjY291bnQiLCJub25jZSI6ImQ1ZWI5YTgzLTAxNDUtNGEwYS05NjNmLWIwZDIyNGUwNGVlZCIsImVtbCI6ImFzZGFzZEBjb3ZsZS5jb20iLCJhc2lkIjoiNmM3ZTk5NGItZTA0ZS00ZTlkLWFkNTQtZjE1MGM4NjcwYzdmLlFfQ244SlY0WFlBLmQ1MzI3MTMwLWIzY2EtNDY4Ny1iZDZkLWViZWFiODAwZTdkMyIsImFzaWQiOiI2YzdlOTk0Yi1lMDRlLTRlOWQtYWQ1NC1mMTUwYzg2NzBjN2YuUV9DbjhKVjRYWUEuZDUzMjcxMzAtYjNjYS00Njg3LWJkNmQtZWJlYWI4MDBlN2QzIn0.yrTUf2tl521Q00IUL-2dWTnugUt_ZeATa3W3IrgoRGM&client_id=account&tab_id=Q_Cn8JV4XYA
[NOTE: The line above is the RFC violation.]

This link will expire within 5 minutes.

If you didn't create this account, just ignore this message.
------=_Part_2_1488711957.1660016366185
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

<html>
<body>
<p>Someone has created a Bluppie account with this email address. If this w=
as you, click the link below to verify your email address</p><p><a href=3D"=
http://localhost:8080/auth/realms/bluppie/login-actions/action-token?key=3D=
eyJhbGciOiJIUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICIzODYxY2JmMy0wMWYzLTRhMmQ=
tOTg1NC02MmEyYWMyYzhjNzUifQ.eyJleHAiOjE2NjAwMTY2NjYsImlhdCI6MTY2MDAxNjM2Niw=
ianRpIjoiZDVlYjlhODMtMDE0NS00YTBhLTk2M2YtYjBkMjI0ZTA0ZWVkIiwiaXNzIjoiaHR0cD=
ovL2xvY2FsaG9zdDo4MDgwL2F1dGgvcmVhbG1zL2JsdXBwaWUiLCJhdWQiOiJodHRwOi8vbG9jY=
Wxob3N0OjgwODAvYXV0aC9yZWFsbXMvYmx1cHBpZSIsInN1YiI6IjIxOGQ1NzkzLTA0NmYtNDQ4=
NS04ZmIxLTQ0M2E5NjEyM2FmZiIsInR5cCI6InZlcmlmeS1lbWFpbCIsImF6cCI6ImFjY291bnQ=
iLCJub25jZSI6ImQ1ZWI5YTgzLTAxNDUtNGEwYS05NjNmLWIwZDIyNGUwNGVlZCIsImVtbCI6Im=
FzZGFzZEBjb3ZsZS5jb20iLCJhc2lkIjoiNmM3ZTk5NGItZTA0ZS00ZTlkLWFkNTQtZjE1MGM4N=
jcwYzdmLlFfQ244SlY0WFlBLmQ1MzI3MTMwLWIzY2EtNDY4Ny1iZDZkLWViZWFiODAwZTdkMyIs=
ImFzaWQiOiI2YzdlOTk0Yi1lMDRlLTRlOWQtYWQ1NC1mMTUwYzg2NzBjN2YuUV9DbjhKVjRYWUE=
uZDUzMjcxMzAtYjNjYS00Njg3LWJkNmQtZWJlYWI4MDBlN2QzIn0.yrTUf2tl521Q00IUL-2dWT=
nugUt_ZeATa3W3IrgoRGM&client_id=3Daccount&tab_id=3DQ_Cn8JV4XYA" rel=3D"nofo=
llow">Link to e-mail address verification</a></p><p>This link will expire w=
ithin 5 minutes.</p><p>If you didn&#39;t create this account, just ignore t=
his message.</p>
</body>
</html>

------=_Part_2_1488711957.1660016366185--
EN

回答 1

Stack Overflow用户

发布于 2022-08-09 06:31:51

tl;dr:将任何非US字符添加到模板中,它将被编码为quoted-printable

在一些缓存页上,我发现了一些旧的文档,它们似乎解释了逻辑:

getEncoding 公共静态字符串getEncoding(DataSource ds) 获取应该应用于此DataSource的输入流的内容传输编码,以使其邮件安全。 这里使用的算法是:

  • 如果DataSource实现了EncodingAware,问它要使用什么编码。如果它返回非空值,则返回该值。
  • 如果此数据源的主要类型是"text“,并且其输入流中的所有字节都是US-ASCII,则编码为”7位“。如果超过一半的字节为非US,则编码为"base64“。如果不到一半的字节是非US,则编码是“可引用的-可打印的”。
  • 如果此数据源的主要类型不是"text",那么如果其输入流的所有字节都是US-ASCII,则编码为“7位”。如果甚至有一个非US字符,编码是"base64“。

参数:

ds - DataSource

返回:

编码。这是“7位”、“引文-可打印”或"base64“。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73286440

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档