Effective maximum mailto: body lengths
There is a maximum length for the text in the &body section of a mailto: link. According to one of my co-workers, the W3C publish the limit as 256 (I don't have a link to back this up, though).
We're embedding mailto: links in both an e-mail and a webpage and have successfully used more than 256 characters. After a certain point, though, e-mail clients and browsers start flaking out and refusing to open the link.
I would like to know the actual maximum lengths allowed for the following:
Mail clients:
- Outlook (2003, 2007, 2010)
- Eudora (7.1, and/or whatever the latest version is)
- Thunderbird (latest version)
Browsers:
- Firefox (3+)
- IE (6, 7, 8)
- iPhone browser
Any and all numbers you can provide will be gratefully received.
Solution 1:
The standard doesn't define a maximum length, leaving implementation up to browsers and mail clients (See IETF RFC 2368).
Microsoft products do have set limits:
- IE GET limit is 2,083 http://support.microsoft.com/kb/208427
- Outlook express: 456 characters http://support.microsoft.com/kb/q182985/
Other browsers are likely to work up to lengths beyond that of a reasonable email body. The iPhone doesn't have a documented limit, but works with up to 1MB of text.
Modern browsers that support data urls (everything except IE<9) should be fine.
Solution 2:
For browsers with JS consoles, an easy test:
for (var i=2014; i>1600; i--) {var good=1; try {location.href='mailto:?body='+'a'.repeat(i)} catch (e) {good=0;} if (good==1) {console.log(i+13);break;}}
(The 13 is for the length of mailto:?body=
.)
On Firefox 32.0.3 this produces 2008 (body length 1995). On Thunderbird 31.2.0, all 1,995 characters make it into the body of the new e-mail.
Some say it's mainly OS-setting-dependent but on Windows, at least, I couldn't find any registry entry related to mailto
with a number near 2,000.
Solution 3:
I just did an experiment from Wolfram Mathematica to Microsoft Outlook. It works for string lengths of 31888 or less. This is the code I used for this experiment:
Table[ToString@RandomInteger[{0, 9}], 31433] //
Partition[#, UpTo[80]] & //
Map[StringJoin] //
StringRiffle[#, "\n"] & //
"mailto:[email protected]?subject=Testing out mailto!&body="<> # & //
Echo[#, "Total String Length", StringLength] & //
SystemOpen
and prints 31888 as the total string length. If you increase the 31433 by one, it stops working.