On Thu, Nov 24, 2011 at 01:44:03PM +0000, Chris Green wrote:
> I have a pretty standard Firefox 3.6.24 running in xubuntu.
> 
> I have mutt set as my default E-Mail application in Preferred
> Applications and in Firefox's preferences.  However it's not working
> properly, when I click on a mailto: link an empty E-Mail gets sent.
> 
> It looks to me as if this is something to do with mutt needing a
> terminal window to run in but all the menus seem to know about mutt
> already as if they should know this.
> 
> Can anyone suggest what might be wrong?

attached a simple script that is use. set it executable and call this
from firefox, not mutt directly
#!/usr/bin/env python

from __future__ import with_statement
import os
import sys
import cgi
import urlparse
import subprocess
import tempfile
import contextlib

tmpfile = None


@contextlib.contextmanager
def fdopen(fd, mode='r', bufsize=-1):
    yield os.fdopen(fd, mode, bufsize)


def simpleParam(hname):
    def _(hvalue):
        return hname, hvalue
    return _


def bodyParam(hvalue):
    global tmpfile

    fd, filename = tempfile.mkstemp()
    tmpfile = filename
    with fdopen(fd, 'w') as fp:
        fp.write(hvalue)
    return '-i', filename


ARGS = {
    'subject': simpleParam('-s'),
    'bcc': simpleParam('-b'),
    'cc': simpleParam('-c'),
    'body': bodyParam,
}


def filterParams(name):
    return name in ARGS


def parsequery(query):
    args = []
    parts = urlparse.urlparse(query, scheme='mailto')
    to = parts[2]
    if to.find('?') > 0:
        to, params = to.split('?', 1)
        params = cgi.parse_qs(params)
        for name in filter(filterParams, params):
            hvalue = ','.join(params[name])
            args += ARGS[name](hvalue)

    args += ['--', to]
    return args


if len(sys.argv) == 1:
    print >> sys.stderr, 'Usage: %s address' % sys.argv[0]
    sys.exit(1)

args = ['xterm', '-e', 'mutt'] + parsequery(sys.argv[1])
retcode = subprocess.call(args)
if tmpfile and os.path.exists(tmpfile):
    os.unlink(tmpfile)

sys.exit(retcode)

Reply via email to