summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--man/mmime.112
-rw-r--r--mmime.c22
2 files changed, 27 insertions, 7 deletions
diff --git a/man/mmime.1 b/man/mmime.1
index c772166..abca61d 100644
--- a/man/mmime.1
+++ b/man/mmime.1
@@ -21,12 +21,18 @@ mail from standard input,
 extending, wrapping, and encoding the header as neccessary,
 and replacing body lines looking like
 .Pp
-.D1 Li # Ns Ar type Pa filename
+.D1 Li # Ns Ar content Ns Li / Ns Ar type Ns Oo Ns Li # Ns Ar content-disposition Oc Pa path Ns Oo Li > Ns Ar filename Oc
 .Pp
 with a MIME part having Content-Type
-.Ar type
+.Ar content/type
 consisting of the contents of
-.Pa filename .
+.Pa path .
+.Ar content-disposition
+is optional and defaults to
+.Sq attachment .
+.Ar filename
+is optional and defaults to the basename of
+.Ar path .
 .Pp
 The options are as follows:
 .Bl -tag -width Ds
diff --git a/mmime.c b/mmime.c
index 0dbadfb..e8f58da 100644
--- a/mmime.c
+++ b/mmime.c
@@ -115,7 +115,7 @@ basenam(const char *s)
 }
 
 static void
-gen_attachment(const char *filename)
+gen_attachment(const char *filename, char *content_disposition)
 {
 	const char *s = filename;
 	int quote = 0;
@@ -128,12 +128,12 @@ gen_attachment(const char *filename)
 	}
 
 	// filename SHOULD be an atom if possible
-	printf("Content-Disposition: attachment; filename=%s%s%s\n",
+	printf("Content-Disposition: %s; filename=%s%s%s\n", content_disposition,
 	    quote ? "\"" : "", filename, quote ? "\"" : "");
 	return;
 
 rfc2231:
-	printf("Content-Disposition: attachment");
+	printf("Content-Disposition: %s", content_disposition);
 	int i = 0;
 	int d = 0;
 
@@ -162,6 +162,20 @@ gen_file(char *file, char *ct)
 	uint8_t *content;
 	off_t size;
 
+	char *cd = "attachment";
+	char *s = strchr(ct, '#');
+	if (s) {
+		*s = 0;
+		cd = s + 1;
+	}
+
+	const char *filename = basenam(file);
+	s = strchr(file, '>');
+	if (s) {
+		*s = 0;
+		filename = s + 1;
+	}
+
 	int r = slurp(file, (char **)&content, &size);
 	if (r != 0) {
 		fprintf(stderr, "mmime: error attaching file '%s': %s\n",
@@ -191,7 +205,7 @@ gen_file(char *file, char *ct)
 			bithigh++;
 	}
 
-	gen_attachment(basenam(file));
+	gen_attachment(filename, cd);
 
 	if (bitlow == 0 && bithigh == 0 &&
 	    maxlinelen <= 78 && content[size-1] == '\n') {