From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Eric Schulte" Subject: Re: [ANN] org-mime -- using orgmode to send html mail? Date: Mon, 12 Apr 2010 11:22:40 -0600 Message-ID: <87bpdoio0j.fsf@gmail.com> References: <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> <71591C25-1B0B-4162-A53C-16DB9436C0F3@gmail.com> <8739z9c3vq.fsf@gmail.com> <8739z44lyl.fsf@gmail.com> 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 1O1NLj-0007wV-5V for emacs-orgmode@gnu.org; Mon, 12 Apr 2010 13:23:03 -0400 Received: from [140.186.70.92] (port=58988 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1O1NLg-0007v1-5Z for emacs-orgmode@gnu.org; Mon, 12 Apr 2010 13:23:02 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.69) (envelope-from ) id 1O1NLd-0007Bb-4R for emacs-orgmode@gnu.org; Mon, 12 Apr 2010 13:23:00 -0400 Received: from mail-pv0-f169.google.com ([74.125.83.169]:44583) by eggs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1O1NLc-0007BE-OT for emacs-orgmode@gnu.org; Mon, 12 Apr 2010 13:22:57 -0400 Received: by pvg11 with SMTP id 11so4116688pvg.0 for ; Mon, 12 Apr 2010 10:22:55 -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: Andrew Hyatt Cc: emacs-orgmode@gnu.org Hi Andrew, Thanks for the report. My guess is that somehow the call to org-export-as-html is erroring out because some org-mode variables aren't being set, maybe you don't have orgstruct-mode as a minor-mode in your email composition -- not that it's required, but that could be the difference between our setups which is causing you to see the bug and not me. I've changed the `org-mime-org-export' so it more closely mimics the `org-run-like-in-org-mode' wrapping function, which should hopefully fix this problem. Please let me know either way, and if the problem persists we can try to figure out exactly which variable isn't being initialized. Thanks for the report! -- Eric Andrew Hyatt writes: > This looks great. However, I get an error on my test mail: > > This is should be HTML mode. > > ~foo~ > =3Dbar=3D > _baz_ > > | Table | A | > | 1 | 2 | > > On calling org-mime-htmlize > > Debugger entered--Lisp error: (wrong-type-argument stringp nil) > string-match(nil #("This is should be HTML mode." 0 28 (fontified t))) > byte-code("\304\211.=19\305\n=0B\"\203A > org-html-handle-time-stamps(#("This is should be HTML mode." 0 28 > (fontified t))) > byte-code("\203. > org-export-as-html(nil nil nil string t) > (let nil (org-export-as-html nil nil nil (quote string) t)) > eval((let nil (org-export-as-html nil nil nil (quote string) t))) > (progn (insert org-mime-default-header) (insert body) (write-file > tmp-file) (eval (list ... org-local-vars ...))) > (unwind-protect (progn (insert org-mime-default-header) (insert body) > (write-file tmp-file) (eval ...)) (and (buffer-name temp-buffer) > (kill-buffer temp-buffer))) > (save-current-buffer (set-buffer temp-buffer) (unwind-protect (progn ... > ... ... ...) (and ... ...))) > (with-current-buffer temp-buffer (unwind-protect (progn ... ... ... ...) > (and ... ...))) > (let ((temp-buffer ...)) (with-current-buffer temp-buffer (unwind-prote= ct > ... ...))) > (with-temp-buffer (insert org-mime-default-header) (insert body) > (write-file tmp-file) (eval (list ... org-local-vars ...))) > (save-excursion (with-temp-buffer (insert org-mime-default-header) (ins= ert > body) (write-file tmp-file) (eval ...))) > org-mime-org-export("html" #("\nThis is should be HTML > mode.\n\n~foo~\n=3Dbar=3D\n_baz_\n\n| Table | A |\n| 1 | 2 | \n\n-- \= n" 0 1 > (fontified t) 1 42 (fontified t) 42 43 (fontified t) 43 44 (article-type > emphasis fontified t) 44 47 (fontified t) 47 48 (article-type emphasis > fontified t) 48 50 (fontified t) 50 63 (fontified t face (gnus-cite-1 > message-cited-text)) 63 64 (fontified t) 64 78 (fontified t face > (gnus-cite-1 message-cited-text)) 78 79 (fontified t rear-nonsticky t) 79= 80 > (fontified t) 80 84 (fontified t)) "/tmp/mail2522NRw") > (org-mime-replace-images (org-mime-org-export "html" raw-body tmp-file) > tmp-file) > (let* ((region-p ...) (html-start ...) (html-end ...) (raw-body ...) > (tmp-file ...) (body ...) (org-export-skip-text-before-1st-heading nil) > (org-export-htmlize-output-type ...) (org-export-preserve-breaks > org-mime-preserve-breaks) (html-and-images ...) (html-images ...) (html > ...)) (delete-region html-start html-end) (save-excursion (goto-char > html-start) (insert ... ...))) > org-mime-htmlize(nil) > > > On Fri, Apr 9, 2010 at 12:41 PM, Eric Schulte wro= te: > >> Announcing the addition of org-mime to the contrib directory of Org-mode >> >> this allows sending HTML email using org-mode including... >> >> >> - *tables* colname onecolname two 11 24 39 >> - *inline images* including latex equations [image: $f(n) =3D n + >> \frac{1}{n} \int_{0}^{n}{d_x f(x) + f(n - x)}$] and the results of >> ditaa blocks, etc=E2=80=A6 >> >> [image: blue.png] >> >> - *blockquotes* >> >> HTML e-mail is the use of a subset of HTML (often ill-defined) to >> provide formatting and semantic markup capabilities in e-mail that ar= e not >> available with plain text. =E2=80=93 wikipedia >> >> - fontified *code blocks* (shown below) >> - and *HTML character* conversion, like =E2=88=80 character c s.t. = =E2=88=83 h =E2=88=88 *HTML >> characters* and c =E2=89=A1 h, org-html-export of c results in h >> >> >> >> The original org-mode formatted plain text is included as a text/plain >> mime alternative to the generated html. >> >> Below find the org-mime export of the org-mime worg page which will be >> available at http://orgmode.org/worg/org-contrib/org-mime.php. >> >> Best -- Eric >> >> General >> >> org-mime can be used to send HTML email using Org-mode HTML export. >> >> This approximates a WYSiWYG HTML mail editor from within Emacs, and can = be >> useful for sending tables, notified source code, and inline images in em= ail. >> >> How to use it >> Setup >> >> org-mime exposes two functions >> `org-mime-htmlize' can be called from within a mail composition buffer = to >> export either the entire buffer or just the active region to html, and e= mbed >> the results into the buffer as a text/html mime section. >> >> org-mime-htmlize is an interactive Lisp function in `org-mime.el'. >> >> (org-mime-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. >> >> `org-mime-org-buffer-htmlize' can be called from within an Org-mode >> buffer to export either the whole buffer or the narrowed subtree or acti= ve >> region to HTML, and open a new email buffer including the resulting HTML >> content as an embedded mime section. >> >> org-mime-org-buffer-htmlize is an interactive Lisp function in >> `org-mime.el'. >> >> (org-mime-org-buffer-htmlize) >> >> Export the current org-mode buffer to HTML using >> `org-export-as-html' and package the results into an email >> handling with appropriate MIME encoding. >> >> The following key bindings are suggested, which bind the C-c M-o key >> sequence to the appropriate org-mime function in both email and Org-mode >> buffers. >> >> (add-hook 'message-mode-hook >> (lambda () >> (local-set-key "\C-c\M-o" 'org-mime-htmlize))) >> (add-hook 'org-mode-hook >> (lambda () >> (local-set-key "\C-c\M-o" 'org-mime-org-buffer-htmlize))) >> >> CSS style customization >> >> Email clients will often strip all global CSS from email messages. In the >> case of web-based email readers this is essential in order to protect the >> CSS of the containing web site. To ensure that your CSS styles are rende= red >> correctly they must be included in the actual body of the elements to wh= ich >> they apply. >> >> The `org-mime-html-hook' allows for the insertion of these important CSS >> elements into the resulting HTML before mime encoding. The following are >> some possible uses of this hook. >> >> - for those who use color themes with Dark backgrounds it is useful to >> set a dark background for all exported code blocks and example region= s. This >> can be accomplished with the following >> >> (add-hook 'org-mime-html-hook >> (lambda () >> (org-mime-change-element-style >> "pre" (format "color: %s; background-color: %s; padding:= 0.5em;" >> "#E6E1DC" "#232323")))) >> >> - the following can be used to nicely offset block quotes in email >> bodies >> >> (add-hook 'org-mime-html-hook >> (lambda () >> (org-mime-change-element-style >> "blockquote" "border-left: 2px solid gray; padding-left:= 4px;"))) >> >> >> For other customization options see the org-mime customization group. >> Credits >> >> org-mime was developed by Eric Schulte with much-appreciated help and >> discussion from everyone on the "using orgmode to send html mail" >> thread especially David Maus. >> >> "Eric Schulte" writes: >> >> > Carsten Dominik writes: >> > >> >> On Apr 5, 2010, at 7:39 AM, Eric Schulte wrote: >> >> >> >>> Hi, >> >>> >> >>> It is now possible to send HTML mail directly form an org-mode buffe= r. >> >>> >> >>> 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 >> >> >> >> CONTIRB? yes, after the release..... >> >> >> > >> > Sounds great, I'm move this into contrib then. -- Eric >> > >> >> >> >> - Carsten >> >> >> >>> >> >>> "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 t= he >> >>>>> 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 clien= t. >> >>>> >> >>>> 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 >> >> >> >> - Carsten >> >> _______________________________________________ >> 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 >> >>