Generate emails with mailto URLs and Python

Scenario: You want to send several emails where only small things change. This sounds like a job for a mail merge program. But if you use mailto: links and Python, you get a nice shell-based solution. This combination also has the advantage of opening each generated email in your email client so that you can take one last look before sending it.

mailto: URL syntax

"mailto:" recipients ( "?" key "=" value ("&" key "=" value)* )?
Open mailto URLs with Python

    from urllib import quote
    import webbrowser

    def mailto(recipients, subject, body):
        "recipients: string with comma-separated emails (no spaces!)"
        webbrowser.open("mailto:%s?subject=%s&body=%s" %
            (recipients, quote(subject), quote(body)))

    body_template = """Hello %(name)s!

    How are you?"""

    def gen(email, name):
        mailto(email, "Hi!", body_template % locals())

    gen("joe@example.com", "Joe")
    gen("jane@example.com,jill@example.com", "Jane and Jill")
Related: Flattr