Gnus development mailing list
 help / color / mirror / Atom feed
* mml-attach-file: Argument TYPE is not optional
@ 2005-07-26 14:22 Reiner Steib
  2005-07-27  1:37 ` Katsumi Yamaoka
  0 siblings, 1 reply; 2+ messages in thread
From: Reiner Steib @ 2005-07-26 14:22 UTC (permalink / raw)


Hi,

the doc string of `mml-attach-file' says that TYPE is optional:

,----[ C-h f mml-attach-file RET ]
| mml-attach-file is an interactive Lisp function in `mml.el'.
| It is bound to <menu-bar> <Attachments> <Attach File...>, C-c RET f, C-c C-a.
| (mml-attach-file FILE &optional TYPE DESCRIPTION DISPOSITION)
| 
| Attach a file to the outgoing MIME message.
| The file is not inserted or encoded until you send the message with
| `C-c C-c' or `C-c C-s'.
| 
| FILE is the name of the file to attach.  TYPE is its content-type, a
| string of the form "type/subtype".  DESCRIPTION is a one-line
| description of the attachment.
`----

After evaluating (mml-attach-file "/tmp/ste/gnus/test-file-1.txt") in
a message buffer, I get:

| <# part filename="/tmp/ste/gnus/test-file-1.txt" disposition=attachment>
| <# /part>

Note: type="text/plain" is not specified.

When sending the message, I get the backtrace listed below[1].

I'm not sure about the best way to fix this problem:

(1) Make TYPE in `mml-attach-file' mandatory.

