Gnus development mailing list
 help / color / mirror / Atom feed
From: Reiner Steib <reinersteib+gmane@imap.cc>
Subject: mml-attach-file: Argument TYPE is not optional
Date: Tue, 26 Jul 2005 16:22:05 +0200	[thread overview]
Message-ID: <v9ack9lkaa.fsf@marauder.physik.uni-ulm.de> (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---




             reply	other threads:[~2005-07-26 14:22 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2005-07-26 14:22 Reiner Steib [this message]
2005-07-27  1:37 ` Katsumi Yamaoka

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=v9ack9lkaa.fsf@marauder.physik.uni-ulm.de \
    --to=reinersteib+gmane@imap.cc \
    --cc=Reiner.Steib@gmx.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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).