Re: '#' in mailto URIs

On Fri, Oct 16, 2009 at 11:55 AM, Michael A. Puls II
<shadow2531@gmail.com> wrote:
> On Thu, 15 Oct 2009 04:47:08 -0400, Julian Reschke <julian.reschke@gmx.de>
> wrote:
>
>> Michael A. Puls II wrote:
>>>
>>> ...
>>> Actually, I think we should just look at how clients handle # in mailto
>>> URIs.
>>>  1. msimn.exe /mailurl:mailto:?body=before#after
>>> 2. opera.exe mailto:?body=before#after
>>> 3. opera.exe page.html (where page has <a
>>> href="mailto:?body=before#after">click me</a>)
>>> 4. sylpheed.exe --compose mailto:?body=before#after
>>> 5. thunderbird31.exe mailto:?body=before#after
>>>  All those mail clients (except for the #2 situation where Opera's
>>> address field's URI parser splits up the URI into its pieces and Opera's
>>> mail code doesn't recompose the URI right (forgets the fragid part) before
>>> parsing) emit "before#after" in the body field of the compose window instead
>>> of just "before". That says that for mailto, # should just be treated
>>> literally as a non-reserved character like a-zA-Z0-9 etc. is.
>>>  (Note that IE's address field can do what Opera does for #2 too before
>>> it passes the URI to the mail client.)
>>>  So, I'd rather just say that for mailto URIs, # is just another
>>> character and any client that doesn't follow that notion should be fixed.
>>> ...
>>
>> Nope. Treating "#after" as fragment in a URI is what RFC 3986 defines. We
>> should not require clients to violate the base specification.
>>
>>> However, if others are not fine with that, in addition to the proposed
>>> text quoted above, it should be said 'why' you should not use # in mailto
>>> URIs. The reason of course would be that whether the # gets treated as part
>>> of a header field value or whether the URI gets chopped off at the first #
>>> depends on the client and situation. It should also be explicitly mentioned
>>> that if you need a # to be part of a header field value, you should use %23
>>> instead.
>>
>> ...must...
>
> So, because of RFC3986's definition of #, all mail clients encountering
> "mailto:?body=before#after" must only put "before" in the body field of the
> compose window?
>
> If so, that, means I have bugs to file for Opera, Thunderbird, Sylpheed,
> probably Outlook if it does like Outlook Express, and any other clients that
> put "before#after" in the body field in that situation.
>
> Now, what does RFC3986 say about the case where you click on a link to
> "mailto:?body=before#after" or enter "mailto:?body=before#after" in the
> address field. Is "#after" part of the URI and "mailto:?body=before#after"
> must be passed to the mail client, or is "#after" not part of the URI and
> "mailto:?body=before" must only be passed to the mail client?
>
> If no RFC or spec says anything about that, what is your personal
> expectation?
>
> Depending on the answer, I have bugs to file for IE and Opera or Firefox and
> Safari.


The main problem that I see is where "#" is being used multiple times
in such a uri, e.g.

mailto:?subject=asdf#ghij&body=before#after

Per RFC3986, the first "#" creates the fragment, so the body is never
regarded as another query parameter. I would think that "#" has to be
escaped in mailto uris. If there weren't multiple query parameters in
a mailto uri, one could simply make the user agent append the fragment
part to the query parameter data to get around the contradiction, but
that is not possible with multiple "#" parameters.

Regards,
Silvia.

Received on Friday, 16 October 2009 02:44:40 UTC