(2) Set Content-Type in `mml-generate-mime-1' appropriately if no
    type=".../..." is specified.

Patch for solution (2):

--8<---------------cut here---------------start------------->8---
--- mml.el	22 Jul 2005 18:49:24 +0200	6.88.2.10
+++ mml.el	26 Jul 2005 15:50:11 +0200	
@@ -518,7 +518,11 @@
 	    (mml-insert-parameter-string
 	     cont '(expiration size permission))))
 	(insert "\n\n")
-	(insert "Content-Type: " (cdr (assq 'type cont)) "\n")
+	(insert "Content-Type: "
+		(or (cdr (assq 'type cont))
+		    (and name (mm-default-file-encoding name))
+		    "application/octet-stream")
+		"\n")
 	(insert "Content-ID: " (message-make-message-id) "\n")
 	(insert "Content-Transfer-Encoding: "
 		(or (cdr (assq 'encoding cont)) "binary"))
--8<---------------cut here---------------end--------------->8---

Opinions?  Unless there are other suggestion, I'll install (2).

Bye, Reiner.

[1] Backtrace (probably you need to specify a Gcc group and set
    gnus-gcc-externalize-attachments to 'all to reproduce the problem):

--8<---------------cut here---------------start------------->8---
Debugger entered--Lisp error: (wrong-type-argument char-or-string-p nil)
  insert("Content-Type: " nil "\n")
  (cond ((or ... ...) (let ... ... ...)) ((eq ... ...) (insert "Content-Type: message/external-body") (let ... ... ... ...) (insert "\n\n") (insert "Content-Type: " ... "\n") (insert "Content-ID: " ... "\n") (insert "Content-Transfer-Encoding: " ...) (insert "\n\n") (insert ...) (insert "\n")) ((eq ... ...) (let* ... ...)) (t (error "Invalid element: %S" cont)))
  (save-restriction (narrow-to-region (point) (point)) (mml-tweak-part cont) (cond (... ...) (... ... ... ... ... ... ... ... ... ...) (... ...) (t ...)) (let (... ... sender recipients) (when ... ... ... ...)))
  (let ((mm-use-ultra-safe-encoding ...)) (save-restriction (narrow-to-region ... ...) (mml-tweak-part cont) (cond ... ... ... ...) (let ... ...)))
  mml-generate-mime-1((external (name . "/tmp/ste/gnus/test-file-1.txt") (disposition . "attachment") (tag-location . 639) (contents . "")))
  (progn (insert "\n--" mml-boundary "\n") (mml-generate-mime-1 part))
  (if (and (consp part) (consp ...)) (progn (insert "\n--" mml-boundary "\n") (mml-generate-mime-1 part)))
  (when (and (consp part) (consp ...)) (insert "\n--" mml-boundary "\n") (mml-generate-mime-1 part))
  (while (setq part (pop cont)) (when (and ... ...) (insert "\n--" mml-boundary "\n") (mml-generate-mime-1 part)))
  (let ((cont cont) part) (while (setq part ...) (when ... ... ...)))
  (let ((mml-boundary ...)) (insert (format "Content-Type: multipart/%s; boundary=\"%s\"" type mml-boundary) (if ... ... "\n")) (let (... part) (while ... ...)) (insert "\n--" mml-boundary "--\n"))
  (if handler (funcall (cdr handler) cont) (let (...) (insert ... ...) (let ... ...) (insert "\n--" mml-boundary "--\n")))
  (let* ((type ...) (mml-generate-default-type ...) (handler ...)) (if handler (funcall ... cont) (let ... ... ... ...)))
  (cond ((or ... ...) (let ... ... ...)) ((eq ... ...) (insert "Content-Type: message/external-body") (let ... ... ... ...) (insert "\n\n") (insert "Content-Type: " ... "\n") (insert "Content-ID: " ... "\n") (insert "Content-Transfer-Encoding: " ...) (insert "\n\n") (insert ...) (insert "\n")) ((eq ... ...) (let* ... ...)) (t (error "Invalid element: %S" cont)))
  (save-restriction (narrow-to-region (point) (point)) (mml-tweak-part cont) (cond (... ...) (... ... ... ... ... ... ... ... ... ...) (... ...) (t ...)) (let (... ... sender recipients) (when ... ... ... ...)))
  (let ((mm-use-ultra-safe-encoding ...)) (save-restriction (narrow-to-region ... ...) (mml-tweak-part cont) (cond ... ... ... ...) (let ... ...)))
  mml-generate-mime-1((multipart (type . "mixed") (part (type . "text/plain") (contents . "(mml-attach-file \"/tmp/ste/gnus/test-file-1.txt\")\n\n| < #part filename=\"/tmp/ste/gnus/test-file-1.txt\" disposition=attachment>\n| < #/part>\n\n")) (external (name . "/tmp/ste/gnus/test-file-1.txt") (disposition . "attachment") (tag-location . 639) (contents . ""))))
  (if (and (consp ...) (= ... 1)) (mml-generate-mime-1 (car cont)) (mml-generate-mime-1 (nconc ... cont)))
  (save-current-buffer (set-buffer temp-buffer) (if (and ... ...) (mml-generate-mime-1 ...) (mml-generate-mime-1 ...)) (buffer-string))
  (with-current-buffer temp-buffer (if (and ... ...) (mml-generate-mime-1 ...) (mml-generate-mime-1 ...)) (buffer-string))
  (unwind-protect (with-current-buffer temp-buffer (if ... ... ...) (buffer-string)) (and (buffer-name temp-buffer) (kill-buffer temp-buffer)))
  (let ((temp-buffer ...)) (unwind-protect (with-current-buffer temp-buffer ... ...) (and ... ...)))
  (with-temp-buffer (if (and ... ...) (mml-generate-mime-1 ...) (mml-generate-mime-1 ...)) (buffer-string))
  (if (not cont) nil (with-temp-buffer (if ... ... ...) (buffer-string)))
  (let ((cont ...) (mml-multipart-number mml-multipart-number)) (if (not cont) nil (with-temp-buffer ... ...)))
  mml-generate-mime()
  message-encode-message-body()
  gnus-inews-do-gcc()
  run-hooks(message-sent-hook)
  message-send(nil)
  message-send-and-exit(nil)
  call-interactively(message-send-and-exit)
--8<---------------cut here---------------end--------------->8---




^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2005-07-27  1:37 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2005-07-26 14:22 mml-attach-file: Argument TYPE is not optional Reiner Steib
2005-07-27  1:37 ` Katsumi Yamaoka

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 NNTP newsgroup(s).