emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
From: "Eric Schulte" <schulte.eric@gmail.com>
To: Dan Davison <davison@stats.ox.ac.uk>
Cc: emacs-orgmode@gnu.org
Subject: Re: using orgmode to send html mail?
Date: Wed, 24 Mar 2010 12:01:55 -0600	[thread overview]
Message-ID: <87tys5r3q6.fsf@gmail.com> (raw)
In-Reply-To: 87sk7pzk02.fsf@stats.ox.ac.uk

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 <img> 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 <davison@stats.ox.ac.uk> writes:

> "Eric Schulte" <schulte.eric@gmail.com> writes:
>
>> Xiao-Yong Jin <xj2106@columbia.edu> 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 "<pre style=\"font-family: courier, monospace;\">\n%s</pre>\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=alternative>\n<#part type=text/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 <pre></pre> 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
>>>> ━━━━━━━━━━━━━━
>>>>        1          2       3   
>>>> ──────────────
>>>>  first column   second  third 
>>>> ━━━━━━━━━━━━━━
>>>
>>> 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

  reply	other threads:[~2010-03-24 18:09 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 [this message]
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                                         ` [ANN] org-mime -- " Eric Schulte
2010-04-09 17:41                                           ` 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=87tys5r3q6.fsf@gmail.com \
    --to=schulte.eric@gmail.com \
    --cc=davison@stats.ox.ac.uk \
    --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).