From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Eric Schulte" Subject: Re: [CONTRIB?] using orgmode to send html mail? Date: Mon, 05 Apr 2010 09:30:53 -0600 Message-ID: <87wrwlapam.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> <87tys5r3q6.fsf@gmail.com> <87ocid7cuj.wl%dmaus@ictsoc.de> <874ok5qxp9.fsf@gmail.com> <87vdckksnj.wl%dmaus@ictsoc.de> <874ok33zje.fsf@gmail.com> <87zl1vf4ru.wl%dmaus@ictsoc.de> <874ok311t9.fsf@gmail.com> <87y6h85pid.fsf_-_@gmail.com> <87fx3g1cld.fsf@stats.ox.ac.uk> <87eij05had.fsf@gmail.com> <878w98w4sz.fsf@stats.ox.ac.uk> <87sk7f8d6x.fsf@gmail.com> <87aatizcef.fsf@gmail.com> <87bpdyf1hy.fsf@stats.ox.ac.uk> <87fx3aq7bx.fsf@stats.ox.ac.uk> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Return-path: Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1NyoHc-0003bt-3T for emacs-orgmode@gnu.org; Mon, 05 Apr 2010 11:32:12 -0400 Received: from [140.186.70.92] (port=45862 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1NyoHa-0003be-Jy for emacs-orgmode@gnu.org; Mon, 05 Apr 2010 11:32:11 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.69) (envelope-from ) id 1NyoHZ-0002TD-Cx for emacs-orgmode@gnu.org; Mon, 05 Apr 2010 11:32:10 -0400 Received: from mail-bw0-f223.google.com ([209.85.218.223]:46320) by eggs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1NyoHZ-0002Qo-3o for emacs-orgmode@gnu.org; Mon, 05 Apr 2010 11:32:09 -0400 Received: by mail-bw0-f223.google.com with SMTP id 23so1061876bwz.26 for ; Mon, 05 Apr 2010 08:32:08 -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 It's certainly true that email clients can be particular about how they display HTML. One possible fix for issues like these is to use the `org-mime-html-hook' hook and the `org-mime-change-element-style' function for forcing inline css into the misbehaving elements. Best -- Eric Dan Davison writes: > Hmm, perhaps I should have been a bit more careful with protecting the > various special email constructs in my message. Second try: > > Dan Davison writes: > >> Hi Eric, >> >> Thanks a lot for this, I think I'll use it quite a bit. >> >> This may be specific to my setup, but in case this is useful to others, >> as a gnus user I had to do >> >> (setq mail-user-agent 'message-user-agent) >> >> Without altering this --- i.e. with mail-user-agent set to the default >> value of 'sendmail-user-agent --- org-mime-org-buffer-htmlize puts the >> outgoing message in mail-mode (a.o.t. message-mode). For me, that meant >> that the resulting outgoing email was rendered verbatim in gmail, >> whereas from message-mode it is fine. The exact contents of outgoing >> emails are below. >> >> I noticed one small bug, but perhaps it's an org-mode bug? When I use >> org-mime-org-buffer-htmlize on this >> >> ,---- >> | *** Tasks >> | - [ ] Check Popen.returncode of python system calls >> `---- >> >> I get the following, which renders as a checkbox with an X, whereas my >> checkbox was empty. > > (I've replaced the <> tag delimiters with {}) > > {#multipart type=alternative}{#part type=text/plain} > > *** Tasks > - [ ] Check Popen.returncode of python system calls > {#part type=text/html}{div id="outline-container-1" class="outline-3"} > {h3 id="sec-1"}Tasks {/h3} > {div class="outline-text-3" id="text-1"} > > {ul} > {li} > {b}[{span style="visibility:hidden;"}X{/span}]{/b} Check Popen.returncode of python system calls > {/li} > {/ul} > {/div} > {/div} > {#/multipart} > >> Comparison of outgoing mail from mail-mode and message-mode: >> >> With an org buffer containing (as active region or not) >> >> ,---- >> | * heading >> | text >> `---- >> >> Here is what the outgoing email (i.e. the stdin received by >> sendmail-program) looks like from mail-mode (mail formed by >> org-mime-org-buffer-htmlize) >> > > To: dandavison0@gmail.com > Subject: test > > {#multipart type=alternative}{#part type=text/plain} > * heading > text{#part type=text/html}{div id="outline-container-1" class="outline-2"} > {h2 id="sec-1"}heading {/h2} > {div class="outline-text-2" id="text-1"} > > {p}text > {/p}{/div} > {/div} > {#/multipart} > >> And here is what the outgoing email looks like from message-mode (exact >> same content, but pasted from mail-mode into message-mode). >> > >> --8<---------------cut here---------------start------------->8--- >> From: Dan Davison >> To: dandavison0@gmail.com >> Subject: test16 >> Date: Mon, 05 Apr 2010 09:26:23 -0400 >> Message-ID: <87y6h2f2tc.fsf@stats.ox.ac.uk> >> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/23.1 (gnu/linux) >> MIME-Version: 1.0 >> Content-Type: multipart/alternative; boundary="=-=-=" >> >> --=-=-= >> >> * heading >> text >> >> --=-=-= >> Content-Type: text/html >> >>
>>

