Help with invoking standard mail app in windows

Kev Dwyer kevin.p.dwyer at gmail.com
Sat Dec 19 07:19:23 EST 2009


On Sat, 19 Dec 2009 06:36:32 +1100, Astan Chee wrote:

> Kev Dwyer wrote:
>> Hello Astan,
>>
>> Your code executes without error for me on Win98 (!) with Python 2.5 or
>> XP with Python 2.6.
>>
>> It would help people to help you if you could provide the *exact*
>> console output from when you try to execute the code, *including* the
>> traceback. That way we can work out which line of code is hitting the
>> exception.
>>
>> Cheers,
>>
>> Kev
>>
>>
> Hi,
> My mistake. The length of body is over 1400 characters. Here is my
> updated code and result:
> 
> import urllib, webbrowser, win32api
> def mailto_url(to=None,subject=None,body=None,cc=None):
>     """
>     encodes the content as a mailto link as described on
>     http://www.faqs.org/rfcs/rfc2368.html """ url = "mailto: " +
>     urllib.quote(to.strip(),"@,") sep = "?"
>     if cc:
>         url+= sep + "cc=" + urllib.quote(cc,"@,") sep = "&"
>     if subject:
>         url+= sep + "subject=" + urllib.quote(subject,"") sep = "&"
>     if body:
>         # Also note that line breaks in the body of a message MUST be #
>         encoded with "%0D%0A". (RFC 2368)
>         body="\r\n".join(body.splitlines())
>         url+= sep + "body=" + urllib.quote(body,"") sep = "&"
>     return url
> 
> txtTo = "test at com.com"
> txtSubject = "Test Subject"
> body = "Test body"
> for t in range(278):
>     body+="test "
> txtCC = "cc_test at com.com"
> 
> url = mailto_url(txtTo,txtSubject,body,txtCC)
> #win32api.ShellExecute(0,'open',url,None,None,0)
> webbrowser.open(url,new=1)
> # os.startfile(url)
> 
> result:
> 
> Traceback (most recent call last):
>   File "C:/stanc_home/python/mail_test.py", line 32, in <module>
>     webbrowser.open(url,new=1)
>   File "C:\Python25\lib\webbrowser.py", line 61, in open
>     if browser.open(url, new, autoraise):
>   File "C:\Python25\lib\webbrowser.py", line 518, in open
>     os.startfile(url)
> WindowsError: [Error 5] Access is denied: 'mailto:
> test at com.com?cc=cc_test at com.com&subject=Test%20Subject&body=Test%
<snip>
> 
> Is there some sort of limitation here? If I shorten the string, it works
> fine. You're right, but I'm wondering if there is a way to go around
> this limitation.
> Thanks again
> Cheers
> Astan


Hello Astan,

After a bit of experimentation I find I get the same problem on XP using 
2.6 for len(body) > 1973, using the os.startfile method.  Some light 
googling suggests this is probably a limit within Outlook itself.

If you just want a way to start Outlook programmatically you may be able 
to work around this by automating Outlook - try googling python outlook 
automation.

If you want to start a default mail client on any machine using the 
mailto protocol then you'll have to limit the size of your message 
bodies.  You may find that other mail clients have limits too - I doubt 
that any client (or browser) will accept urls of unlimited size.

Cheers,

Kev




More information about the Python-list mailing list