Gnus development mailing list
 help / color / mirror / Atom feed
From: Katsumi Yamaoka <yamaoka@jpl.org>
Subject: Re: mml-attach-file: Argument TYPE is not optional
Date: Wed, 27 Jul 2005 10:37:13 +0900	[thread overview]
Message-ID: <b9yiryxuj06.fsf@jpl.org> (raw)
In-Reply-To: <v9ack9lkaa.fsf@marauder.physik.uni-ulm.de>

[-- Attachment #1: Type: text/plain, Size: 1370 bytes --]

>>>>> In <v9ack9lkaa.fsf@marauder.physik.uni-ulm.de> Reiner Steib wrote:

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

And also for `mml-attach-external'.

[...]

> 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.

It is the same in the case where `mml-attach-external' is used.

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

Aren't you talking about `mml-attach-external'?  Though I couldn't
reproduce the error because the type defaults to text/plain for the <#
part ...>s internally in `mml-generate-mime-1', I think it isn't good
that Gnus doesn't add the Content-Type MIME header to the part anyway,
and the default type should be application/octet-stream if it cannot
be guessed.

> 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):

[...]

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

I vote to (2).  Here're patches for the v5-10 branch and for the
trunk, which enable to add the Content-Type header for the <#
part ...>s as well.


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: v5-10.patch --]
[-- Type: text/x-patch, Size: 3055 bytes --]

--- mml.el~	2005-07-24 21:54:30 +0000
+++ mml.el	2005-07-27 01:34:21 +0000
@@ -400,9 +400,12 @@
       (mml-tweak-part cont)
       (cond
        ((or (eq (car cont) 'part) (eq (car cont) 'mml))
-	(let ((raw (cdr (assq 'raw cont)))
-	      coded encoding charset filename type flowed)
-	  (setq type (or (cdr (assq 'type cont)) "text/plain"))
+	(let* ((raw (cdr (assq 'raw cont)))
+	       (filename (cdr (assq 'filename cont)))
+	       (type (or (cdr (assq 'type cont))
+			 (and filename (mm-default-file-encoding filename))
+			 "application/octet-stream"))
+	       coded encoding charset flowed)
 	  (if (and (not raw)
 		   (member (car (split-string type "/")) '("text" "message")))
 	      (progn
@@ -414,7 +417,7 @@
 		  (cond
 		   ((cdr (assq 'buffer cont))
 		    (insert-buffer-substring (cdr (assq 'buffer cont))))
-		   ((and (setq filename (cdr (assq 'filename cont)))
+		   ((and filename
 			 (not (equal (cdr (assq 'nofile cont)) "yes")))
 		    (let ((coding-system-for-read charset))
 		      (mm-insert-file-contents filename)))
@@ -475,7 +478,7 @@
 		(insert (with-current-buffer (cdr (assq 'buffer cont))
 			  (mm-with-unibyte-current-buffer
 			    (buffer-string)))))
-	       ((and (setq filename (cdr (assq 'filename cont)))
+	       ((and filename
 		     (not (equal (cdr (assq 'nofile cont)) "yes")))
 		(let ((coding-system-for-read mm-binary-coding-system))
 		  (mm-insert-file-contents filename nil nil nil nil t)))
@@ -516,15 +519,19 @@
 	     "access-type=url"))
 	  (when parameters
 	    (mml-insert-parameter-string
-	     cont '(expiration size permission))))
-	(insert "\n\n")
-	(insert "Content-Type: " (cdr (assq 'type cont)) "\n")
-	(insert "Content-ID: " (message-make-message-id) "\n")
-	(insert "Content-Transfer-Encoding: "
-		(or (cdr (assq 'encoding cont)) "binary"))
-	(insert "\n\n")
-	(insert (or (cdr (assq 'contents cont))))
-	(insert "\n"))
+	     cont '(expiration size permission)))
+	  (insert "\n\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"))
+	  (insert "\n\n")
+	  (insert (or (cdr (assq 'contents cont))))
+	  (insert "\n")))
        ((eq (car cont) 'multipart)
 	(let* ((type (or (cdr (assq 'type cont)) "mixed"))
 	       (mml-generate-default-type (if (equal type "digest")
@@ -560,7 +567,8 @@
 	    (message-options-set 'message-sender sender))
 	  (if (setq recipients (cdr (assq 'recipients cont)))
 	      (message-options-set 'message-recipients recipients))
-	  (let ((style (mml-signencrypt-style (first (or sign-item encrypt-item)))))
+	  (let ((style (mml-signencrypt-style
+			(first (or sign-item encrypt-item)))))
 	    ;; check if: we're both signing & encrypting, both methods
 	    ;; are the same (why would they be different?!), and that
 	    ;; the signencrypt style allows for combined operation.

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #3: trunk.patch --]
[-- Type: text/x-patch, Size: 2669 bytes --]

--- mml.el~	2005-07-24 21:50:41 +0000
+++ mml.el	2005-07-27 01:34:21 +0000
@@ -404,11 +404,14 @@
       (mml-tweak-part cont)
       (cond
        ((or (eq (car cont) 'part) (eq (car cont) 'mml))
-	(let ((raw (cdr (assq 'raw cont)))
-	      type charset coding filename encoding flowed coded)
-	  (setq type (or (cdr (assq 'type cont)) "text/plain")
-		charset (cdr (assq 'charset cont))
-		coding (mm-charset-to-coding-system charset))
+	(let* ((raw (cdr (assq 'raw cont)))
+	       (filename (cdr (assq 'filename cont)))
+	       (type (or (cdr (assq 'type cont))
+			 (and filename (mm-default-file-encoding filename))
+			 "application/octet-stream"))
+	       (charset (cdr (assq 'charset cont)))
+	       (coding (mm-charset-to-coding-system charset))
+	       encoding flowed coded)
 	  (cond ((eq coding 'ascii)
 		 (setq charset nil
 		       coding nil))
@@ -421,7 +424,7 @@
 		  (cond
 		   ((cdr (assq 'buffer cont))
 		    (insert-buffer-substring (cdr (assq 'buffer cont))))
-		   ((and (setq filename (cdr (assq 'filename cont)))
+		   ((and filename
 			 (not (equal (cdr (assq 'nofile cont)) "yes")))
 		    (let ((coding-system-for-read coding))
 		      (mm-insert-file-contents filename)))
@@ -482,7 +485,7 @@
 		(insert (with-current-buffer (cdr (assq 'buffer cont))
 			  (mm-with-unibyte-current-buffer
 			    (buffer-string)))))
-	       ((and (setq filename (cdr (assq 'filename cont)))
+	       ((and filename
 		     (not (equal (cdr (assq 'nofile cont)) "yes")))
 		(let ((coding-system-for-read mm-binary-coding-system))
 		  (mm-insert-file-contents filename nil nil nil nil t))
@@ -527,15 +530,19 @@
 	     "access-type=url"))
 	  (when parameters
 	    (mml-insert-parameter-string
-	     cont '(expiration size permission))))
-	(insert "\n\n")
-	(insert "Content-Type: " (cdr (assq 'type cont)) "\n")
-	(insert "Content-ID: " (message-make-message-id) "\n")
-	(insert "Content-Transfer-Encoding: "
-		(or (cdr (assq 'encoding cont)) "binary"))
-	(insert "\n\n")
-	(insert (or (cdr (assq 'contents cont))))
-	(insert "\n"))
+	     cont '(expiration size permission)))
+	  (insert "\n\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"))
+	  (insert "\n\n")
+	  (insert (or (cdr (assq 'contents cont))))
+	  (insert "\n")))
        ((eq (car cont) 'multipart)
 	(let* ((type (or (cdr (assq 'type cont)) "mixed"))
 	       (mml-generate-default-type (if (equal type "digest")

      reply	other threads:[~2005-07-27  1:37 UTC|newest]

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

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=b9yiryxuj06.fsf@jpl.org \
    --to=yamaoka@jpl.org \
    /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).