← Back to team overview

sslug-teknik team mailing list archive

Problemer med text/html og QP-kodede mail

 

Vi sender nogle mail ud med både en tekst og en html-udgave. Begge
dele er "Content-Transfer-Encoding: quoted-printable" og vi har nogle
problemer med at links i HTML-udgaven går i stykker for mange af vores
brugere. Den relevante standard er RFC2045 afsnit 6.7 punkt 5[0].

Vores mail indeholder følgende:

------------part_2_4496a76d4450f
Content-Type: text/html; charset=iso-8859-1
Content-Transfer-Encoding: quoted-printable


<html>
<head>
<title>Forbrug.dk - Nyhedsbrev</title>
[.. masse HTML ...]

<p>K&aelig;re Peter,</p>
<p>For at vi kan aktivere din tilmelding, bedes du klikke p=E5 linket=
 herunder.</p>
<p><a href=3D"http://www.forbrug.dk/index.php?id=3D9996267&amp;no_cache=3D=
1&amp;task=3DverifyNewAccount&amp;challenge=3D7f1881670a680874650fc756391=
3d8b5">Klik her for at aktivere din tilmelding</a>
<p>Dit password er: foobar</p>

[... mere HTML ...]
</body>
</html>

------------part_2_4496a76d4450f--

Vi oplever tilsyneladende to lidt forskellige fejl. Nogle gange bliver
linjeskiftet fjernet, men ikke lighedstegnet og nogle gange bliver
lighedstegnet fjernet med ikke linjeskiftet. Gmail gør det sidste, jeg
har ikke selv set systemer der gør det første, men jeg kan se det i
loggen.

Tilsyneladende fortolker alle =3D korrekt og alle gør noget ved
linjeskift, bare ikke alt det nødvendige. Jeg har i hvert fald ikke
set nogen både lave dobbeltlighedstegn og linjeskift efter no_cache.

Hvad kan jeg gøre?

At rette min mime til ikke at overholde rfc2045 virker dels dumt og
dels uoverkommeligt (det er fjerdepartssoftware). Mit bedste bud er at
base64-kode html-udgaven.


0) RFC 2045 afsnit 6.7 punkt 5:

    (5)   (Soft Line Breaks) The Quoted-Printable encoding
          REQUIRES that encoded lines be no more than 76
          characters long.  If longer lines are to be encoded
          with the Quoted-Printable encoding, "soft" line breaks
          must be used.  An equal sign as the last character on a
          encoded line indicates such a non-significant ("soft")
          line break in the encoded text.

   Thus if the "raw" form of the line is a single unencoded line that
   says:

     Now's the time for all folk to come to the aid of their country.

   This can be represented, in the Quoted-Printable encoding, as:

     Now's the time =
     for all folk to come=
      to the aid of their country.

   This provides a mechanism with which long lines are encoded in such
   a way as to be restored by the user agent.  The 76 character limit
   does not count the trailing CRLF, but counts all other characters,
   including any equal signs.

-- 
 Peter Makholm     |        One thing you do is prevent good software from
 peter@xxxxxxxxxxx |      being written. Who can afford to do professional
 http://hacking.dk |                                     work for nothing?
                   |                                         -- Bill Gates


Follow ups