;; --- mailto ---
+(autoload 'rfc2368-parse-mailto-url "rfc2368")
+
;;;###autoload
(defun browse-url-mail (url &optional new-window)
- "Open a new mail message buffer within Emacs.
+ "Open a new mail message buffer within Emacs for the RFC 2368 URL.
Default to using the mailto: URL around or before point as the
recipient's address. Supplying a non-nil interactive prefix argument
will cause the mail to be composed in another window rather than the
used instead of `browse-url-new-window-flag'."
(interactive (browse-url-interactive-arg "Mailto URL: "))
(save-excursion
- (let ((to (if (string-match "^mailto:" url)
- (substring url 7)
- url)))
+ (let* ((alist (rfc2368-parse-mailto-url url))
+ (to (assoc "To" alist))
+ (subject (assoc "Subject" alist))
+ (body (assoc "Body" alist))
+ (rest (delete to (delete subject (delete body alist))))
+ (to (cdr to))
+ (subject (cdr subject))
+ (body (cdr body))
+ (mail-citation-hook (unless body mail-citation-hook)))
(if (browse-url-maybe-new-window new-window)
- (compose-mail-other-window to nil nil nil
- (list 'insert-buffer (current-buffer)))
- (compose-mail to nil nil nil nil
- (list 'insert-buffer (current-buffer)))))))
+ (compose-mail-other-window to subject rest nil
+ (if body
+ (list 'insert body)
+ (list 'insert-buffer (current-buffer))))
+ (compose-mail to subject rest nil nil
+ (if body
+ (list 'insert body)
+ (list 'insert-buffer (current-buffer))))))))
;; --- Random browser ---