emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
From: "Eric Schulte" <schulte.eric@gmail.com>
To: emacs-orgmode@gnu.org
Subject: Re: [ANN] org-mime -- using orgmode to send html mail?
Date: Fri, 09 Apr 2010 10:41:54 -0600	[thread overview]
Message-ID: <8739z44lyl.fsf@gmail.com> (raw)
In-Reply-To: 8739z9c3vq.fsf@gmail.com

[-- Attachment #1: Type: text/plain, Size: 133 bytes --]

Announcing the addition of org-mime to the contrib directory of Org-mode

this allows sending HTML email using org-mode including...

[-- Attachment #2.1: Type: text/plain, Size: 944 bytes --]

#+TITLE: NONE
#+OPTIONS: latex:t
- *tables*
  | colname one | colname two |
  |-------------+-------------|
  |           1 |           1 |
  |           2 |           4 |
  |           3 |           9 | 

- *inline images* including latex equations $f(n) = n + \frac{1}{n}
  \int_{0}^{n}{d_x f(x) + f(n - x)}$ and the results of ditaa blocks,
  etc...

  #+begin_src ditaa :file blue.png :cmdline -r
  +---------+
  | cBLU    |
  |         |
  |    +----+
  |    |cPNK|
  |    |    |
  +----+----+
  #+end_src

- *blockquotes*
  #+begin_quote
    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. -- wikipedia
  #+end_quote

- fontified *code blocks* (shown below)

- and *HTML character* conversion, like \forall character c s.t. \exists
  h \in /HTML characters/ and c \equiv h, org-html-export of c results
  in h

[-- Attachment #2.2: Type: text/html, Size: 1274 bytes --]

[-- Attachment #3: blue.png --]
[-- Type: image/png, Size: 2087 bytes --]

[-- Attachment #4: mail78058-A_b023893fa20418a1525cad63accc444e9a8954d3.png --]
[-- Type: image/png, Size: 2165 bytes --]

[-- Attachment #5: Type: text/plain, Size: 261 bytes --]


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

[-- Attachment #6.1: Type: text/plain, Size: 3971 bytes --]

#+TITLE:     org-mime.el --- org html export for text/html MIME emails
#+OPTIONS:    H:3 num:nil toc:3 \n:nil @:t ::t |:t ^:t -:t f:t *:t TeX:t LaTeX:t skip:nil d:(HIDE) tags:not-in-toc
#+STARTUP:    align fold nodlcheck hidestars oddeven lognotestate
#+SEQ_TODO:   TODO(t) INPROGRESS(i) WAITING(w@) | DONE(d) CANCELED(c@)
#+TAGS:       Write(w) Update(u) Fix(f) Check(c) 
#+AUTHOR:     Eric Schulte
#+EMAIL:      schulte.eric at gmail dot com
#+LANGUAGE:   en
#+PRIORITIES: A C B
#+CATEGORY:   worg

* 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 email.

* 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 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 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.
#+begin_src emacs-lisp
  (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)))
#+end_src

** 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
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
  regions.  This can be accomplished with the following
  #+begin_src emacs-lisp
    (add-hook 'org-mime-html-hook
              (lambda ()
                (org-mime-change-element-style
                 "pre" (format "color: %s; background-color: %s; padding: 0.5em;"
                               "#E6E1DC" "#232323"))))
  #+end_src
- the following can be used to nicely offset block quotes in email
  bodies
  #+begin_src emacs-lisp
    (add-hook 'org-mime-html-hook
              (lambda ()
                (org-mime-change-element-style
                 "blockquote" "border-left: 2px solid gray; padding-left: 4px;")))    
  #+end_src

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 "[[http://thread.gmane.org/gmane.emacs.orgmode/23153][using orgmode to send html mail]]"
thread especially David Maus.

[-- Attachment #6.2: Type: text/html, Size: 5771 bytes --]

[-- Attachment #7: Type: text/plain, Size: 3108 bytes --]

"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 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" <schulte.eric@gmail.com> writes:
>>>
>>>> Dan Davison <davison@stats.ox.ac.uk> 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
>>
>> - Carsten

[-- Attachment #8: Type: text/plain, Size: 201 bytes --]

_______________________________________________
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

  reply	other threads:[~2010-04-09 16:42 UTC|newest]

Thread overview: 63+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-03-22  2:34 using orgmode to send html mail? Matt Price
2010-03-22 15:44 ` Matt Price
2010-03-22 20:18 ` David Maus
2010-03-23 19:54   ` Eric Schulte
2010-03-23 21:46     ` Xiao-Yong Jin
2010-03-24 15:00       ` Eric Schulte
2010-03-24 17:50         ` Dan Davison
2010-03-24 18:01           ` Eric Schulte
2010-03-24 19:12             ` David Maus
2010-03-24 20:19               ` Eric Schulte
2010-03-25 21:17                 ` David Maus
2010-03-26 14:53                   ` Eric Schulte
2010-03-26 16:04                     ` David Maus
2010-03-26 16:32                       ` Eric Schulte
2010-03-31 18:12                         ` [CONTRIB?] " Eric Schulte
2010-03-31 20:05                           ` Dan Davison
2010-03-31 21:10                             ` Eric Schulte
2010-03-31 21:37                               ` Dan Davison
2010-04-01 14:22                                 ` Eric Schulte
2010-04-05  5:39                                   ` Eric Schulte
2010-04-05  6:49                                     ` Carsten Dominik
2010-04-05 15:31                                       ` Eric Schulte
2010-04-09 16:41                                         ` Eric Schulte [this message]
2010-04-09 17:41                                           ` [ANN] org-mime -- " Matt Price
2010-04-09 19:11                                             ` Eric Schulte
2010-04-09 19:22                                             ` David Maus
2010-04-09 20:34                                               ` Eric Schulte
2010-04-12 13:37                                           ` Andrew Hyatt
2010-04-12 17:22                                             ` Eric Schulte
2010-04-13  1:31                                               ` Andrew Hyatt
2010-04-14  0:57                                                 ` Eric Schulte
2010-04-14  1:57                                                   ` Andrew Hyatt
2010-04-14 14:59                                                     ` Eric Schulte
2010-04-14 18:00                                                       ` Andrew Hyatt
2010-04-14 19:26                                                         ` Bernt Hansen
2010-04-14  8:39                                                   ` Eric S Fraga
2010-04-14 15:12                                                     ` Eric Schulte
2010-04-14 19:38                                                       ` Eric S Fraga
2010-04-15  2:49                                                         ` Eric Schulte
2010-04-15 15:47                                                           ` Eric Schulte
2010-04-13 23:03                                           ` Eric S Fraga
2010-04-14  1:22                                             ` Eric Schulte
2010-04-05 13:54                                     ` [CONTRIB?] " Dan Davison
2010-04-05 14:50                                       ` David Maus
2010-04-05 14:53                                       ` Dan Davison
2010-04-05 15:30                                         ` Eric Schulte
2010-04-01 17:37                           ` Sivaram Neelakantan
2010-04-01 17:45                           ` Sivaram Neelakantan
2010-03-31 20:37                         ` David Maus
2010-03-31 22:03                           ` Eric Schulte
2010-04-02  7:04                             ` David Maus
2010-04-02 23:01                               ` Eric Schulte
2010-04-03  9:19                                 ` David Maus
2010-04-04 17:52                                   ` Eric Schulte
2010-04-01  7:53                           ` Vagn Johansen
2010-04-02  6:34                             ` David Maus
2010-04-02 14:57                               ` Dan Davison
2010-04-02 17:25                                 ` David Maus
2010-04-02 21:10                                   ` Eric Schulte
2010-04-03  9:00                                     ` David Maus
2010-04-03 12:03                                       ` David Maus
2010-04-04  2:41                                         ` Eric Schulte
2010-04-04 10:00                                           ` David Maus

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.orgmode.org/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=8739z44lyl.fsf@gmail.com \
    --to=schulte.eric@gmail.com \
    --cc=emacs-orgmode@gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).