vm team mailing list archive
-
vm team
-
Mailing list archive
-
Message #00033
[Bug 207383] Re: [gnu.emacs.vm.info] Re: sending html mail using VM
** Also affects: vm
Importance: Undecided
Status: New
** Changed in: vm
Importance: Undecided => Wishlist
--
[gnu.emacs.vm.info] Re: sending html mail using VM
https://bugs.launchpad.net/bugs/207383
You received this bug notification because you are a member of VM
development team, which is the registrant for vm.
Status in View Mail (aka VM) for Emacs: New
Status in VM (View Mail) for Emacs: New
Bug description:
affects viewmail
From: Eric Schulte <eric.no.spam.please@xxxxxxxxx>
Organization: schulte
Newsgroups: gnu.emacs.vm.info
Date: Thu, 10 Jan 2008 18:36:28 -0800
Subject: Re: sending html mail using VM
Eric Schulte <eric.no.spam.please@xxxxxxxxx> writes:
> newsspam5REMOVETHIS@xxxxxxx writes:
>
>> Eric Schulte <eric.no.spam.please@xxxxxxxxx> writes:
>>
>>> Like it or not most of the people I email with (especially at work),
>>> use mail readers that work best with HTML formatted mail.
>>>
>>> I use org-mode for most of my note taking, and there are many times
>>> when I would like to send formatted mail with tables, bold text
>>> etc... to these people. Their mail readers don't use fixed width
>>> fonts, so my tables display as garbage. However I can export my
>>> org-mode notes to very nice html documents.
>>>
>>> Is there a way for me to
>>>
>>> 1. compose mail in org-mode
>>> 2. on sending convert the mail to html
>>> 3. send the mail as a mime-type text/html message using VM
>>>
>>> I have just tried to send some simple html mail using vm just by
>>> adding a "Content-Type:" header to the top of the mail, but that
>>> wasn't sufficient.
>>
>> Two headers are required, Mime-Version and Content-Type, e.g.
>>
>> ,----
>> | MIME-Version: 1.0
>> | Content-Type: text/html; charset="iso-8859-1"
>> `----
>>
>> This should be sufficient.
>>
>> The even the charset may be dropped.
>>
>> From an org-mode buffer use something like ...
>>
>> (defun org-mode-2-vm-mail ()
>> (let ((html-buffer (get-buffer-create "*html*")))
>> (org-export-as-html nil nil nil html-buffer nil)
>> (vm-mail)
>> (goto-char (point-min))
>> (insert "MIME-Version: 1.0\n")
>> (insert "Content-Type: text/html")
>> (search-forward mail-header-separator)
>> (delete-region (point) (point-max))
>> (insert "\n")
>> (insert-buffer-substring html-buffer)
>> (kill-buffer html-buffer)
>> (message "Add the headers...")))
>>
>> It could be better, e.g. org-mode just for the body and normal
>> vm-mail-mode on top, but I am not sure how this should interact.
>>
>> Robert.
>
> Thanks for the code!
>
> Actually there is already a way to have org-mode active while
> composing text emails (info "(org)orgstruct-mode"), intended for
> people who like the way org indents lists, etc... This intercepts the
> "\C-c\C-c" command and uses it for org things or passes it to the
> major mode depending on where in the buffer you lie. I'm working on
> changing the behavior of orgstruct-mode so that if you use "\C-c\C-c"
> with a prefix command in a mail buffer, it will send the body as html.
> Hopefully your code will complete what I've got so far.
>
> for kicks I'll paste in what I have now, although currently all it
> does is intercept prefix'd "\C-c\C-c" commands.
>
> Thanks again
> Eric
>
>
> (defun orgstruct-hijacker-command-11 (arg)
> "In Structure, run `org-ctrl-c-ctrl-c'. Outside of Structure
> check for a prefix argument and if buffer name contains `mail',
> and run orgstruct-send-as-html, or run the binding of
> `\C-c\C-c'."
> (interactive "p")
> (if (org-context-p (quote headline) (quote item))
> (org-run-like-in-org-mode (quote org-ctrl-c-ctrl-c))
> (if (orgstruct-send-as-html-should-i-p arg)
> (orgstruct-send-as-html arg)
> (let (orgstruct-mode)
> (call-interactively
> (key-binding "\C-c\C-c"))))))
>
> (defun orgstruct-send-as-html-should-i-p (arg)
> (if (and arg (> arg 1) (string-match "mail" (buffer-name (current-buffer))))
> t))
>
> (defun orgstruct-send-as-html (arg)
> "Export the body of the mail message as html using
> `org-export-region-as-html', then attach to the messge, change the
> mail's mime type appropriately, then send"
> ;; use org-export-region-as-html to export body to temporary buffer
> ;; attach to the mail using vm-mime-attach-buffer
> ;; send the mail
> )
>
> --
> schulte
It seems to be working with these functions
if you use orgstruct-mode with or without orgtble-mode load the
following functions, then you can send convert and send html mail with
"\C-u\C-c\C-c"
Cheers,
Eric
(defun orgstruct-hijacker-command-11 (arg)
"In Structure, run `org-ctrl-c-ctrl-c'. Outside of Structure
check for a prefix argument and if buffer name contains `mail',
and run orgstruct-send-as-html, or run the binding of
`\C-c\C-c'."
(interactive "p")
(if (org-context-p (quote headline) (quote item))
(org-run-like-in-org-mode (quote org-ctrl-c-ctrl-c))
(if (orgstruct-send-as-html-should-i-p arg)
(orgstruct-send-as-html)
(let (orgstruct-mode)
(call-interactively
(key-binding "\C-c\C-c"))))))
(defun orgstruct-send-as-html-should-i-p (arg)
"lets be pretty sure we have a prefix argument and are actually
in a mail buffer"
(goto-char (point-min))
(if (and arg
(> arg 1)
(string-match "mail" (buffer-name (current-buffer)))
(search-forward mail-header-separator))
t))
(defun orgstruct-send-as-html ()
"Export the body of the mail message to html using
`org-export-as-html' then send the results as a text/html
Content-Type message"
;; adjust mime type
(goto-char (point-min))
(insert "MIME-Version: 1.0\n")
(insert "Content-Type: text/html\n")
(search-forward mail-header-separator)
(let* ((mail-text-point (point))
(mail-buffer (current-buffer))
;; have to write the file because org needs a path to export
(tmp-file (make-temp-name (expand-file-name "org-html-mail" "/tmp")))
(html
(progn
(write-file tmp-file)
;; convert to html
(org-export-region-as-html mail-text-point (point-max) t 'string))))
(switch-to-buffer mail-buffer)
(set-visited-file-name nil)
(delete-file tmp-file)
;; replace text with html
(goto-char mail-text-point)
(delete-region (point) (point-max))
(insert "\n")
(insert html)
;; send the mail
(let (orgstruct-mode)
(call-interactively
(key-binding "\C-c\C-c")))))