From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andrew Hyatt Subject: Re: [ANN] org-mime -- using orgmode to send html mail? Date: Mon, 12 Apr 2010 21:31:13 -0400 Message-ID: References: <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> <87bpdoio0j.fsf@gmail.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="===============1215835237==" Return-path: Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1O1UyG-0000s0-BC for emacs-orgmode@gnu.org; Mon, 12 Apr 2010 21:31:20 -0400 Received: from [140.186.70.92] (port=36174 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1O1UyD-0000r6-GN for emacs-orgmode@gnu.org; Mon, 12 Apr 2010 21:31:20 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.69) (envelope-from ) id 1O1UyA-0005g0-Ur for emacs-orgmode@gnu.org; Mon, 12 Apr 2010 21:31:17 -0400 Received: from ey-out-1920.google.com ([74.125.78.148]:23435) by eggs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1O1UyA-0005fs-Dh for emacs-orgmode@gnu.org; Mon, 12 Apr 2010 21:31:14 -0400 Received: by ey-out-1920.google.com with SMTP id 4so461744eyg.34 for ; Mon, 12 Apr 2010 18:31:13 -0700 (PDT) In-Reply-To: <87bpdoio0j.fsf@gmail.com> 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: Eric Schulte Cc: emacs-orgmode@gnu.org --===============1215835237== Content-Type: multipart/alternative; boundary=001485ea7dca902f250484143710 --001485ea7dca902f250484143710 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Thanks for the response. I upgraded, now I get a Debugger entered--Lisp error: (wrong-type-argument arrayp t) substring(t 33) (progn (insert org-mime-default-header) (insert body) (write-file tmp-file= ) (org-load-modules-maybe) (unless org-local-vars (setq org-local-vars ...)) (substring (eval ...) (if ... ... 0))) (unwind-protect (progn (insert org-mime-default-header) (insert body) (write-file tmp-file) (org-load-modules-maybe) (unless org-local-vars ...) (substring ... ...)) (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-protect ... ...))) (with-temp-buffer (insert org-mime-default-header) (insert body) (write-file tmp-file) (org-load-modules-maybe) (unless org-local-vars (setq org-local-vars ...)) (substring (eval ...) (if ... ... 0))) (save-excursion (with-temp-buffer (insert org-mime-default-header) (insert body) (write-file tmp-file) (org-load-modules-maybe) (unless org-local-vars ...) (substring ... ...))) org-mime-org-export("org" #("\nHTML test\n\n~foo~\n=3Dbar=3D\n_baz_\n\n| 1= | 2 |\n| a | b |\n" 0 1 (fontified t) 1 11 (fontified t) 11 12 (fontified t) 12 18 (fontified t) 18 24 (fontified t) 24 30 (fontified t) 30 31 (fontified t= ) 31 40 (fontified t face (gnus-cite-1 message-cited-text)) 40 41 (fontified t) 41 50 (fontified t face (gnus-cite-1 message-cited-text)) 50 51 (fontified t)) "/tmp/mail2522ZvL") (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) call-interactively(org-mime-htmlize record nil) I tried this with orgstruct-mode off and on, but it was the same error either way. Earlier, before I got the latest version, I tried with orgstruct-mode on, and it successfull htmlized my mail. But, when I receive= d it, the mail only contained the word "nil". On Mon, Apr 12, 2010 at 1:22 PM, Eric Schulte wrote= : > 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. \305\n \"\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-protect > > ... ...))) > > (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) > (insert > > 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-typ= e > > 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-fil= e) > > 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 >wrote: > > > >> Announcing the addition of org-mime to the contrib directory of Org-mo= de > >> > >> 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 > are 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 ca= n > be > >> useful for sending tables, notified source code, and inline images in > email. > >> > >> How to use it > >> Setup > >> > >> org-mime exposes two functions > >> `org-mime-htmlize' can be called from within a mail composition buffe= r > to > >> export either the entire buffer or just the active region to html, and > embed > >> 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 > active > >> region to HTML, and open a new email buffer including the resulting HT= ML > >> 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-mo= de > >> 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 > rendered > >> correctly they must be included in the actual body of the elements to > which > >> they apply. > >> > >> The `org-mime-html-hook' allows for the insertion of these important C= SS > >> elements into the resulting HTML before mime encoding. The following a= re > >> 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 > regions. 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; paddin= g: > 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-lef= t: > 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< > http://thread.gmane.org/gmane.emacs.orgmode/23153>" > >> 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 > 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 in= to > 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 > the > >> >>>>> multipart email contents, and then saving it to the kill ring, s= o > >> >>>>> 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 subtre= e, > >> >>>>> buffer-wide properties such as #+TITLE and #+AUTHOR are picked u= p > >> >>>>> 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 a= nd > >> >>>> pastable only *before* the mime export process, which means tha= t > >> >>>> 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 > >> >> > >> >> - 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 > >> > >> > --001485ea7dca902f250484143710 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Thanks for the response. =C2=A0I upgraded, now I get a

<= div>Debugger entered--Lisp err= or: (wrong-type-argument arrayp t)
=C2=A0substring(t 33)
=C2=A0(progn (insert org-mime-default-header) (ins= ert body) (write-file tmp-file) (org-load-modules-maybe) (unless org-local-= vars (setq org-local-vars ...)) (substring (eval ...) (if ... ... 0)))
= =C2=A0(unwind-protect (progn (insert org-mime-default-header) (insert body)= (write-file tmp-file) (org-load-modules-maybe) (unless org-local-vars ...)= (substring ... ...)) (and (buffer-name temp-buffer) (kill-buffer temp-buff= er)))
=C2=A0(save-current-buffer (set-buffer temp-buffer) (unwind-protect (progn = ... ... ... ... ... ...) (and ... ...)))
=C2=A0(with-current-buffer temp= -buffer (unwind-protect (progn ... ... ... ... ... ...) (and ... ...)))
= =C2=A0(let ((temp-buffer ...)) (with-current-buffer temp-buffer (unwind-pro= tect ... ...)))
=C2=A0(with-temp-buffer (insert org-mime-default-header) (insert body) (wri= te-file tmp-file) (org-load-modules-maybe) (unless org-local-vars (setq org= -local-vars ...)) (substring (eval ...) (if ... ... 0)))
=C2=A0(save-exc= ursion (with-temp-buffer (insert org-mime-default-header) (insert body) (wr= ite-file tmp-file) (org-load-modules-maybe) (unless org-local-vars ...) (su= bstring ... ...)))
=C2=A0org-mime-org-export("org" #("\nHTML test\n\n~foo~\n=3D= bar=3D\n_baz_\n\n| 1 | 2 |\n| a | b |\n" 0 1 (fontified t) 1 11 (fonti= fied t) 11 12 (fontified t) 12 18 (fontified t) 18 24 (fontified t) 24 30 (= fontified t) 30 31 (fontified t) 31 40 (fontified t face (gnus-cite-1 messa= ge-cited-text)) 40 41 (fontified t) 41 50 (fontified t face (gnus-cite-1 me= ssage-cited-text)) 50 51 (fontified t)) "/tmp/mail2522ZvL")
=C2=A0(let* ((region-p ...) (html-start ...) (html-end ...) (raw-body ...) = (tmp-file ...) (body ...) (org-export-skip-text-before-1st-heading nil) (or= g-export-htmlize-output-type ...) (org-export-preserve-breaks org-mime-pres= erve-breaks) (html-and-images ...) (html-images ...) (html ...)) (delete-re= gion html-start html-end) (save-excursion (goto-char html-start) (insert ..= . ...)))
=C2=A0org-mime-htmlize(nil)
=C2=A0call-interactively(org-mime-htmlize re= cord nil)

I tried this wi= th orgstruct-mode off and on, but it was the same error either way. =C2=A0E= arlier, before I got the latest version, I tried with orgstruct-mode on, an= d it successfull htmlized my mail. But, when I received it, the mail only c= ontained the word "nil".

On Mon, Apr 12, 2010 at 1:22 PM, Eric Sc= hulte <schul= te.eric@gmail.com> wrote:
Hi Andrew,

Thanks for the report. =C2=A0My 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-mo= de 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 th= e
`org-run-like-in-org-mode' wrapping function, which should hopefully fi= x
this problem. =C2=A0Please 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 <ahyatt@gmail.com&g= t; writes:

> This looks great. =C2=A0However, I get an error on my test mail:
>
> This is should be HTML mode.
>
> ~foo~
> =3Dbar=3D
> _baz_
>
> | Table | A |
> | 1 =C2=A0 =C2=A0 | 2 |
>
> On calling org-mime-htmlize
>
> Debugger entered--Lisp error: (wrong-type-argument stringp nil)
> =C2=A0 string-match(nil #("This is should be HTML mode." 0 2= 8 (fontified t)))
> =C2=A0 byte-code("\304\211. \305\n \"\203A
> =C2=A0 org-html-handle-time-stamps(#("This is should be HTML mode= ." 0 28
> (fontified t)))
> =C2=A0 byte-code(" \203.
> =C2=A0 org-export-as-html(nil nil nil string t)
> =C2=A0 (let nil (org-export-as-html nil nil nil (quote string) t))
> =C2=A0 eval((let nil (org-export-as-html nil nil nil (quote string) t)= ))
> =C2=A0 (progn (insert org-mime-default-header) (insert body) (write-fi= le
> tmp-file) (eval (list ... org-local-vars ...)))
> =C2=A0 (unwind-protect (progn (insert org-mime-default-header) (insert= body)
> (write-file tmp-file) (eval ...)) (and (buffer-name temp-buffer)
> (kill-buffer temp-buffer)))
> =C2=A0 (save-current-buffer (set-buffer temp-buffer) (unwind-protect (= progn ...
> ... ... ...) (and ... ...)))
> =C2=A0 (with-current-buffer temp-buffer (unwind-protect (progn ... ...= ... ...)
> (and ... ...)))
> =C2=A0 (let ((temp-buffer ...)) (with-current-buffer temp-buffer (unwi= nd-protect
> ... ...)))
> =C2=A0 (with-temp-buffer (insert org-mime-default-header) (insert body= )
> (write-file tmp-file) (eval (list ... org-local-vars ...)))
> =C2=A0 (save-excursion (with-temp-buffer (insert org-mime-default-head= er) (insert
> body) (write-file tmp-file) (eval ...)))
> =C2=A0 org-mime-org-export("html" #("\nThis is should b= e HTML
> mode.\n\n~foo~\n=3Dbar=3D\n_baz_\n\n| Table | A |\n| 1 =C2=A0 =C2=A0 |= 2 | \n\n-- \n" 0 1
> (fontified t) 1 42 (fontified t) 42 43 (fontified t) 43 44 (article-ty= pe
> 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<= br> > 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")
> =C2=A0 (org-mime-replace-images (org-mime-org-export "html" = raw-body tmp-file)
> tmp-file)
> =C2=A0 (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 ...) (htm= l
> ...)) (delete-region html-start html-end) (save-excursion (goto-char > html-start) (insert ... ...)))
> =C2=A0 org-mime-htmlize(nil)
>
>
> On Fri, Apr 9, 2010 at 12:41 PM, Eric Schulte <schulte.eric@gmail.com>wrote:
>
>> Announcing the addition of org-mime to the contrib directory of Or= g-mode
>>
>> this allows sending HTML email using org-mode including...
>>
>>
>> =C2=A0 =C2=A0- *tables* =C2=A0 colname onecolname two =C2=A011 24 = 39
>> =C2=A0 =C2=A0- *inline images* including latex equatio= ns [image: $f(n) =3D n +
>> =C2=A0 =C2=A0\frac{1}{n} \int_{0= }^{n}{d_x f(x) + f(n - x)}$] and the results of
>> =C2=A0 =C2=A0ditaa blocks, etc=E2=80=A6
>>
>> [image: blue.png]
>>
>> =C2=A0 =C2=A0- *blockquotes*
>>
>> =C2=A0 =C2=A0HTML e-mail is the use of a subset of HTML (often ill= -defined) to
>> =C2=A0 =C2=A0provide formatting and semantic markup capabilities i= n e-mail that are not
>> =C2=A0 =C2=A0available with plain text. =E2=80=93 wikipedia
>>
>> =C2=A0 =C2=A0 - fontified *code blocks* (shown below)
>> =C2=A0 =C2=A0- and *HTML character* conversion, like =E2=88=80 cha= racter c s.t. =E2=88=83 h =E2=88=88 *HTML
>> =C2=A0 =C2=A0characters* and c =E2=89=A1 h, org-html-export of c r= esults in h
>>
>>
>>
>> The original org-mode formatted plain text is included as a text/p= lain
>> mime alternative to the generated html.
>>
>> Below find the org-mime export of the org-mime worg page which wil= l be
>> available at http://orgmode.org/worg/org-contrib/org-mime.php<= /a>.
>>
>> 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, an= d can be
>> useful for sending tables, notified source code, and inline images= in email.
>>
>> =C2=A0 How to use it
>> =C2=A0Setup
>>
>> org-mime exposes two functions
>> =C2=A0`org-mime-htmlize' can be called from within a mail comp= osition buffer to
>> export either the entire buffer or just the active region to html,= and embed
>> the results into the buffer as a text/html mime section.
>>
>> org-mime-htmlize is an interactive Lisp function in `org-mime.el&#= 39;.
>>
>> (org-mime-htmlize ARG)
>>
>> Export a portion of an email body composed using `mml-mode' to=
>> html using `org-mode'. =C2=A0If called with an active region o= nly
>> export that region, otherwise export the entire body.
>>
>> =C2=A0`org-mime-org-buffer-htmlize' can be called from within = an Org-mode
>> buffer to export either the whole buffer or the narrowed subtree o= r active
>> region to HTML, and open a new email buffer including the resultin= g 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.
>>
>> =C2=A0The following key bindings are suggested, which bind the C-c= M-o key
>> sequence to the appropriate org-mime function in both email and Or= g-mode
>> buffers.
>>
>> (add-hook 'message-mode-hook
>> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (lambda ()
>> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (local-set-key "\C-= c\M-o" 'org-mime-htmlize)))
>> (add-hook 'org-mode-hook
>> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (lambda ()
>> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (local-set-key "\C-= c\M-o" 'org-mime-org-buffer-htmlize)))
>>
>> =C2=A0 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 prot= ect the
>> CSS of the containing web site. To ensure that your CSS styles are= rendered
>> correctly they must be included in the actual body of the elements= to which
>> they apply.
>>
>> The `org-mime-html-hook' allows for the insertion of these imp= ortant CSS
>> elements into the resulting HTML before mime encoding. The followi= ng are
>> some possible uses of this hook.
>>
>> =C2=A0 =C2=A0- for those who use color themes with Dark background= s it is useful to
>> =C2=A0 =C2=A0set a dark background for all exported code blocks an= d example regions. This
>> =C2=A0 =C2=A0can be accomplished with the following
>>
>> =C2=A0 =C2=A0(add-hook 'org-mime-html-hook
>> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(lambda ()
>> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(org-mime-c= hange-element-style
>> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 "pre&= quot; (format "color: %s; background-color: %s; padding: 0.5em;"<= br> >> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 "#E6E1DC" "#232323&qu= ot;))))
>>
>> =C2=A0 =C2=A0 - the following can be used to nicely offset block q= uotes in email
>> =C2=A0 =C2=A0bodies
>>
>> =C2=A0 =C2=A0(add-hook 'org-mime-html-hook
>> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(lambda ()
>> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(org-mime-c= hange-element-style
>> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 "bloc= kquote" "border-left: 2px solid gray; padding-left: 4px;")))=
>>
>>
>> For other customization options see the org-mime customization gro= up.
>> =C2=A0 Credits
>>
>> org-mime was developed by Eric Schulte with much-appreciated help = and
>> discussion from everyone on the "using orgmode to= send html mail<http://thread.gmane.org/gmane.emacs.orgmode/23153>"
>> thread especially David Maus. >>
>> "Eric Schulte" <
schulte.eric@gmail.com> writes:
>>
>> > Carsten Dominik <carsten.dominik@gmail.com> 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 buffer.
>> >>>
>> >>> Calling `org-mime-org-buffer-htmlize' (could prob= ably use a better
>> >>> name)
>> >>> from inside of an org-mode buffer will use `org-expor= t-as-html' to
>> >>> generate HTML of the buffer (respecting regions and s= ubtree
>> >>> narrowing),
>> >>> and will then package the resulting HTML with all lin= ked images into a
>> >>> message buffer.
>> >>>
>> >>> As usual thanks to Carsten's thoughtfully organiz= ed functions and
>> >>> control variables this was surprisingly easy to imple= ment.
>> >>>
>> >>> Cheers -- Eric
>> >>>
>> >>> The code is still up at http://github.com/eschulte/org-mime
>> >>
>> >> CONTIRB? =C2=A0yes, after the release.....
>> >>
>> >
>> > Sounds great, I'm move this into contrib then. -- Eric >> >
>> >>
>> >> - Carsten
>> >>
>> >>>
>> >>> "Eric Schulte" <
schulte.eric@gmail.com> writes:
>> >>>
>> >>>> Dan Davison <davison@stats.ox.ac.uk> writes:
>> >>>>
>> >>>> [...]
>> >>>>
>> >>>>>
>> >>>>> As I understand it the code you've writte= n is designed to be
>> >>>>> called in a
>> >>>>> message-mode buffer with orgstruct-mode in fo= rce. Would it make
>> >>>>> sense to
>> >>>>> also include in your package a complementary = function, that one
>> >>>>> calls in
>> >>>>> an org-mode buffer? I envisage this generatin= g 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 direct= ory-name and so
>> >>>>> should be
>> >>>>> able to resolve relative paths. Also, there m= ight 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 p= ackage 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 t= o a fledgling task list
>> >>>> packaged in the README at [1]. =C2=A0I'd say = there are two options.
>> >>>>
>> >>>> 1) which you mentioned saving the entire exported= content to the
>> >>>> =C2=A0 kill-ring. =C2=A0One problem here is that = everything is still text and
>> >>>> =C2=A0 pastable only *before* the mime export pro= cess, which means that
>> >>>> =C2=A0 linked images wouldn't resolve after p= asting into the email client.
>> >>>>
>> >>>> 2) having the function generate a new mail buffer= containing the
>> >>>> =C2=A0 exported content. =C2=A0This buffer would = need to have it's
>> >>>> =C2=A0 `buffer-file-name' set, for images to = resolve during export. =C2=A0I'm
>> >>>> not
>> >>>> =C2=A0 sure how this should best work.
>> >>>>
>> >>>> Thanks -- Eric
>> >>>>
>> >>>> Footnotes:
>> >>>> [1] =C2=A0http://github.com/eschulte/org-mime
>> >>>
>> >>>
>> >>> _______________________________________________
>> >>> Emacs-orgmode mailing list
>> >>> Please use `Reply All' to send replies to the lis= t.
>> >>> Emacs-orgmod= e@gnu.org
>> >>> http://lists.gnu.org/mailman/listinfo/emacs-or= gmode
>> >>
>> >> - 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
>>
>>

--001485ea7dca902f250484143710-- --===============1215835237== Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ 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 --===============1215835237==--