From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Eric Schulte" Subject: Re: using orgmode to send html mail? Date: Fri, 02 Apr 2010 17:01:30 -0600 Message-ID: <876349wjat.fsf@gmail.com> References: <878w9krtyn.wl%dmaus@ictsoc.de> <871vfa24qo.fsf@gmail.com> <87pr2uww2d.fsf@columbia.edu> <87tys5zrwm.fsf@gmail.com> <87sk7pzk02.fsf@stats.ox.ac.uk> <87tys5r3q6.fsf@gmail.com> <87ocid7cuj.wl%dmaus@ictsoc.de> <874ok5qxp9.fsf@gmail.com> <87vdckksnj.wl%dmaus@ictsoc.de> <874ok33zje.fsf@gmail.com> <87zl1vf4ru.wl%dmaus@ictsoc.de> <874ok311t9.fsf@gmail.com> <87y6h8tegw.wl%dmaus@ictsoc.de> <87k4ssb12n.fsf@gmail.com> <87oci2wd1f.wl%dmaus@ictsoc.de> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Return-path: Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1Nxps0-00012L-EL for emacs-orgmode@gnu.org; Fri, 02 Apr 2010 19:01:44 -0400 Received: from [140.186.70.92] (port=50891 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1Nxpry-00010Y-FA for emacs-orgmode@gnu.org; Fri, 02 Apr 2010 19:01:43 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.69) (envelope-from ) id 1Nxprr-0003h1-FH for emacs-orgmode@gnu.org; Fri, 02 Apr 2010 19:01:41 -0400 Received: from mail-pv0-f169.google.com ([74.125.83.169]:53226) by eggs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1Nxprr-0003gt-5i for emacs-orgmode@gnu.org; Fri, 02 Apr 2010 19:01:35 -0400 Received: by pvg11 with SMTP id 11so560818pvg.0 for ; Fri, 02 Apr 2010 16:01:34 -0700 (PDT) In-Reply-To: <87oci2wd1f.wl%dmaus@ictsoc.de> (David Maus's message of "Fri, 02 Apr 2010 09:04:28 +0200") 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: David Maus Cc: Dan Davison , emacs-orgmode@gnu.org David Maus writes: > Eric Schulte wrote: >>> >>> Thinking functional this might be the first function of >>> org-mail-htmlize[1]: Create a html representation of message body if >>> necessary or appropriate. >>> > >>Oh, so this would be a slightly different issue, > >>So this function could be run *every* time an email is sent. I agree >>that in those cases running on the entire message would be the right way >>to go. > > Right, this would be nice for people who are obliged to send out html > messages. If this is turned on org-mime should display the string > "HTML" in the mode line. In the WL it's done this way: > > ,---- > | (defun dmj/wl-send-html-message-draft-init () > | "Create buffer local settings for maybe sending html message." > | (unless (boundp 'dmj/wl-send-html-message-toggled-p) > | (setq dmj/wl-send-html-message-toggled-p nil)) > | (make-variable-buffer-local 'dmj/wl-send-html-message-toggled-p) > | (add-to-list 'global-mode-string > | '(:eval (if (eq major-mode 'wl-draft-mode) > | dmj/wl-send-html-message-toggled-p)))) > `---- > > This function is hooked into mime-edit mode and set's a buffer local > variable that indicates "html message mode" and is displayed in the > mode line. > Another option here is to add a defadvice to the actual sending command (C-c C-c in gnus) such that if the command is called with a prefix argument, then `org-mime-htmlize' is run on the entire message before mail delivery. To me this seems like a simpler solution than the above. > >>> >>> 2/ >>> >>> The second function: Attach external files that are referenced in the >>> message. This might be useful even if you don't send out html >>> messages: All external files are stashed into a multipart/mixed >>> container along with a Content-Id: header field. >>> >>> Than all references are changed accordingly to point to the attached >>> files: >>> >>> - for html use src/href with the cid: prefix >>> >>> - for text: good question. Maybe replace occurences of the file >>> with a customizable string saying: "see attached file foo.bar". >>> > >>I'm not sure I understand, I'm currently happy with my mail agent's >>method of attaching files to email, what else would this use of the >>function add aside from a new attachment syntax. > > What I meant was: Suppose you write a document in Org with references > to external files (images etc.). If finished you'd like this document > to a fellow by mail including all external files. So this function > collects all these files, and maybe converts the message body to html, > fires up Gnus/WL with a new message and inserts something like > > < #multipart type="alternate"> > < #part type="text/plain"> ...plain text body... > < #part type="text/html"> ...html body... > < #/multipart> > < #multipart type="mixed"> > < #part type="image/png"> image1.png > < #part type="image/png"> image2.png > ... > < #/multipart> > > That is: The original document including all external files -- and all > references in the original file are replaced by references to the > attachments. > Ah, this sounds similar to the extension proposed by Dan and seconded by a couple of others on the list. It seems like the big question here is how to convey all of the required mime information from the org-mode buffer to the message body. If I'm understanding correctly both you and Dan seem to be in favor of exporting to mime and packaging up the raw mime information from the org-mode buffer. I'm leaning towards thinking that it may be easier to simply bring the mail buffer to the org-mode file by saving it to a temporary location alongside the org-mode file (so all links resolve). It will probably take some experimentation to find out which approach is more feasible/natural. > > Original > ,---- > | ... > | As you can see in [[file:figure1.png][Figure 1]], cats > | *are* the cutest animals on earth. > | ... > `---- > > "figure1.png" will be attached and the reference adjusted to the > attachment. > > HTML > ,---- > | As you can see in Figure 1, > | cats are the cutest animals on earth. > `---- > > Plain > > ,---- > | As you can see in Figure 1 (see attached file: figure1.png), cats > | *are* the cutest animals on earth. > `---- > >>> 4/ >>> >>> Detecting the plain text body should not just stop on end of buffer >>> but also on the first occurence of a MIME delimiter: Maybe the user >>> already added a attachment. >>> > >>Good point, one open question here is how to treat that mime border, I'm >>thinking it may be best to simply stash it in a > >>#+BEGIN_HTML >>original mime content >>#+END_HTML > >>block, so that it survives the Org-mode export unscathed, however maybe >>it's simpler just to end the html alternative part at the first mime >>border. > > Yes, it is simpler. Simply search for the end of the message body > with the condition: either eobp or MIME delimiter. > > For example when in mml (line 92ff in org-mime.el): > > ,---- > | (html-end (or (and region-p (region-end)) > | (if (not (re-search-forward "^<#part\\|^<#multipart" nil t)) > | (point-max) > | ;; one line up > | (end-of-line 0) > | (point)))) > `---- > > With this you can even catch the signature that is separate by "-- > \n". If re-search-forward finds an attachment the body ends right > before. Small glitch: This code assumes MIME delimiters start at the > beginning of a line ("^"). > Agreed, this approach is simpler to implement however if the other approach works I think it may be easier to use. Again this question may have to be hammered out on the forge of trial and error. Thanks for the feedback. There is clearly some more work do be done on this front, but it is sounding like it will be a useful product once complete. Am I right in assuming that the current version is now working for WL? Best -- Eric > > -- David > > -- > OpenPGP... 0x99ADB83B5A4478E6 > Jabber.... dmjena@jabber.org > Email..... dmaus@ictsoc.de