From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Eric Schulte" Subject: Re: using orgmode to send html mail? Date: Wed, 24 Mar 2010 12:01:55 -0600 Message-ID: <87tys5r3q6.fsf@gmail.com> References: <878w9krtyn.wl%dmaus@ictsoc.de> <871vfa24qo.fsf@gmail.com> <87pr2uww2d.fsf@columbia.edu> <87tys5zrwm.fsf@gmail.com> <87sk7pzk02.fsf@stats.ox.ac.uk> Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Return-path: Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1NuV1V-0000oC-Kh for emacs-orgmode@gnu.org; Wed, 24 Mar 2010 14:09:45 -0400 Received: from [140.186.70.92] (port=52758 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1NuV1U-0000nq-5g for emacs-orgmode@gnu.org; Wed, 24 Mar 2010 14:09:45 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.69) (envelope-from ) id 1NuV1R-0006I2-Js for emacs-orgmode@gnu.org; Wed, 24 Mar 2010 14:09:44 -0400 Received: from mail-px0-f195.google.com ([209.85.216.195]:43347) by eggs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1NuV1R-0006Hs-7Q for emacs-orgmode@gnu.org; Wed, 24 Mar 2010 14:09:41 -0400 Received: by pxi33 with SMTP id 33so1953529pxi.26 for ; Wed, 24 Mar 2010 11:09:40 -0700 (PDT) List-Id: "General discussions about Org-mode." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org Errors-To: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org To: Dan Davison Cc: emacs-orgmode@gnu.org Thanks Dan, I'm happy to hear I'm not the only person who's enjoying playing with this :). Aside from changing the mime-delimeters for VM and wanderlust, it seems to me that the only remaining step between the current functionality and a seamless use of org-mode for email composition, is the resolution of images as email attachments. That would allow emails with embedded latex (which I personally would find very compelling), as well as embedded ditaa diagrams and images. If anyone knows more about mime, I'd be interested to hear suggestions, but I may try a first pass using `replace-regexp' to replace all links with inline mime image attachments. I've just made a couple of small changes, and pushed this file up to a git repo at http://github.com/eschulte/org-html-mail, or for raw elisp http://github.com/eschulte/org-html-mail/raw/master/org-mml-htmlize.el Cheers -- Eric Dan Davison writes: > "Eric Schulte" writes: > >> Xiao-Yong Jin writes: >> >>> On Tue, 23 Mar 2010 13:54:39 -0600, Eric Schulte wrote: >>> >>>> Nice to see this topic has come back to life. >>>> I've been playing with my old org-html-mail.el file, and come up with a >>>> much simpler solution, which takes advantage of the mml message mode >>>> functionality with is used in gnus (and I would imagine in some other >>>> Emacs mail clients, but I can't be sure). >>> >>>> Just call this function and either the active region of your message >>>> buffer or the entire body (if no region is active) will be exported to >>>> html using org-mode, and will be wrapped in the appropriate mml wrapper >>>> to be sent as the appropriate mime type. >>> >> >> I've cleaned up the function somewhat, I'll include it immediately >> below by inserting it in a org-mode src_block and then exporting it to >> html, so those with html mail readers should see a nicely fontified >> version of the source code. > > This is really nice. I already sent my first HTML-formatted tables to > colleagues with it yesterday. And yes, the email comes up with nicely > formatted elisp in my web browser after hitting 'K H' in gnus. > > Dan > >> >> (defun org-mml-htmlize (arg) >> "Export a portion of an email body composed using `mml-mode' to >> html using `org-mode'. If called with an active region only >> export that region, otherwise export the entire body." >> (interactive "P") >> (let* ((region-p (org-region-active-p)) >> (html-start (or (and region-p (region-beginning)) >> (save-excursion >> (goto-char (point-min)) >> (search-forward mail-header-separator) >> (point)))) >> (html-end (or (and region-p (region-end)) >> ;; TODO: should catch signature... >> (point-max))) >> (body (buffer-substring html-start html-end)) >> (tmp-file (make-temp-name (expand-file-name "mail" "/tmp/"))) >> ;; because we probably don't want to skip part of our mail >> (org-export-skip-text-before-1st-heading nil) >> ;; because we probably don't want to export a huge style file >> (org-export-htmlize-output-type 'inline-css) >> ;; makes the replies with ">"s look nicer >> (org-export-preserve-breaks t) >> (html (if arg >> (format "
\n%s
\n" body) >> (save-excursion >> (with-temp-buffer >> (insert body) >> (write-file tmp-file) >> ;; convert to html -- mimicing `org-run-like-in-org= -mode' >> (eval (list 'let org-local-vars >> (list 'org-export-as-html nil nil nil '= 'string t)))))))) >> (delete-region html-start html-end) >> (save-excursion >> (goto-char html-start) >> (insert >> (format >> "\n<#multipart type=3Dalternative>\n<#part type=3Dtext/html>%s<#= /multipart>\n" >> html))))) >> >> >>> >>> Thumbs up for this one. It should be included in >>> org-contrib, probably after taken care of other mail client >>> in emacs? >>> >> >> I have looked somewhat at both VM and Wanderlust, but they appear to use >> their own mime encoding schemes other than mml, so this won't work as-is >> in those mail clients. That said, assuming they also use simple mime >> encoding strings it should be hard to replace the mml specific mime >> delimiters presented as strings in the above functions with string >> delimiters appropriate for the other mail agents. >> >> also, I have to say I feel bad about publishing code which promotes the >> use of HTML mail. Generally I feel that everyone would be better off if >> they just used fixed width text email clients. As a concession to that >> intuition, if this function is called with a prefix argument, it will >> wrap the region (or entire email) as html in
 tags ensuring
>> that it will be rendered in a fixed-with font no-matter the receivers
>> email client, so the following table should actually look like a
>> table...
>>
>> | this table   |   | n | fibb(n) |
>> |--------------+---+---+---------|
>> | is           |   | 0 |       0 |
>> | inside       |   | 1 |       1 |
>> | of a pre box |   | 2 |       1 |
>> |              |   | 3 |       2 |
>>
>>
>> Best -- Eric
>>
>>>
>>>> So for example this
>>>>> 1 |      2 |     3 |
>>>>> --------------+--------+-------|
>>>>> first column | second | third |
>>>
>>>> will be exported as this
>>>> =E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=
=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81
>>>>        1          2       3=20=20=20
>>>> =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=
=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80
>>>>  first column   second  third=20
>>>> =E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=
=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81
>>>
>>> I use emacs-w3m in gnus, and the table looks great.
>> _______________________________________________
>> Emacs-orgmode mailing list
>> Please use `Reply All' to send replies to the list.
>> Emacs-orgmode@gnu.org
>> http://lists.gnu.org/mailman/listinfo/emacs-orgmode