emacs-orgmode
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Orgmode] using orgmode to send html mail?


From: Eric Schulte
Subject: Re: [Orgmode] using orgmode to send html mail?
Date: Wed, 24 Mar 2010 09:00:09 -0600
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/23.1.90 (gnu/linux)

Xiao-Yong Jin <address@hidden> 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.

(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.

reply via email to

[Prev in Thread] Current Thread [Next in Thread]