heading

>>
>> >>

text >>

>>
>> >> --=-=-=-- >> --8<---------------cut here---------------end--------------->8--- >> >> Dan >> >> "Eric Schulte" writes: >> >>> Hi, >>> >>> It is now possible to send HTML mail directly form an org-mode buffer. >>> >>> Calling `org-mime-org-buffer-htmlize' (could probably use a better name) >>> from inside of an org-mode buffer will use `org-export-as-html' to >>> generate HTML of the buffer (respecting regions and subtree narrowing), >>> and will then package the resulting HTML with all linked images into a >>> message buffer. >>> >>> As usual thanks to Carsten's thoughtfully organized functions and >>> control variables this was surprisingly easy to implement. >>> >>> Cheers -- Eric >>> >>> The code is still up at http://github.com/eschulte/org-mime >>> >>> "Eric Schulte" writes: >>> >>>> Dan Davison writes: >>>> >>>> [...] >>>> >>>>> >>>>> As I understand it the code you've written is designed to be called in a >>>>> message-mode buffer with orgstruct-mode in force. Would it make sense to >>>>> also include in your package a complementary function, that one calls in >>>>> an org-mode buffer? I envisage this generating the HTML, forming the >>>>> multipart email contents, and then saving it to the kill ring, so that >>>>> it can be pasted into an email. >>>>> >>>>> This function would have access to the directory-name and so should be >>>>> able to resolve relative paths. Also, there might be some other >>>>> advantages -- for example when exporting just a region or subtree, >>>>> buffer-wide properties such as #+TITLE and #+AUTHOR are picked up by the >>>>> org exporter and packaged into the HTML. >>>>> >>>>> In other words, can I use your machinery to package up the HTML >>>>> generated by Org's C-e dispatcher into an appropriately-constructed >>>>> email? >>>>> >>>> >>>> Hi Dan, >>>> >>>> That sounds like a good idea, I've added it to a fledgling task list >>>> packaged in the README at [1]. I'd say there are two options. >>>> >>>> 1) which you mentioned saving the entire exported content to the >>>> kill-ring. One problem here is that everything is still text and >>>> pastable only *before* the mime export process, which means that >>>> linked images wouldn't resolve after pasting into the email client. >>>> >>>> 2) having the function generate a new mail buffer containing the >>>> exported content. This buffer would need to have it's >>>> `buffer-file-name' set, for images to resolve during export. I'm not >>>> sure how this should best work. >>>> >>>> Thanks -- Eric >>>> >>>> Footnotes: >>>> [1] http://github.com/eschulte/org-mime >>> >>> >>> _______________________________________________ >>> 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