mblaze

Unix utilities to deal with Maildir - my mirror
git clone https://pi.duncano.de/git/mblaze.git
Log | Files | Refs | README | COPYING

commit cc7ab258141f91e49d66cde589f26e2e94d9e516
parent 9b8ab19a2be4ed190f722b309022ea6472e7ac15
Author: Leah Neukirchen <leah@vuxu.org>
Date:   Mon, 19 Jun 2017 13:24:49 +0200

mmime: allow setting content-disposition and overriding filename

Diffstat:
man/mmime.1 | 12+++++++++---
mmime.c | 22++++++++++++++++++----
2 files changed, 27 insertions(+), 7 deletions(-)

diff --git 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 @@ -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') {