私のアプリケーションは、ハイパーリンク付きのHTMLメールを送信します。ユーザーはメールクライアントのリンクをクリックできるはずで、ブラウザはページを開きます。簡単...私は思った。HTMLメールのURLクエリパラメータのエンコーディング
しかし、リンクにはクエリパラメータに特殊文字が含まれるようになりました。例えば。第二のクエリのparamの値はid=1234/pid=1000
あり、得られるjava.net.URLEncoder.encode()
DのURLは
http://example.com/path/?key1=value1&key2=id%3D1234%2Fpid%3D1000
になり、これはHTMLメールに埋め込まれますものです:
<html ...
<head>
<meta http-equiv=Content-Type content="text/html; charset=unicode">
...
<body lang=EN-US ...
<a href="http://example.com/path/?key1=value1&key2=id%3D1234%2Fpid%3D1000">link text</a>
...
(少なくともこれを見ることができます受信側クライアントによる生のメールの内容で)。 http://example.com/path/?key1=value1&key2=id%253D1234%252Fpid%253D1000
及びリンクはもう動作しません:
問題は、リンクをクリックすると、ブラウザが開きますが、クエリの引数に二重エンコードされていることです。面白いことに、リンクがブラウザにコピー/ペーストされた場合、追加のエンコーディングは(期待通りに)省略されます。 リンク上にマウスを置くと、URLはデコードされて表示されます: http://example.com/path/?key1=value1&key2=id=1234/pid=1000
(OutlookとThundbirdでテストされ、どちらも同じ動作をします)。
私の質問は、ここで間違っていますか?
- これは私の最初のエンコードですか?スキップする必要がありますか?
- 私の最初のエンコーディングですか、それは間違っていますか?
- メールクライアントは責任を負いますか?
URLエンコーディングがどのように機能するのか、どのようなユースケースでどのエンコーディングが行われるべきかに関する情報はたくさんあります。おかげさまで