diff options
Diffstat (limited to 'mailutils')
-rw-r--r-- | mailutils/mail.c | 2 | ||||
-rw-r--r-- | mailutils/mail.h | 7 | ||||
-rw-r--r-- | mailutils/makemime.c | 34 | ||||
-rw-r--r-- | mailutils/reformime.c | 1 | ||||
-rw-r--r-- | mailutils/sendmail.c | 22 |
5 files changed, 41 insertions, 25 deletions
diff --git a/mailutils/mail.c b/mailutils/mail.c index f5260d9db..199f64407 100644 --- a/mailutils/mail.c +++ b/mailutils/mail.c @@ -119,7 +119,7 @@ static char* FAST_FUNC parse_url(char *url, char **user, char **pass) void FAST_FUNC encode_base64(char *fname, const char *text, const char *eol) { enum { - SRC_BUF_SIZE = 45, /* This *MUST* be a multiple of 3 */ + SRC_BUF_SIZE = 57, /* This *MUST* be a multiple of 3 */ DST_BUF_SIZE = 4 * ((SRC_BUF_SIZE + 2) / 3), }; #define src_buf text diff --git a/mailutils/mail.h b/mailutils/mail.h index d1d783055..fa0c5b378 100644 --- a/mailutils/mail.h +++ b/mailutils/mail.h @@ -16,22 +16,15 @@ struct globals { char *pass; FILE *fp0; // initial stdin char *opt_charset; - char *content_type; }; #define G (*ptr_to_globals) #define timeout (G.timeout ) #define verbose (G.verbose ) #define opts (G.opts ) -//#define user (G.user ) -//#define pass (G.pass ) -//#define fp0 (G.fp0 ) -//#define opt_charset (G.opt_charset) -//#define content_type (G.content_type) #define INIT_G() do { \ SET_PTR_TO_GLOBALS(xzalloc(sizeof(G))); \ G.opt_charset = (char *)CONFIG_FEATURE_MIME_CHARSET; \ - G.content_type = (char *)"text/plain"; \ } while (0) //char FAST_FUNC *parse_url(char *url, char **user, char **pass); diff --git a/mailutils/makemime.c b/mailutils/makemime.c index a9ff03d03..4b07e54de 100644 --- a/mailutils/makemime.c +++ b/mailutils/makemime.c @@ -1,7 +1,6 @@ /* vi: set sw=4 ts=4: */ /* * makemime: create MIME-encoded message - * reformime: parse MIME-encoded message * * Copyright (C) 2008 by Vladimir Dronnikov <dronnikov@gmail.com> * @@ -135,19 +134,42 @@ Content-Transfer-Encoding: 7bit //usage: "\n -o FILE Output. Default: stdout" //usage: "\n -a HDR Add header. Examples:" //usage: "\n \"From: user@host.org\", \"Date: `date -R`\"" -//usage: "\n -c CT Content type. Default: text/plain" +//usage: "\n -c CT Content type. Default: application/octet-stream" //usage: "\n -C CS Charset. Default: " CONFIG_FEATURE_MIME_CHARSET /* //usage: "\n -e ENC Transfer encoding. Ignored. base64 is assumed" */ //usage: "\n" //usage: "\nOther options are silently ignored" +/* + * -c [Content-Type] should create just one MIME section + * with "Content-Type:", "Content-Transfer-Encoding:", and HDR from "-a HDR". + * NB: without "Content-Disposition:" auto-added, unlike we do now + * NB2: -c has *optional* param which nevertheless _can_ be specified after a space :( + * + * -m [multipart/mixed] should create multipart MIME section + * with "Content-Type:", "Content-Transfer-Encoding:", and HDR from "-a HDR", + * and add FILE to it _verbatim_: + * HEADERS + * + * --=_1_1321709112_1605 + * FILE_CONTENTS + * --=_1_1321709112_1605 + * without any encoding of FILE_CONTENTS. (Basically, it expects that FILE + * is the result of "makemime -c"). + * + * -j MULTIPART_FILE1 SINGLE_FILE2 should output MULTIPART_FILE1 + SINGLE_FILE2 + * + * Our current behavior is a mutant "-m + -c + -j" one: we create multipart MIME + * and we put "-c" encoded FILEs into many multipart sections. + */ + int makemime_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; int makemime_main(int argc UNUSED_PARAM, char **argv) { llist_t *opt_headers = NULL, *l; const char *opt_output; + const char *content_type = "application/octet-stream"; #define boundary opt_output - enum { OPT_c = 1 << 0, // create (non-multipart) section OPT_e = 1 << 1, // Content-Transfer-Encoding. Ignored. Assumed base64 @@ -164,8 +186,8 @@ int makemime_main(int argc UNUSED_PARAM, char **argv) // parse options opt_complementary = "a::"; opts = getopt32(argv, - "c:e:o:C:N:a:", //:m:j:", - &G.content_type, NULL, &opt_output, &G.opt_charset, NULL, &opt_headers //, NULL, NULL + "c:e:o:C:N:a:", // "m:j:", + &content_type, NULL, &opt_output, &G.opt_charset, NULL, &opt_headers //, NULL, NULL ); //argc -= optind; argv += optind; @@ -202,7 +224,7 @@ int makemime_main(int argc UNUSED_PARAM, char **argv) "Content-Disposition: inline; filename=\"%s\"\n" "Content-Transfer-Encoding: base64\n" , boundary - , G.content_type + , content_type , G.opt_charset , bb_get_last_path_component_strip(*argv) ); diff --git a/mailutils/reformime.c b/mailutils/reformime.c index 5e28ef729..8e7d455f6 100644 --- a/mailutils/reformime.c +++ b/mailutils/reformime.c @@ -1,6 +1,5 @@ /* vi: set sw=4 ts=4: */ /* - * makemime: create MIME-encoded message * reformime: parse MIME-encoded message * * Copyright (C) 2008 by Vladimir Dronnikov <dronnikov@gmail.com> diff --git a/mailutils/sendmail.c b/mailutils/sendmail.c index dbd491002..aa381c60f 100644 --- a/mailutils/sendmail.c +++ b/mailutils/sendmail.c @@ -281,17 +281,19 @@ int sendmail_main(int argc UNUSED_PARAM, char **argv) // analyze headers // To: or Cc: headers add recipients - if (0 == strncasecmp("To:", s, 3) || 0 == strncasecmp("Bcc:" + 1, s, 3)) { - rcptto(sane_address(s+3)); - goto addheader; + if (opts & OPT_t) { + if (0 == strncasecmp("To:", s, 3) || 0 == strncasecmp("Bcc:" + 1, s, 3)) { + rcptto(sane_address(s+3)); + goto addheader; + } + // Bcc: header adds blind copy (hidden) recipient + if (0 == strncasecmp("Bcc:", s, 4)) { + rcptto(sane_address(s+4)); + free(s); + continue; // N.B. Bcc: vanishes from headers! + } } - // Bcc: header adds blind copy (hidden) recipient - if (0 == strncasecmp("Bcc:", s, 4)) { - rcptto(sane_address(s+4)); - free(s); - // N.B. Bcc: vanishes from headers! - } else - if (strchr(s, ':') || (list && skip_whitespace(s) != s)) { + if (strchr(s, ':') || (list && isspace(s[0]))) { // other headers go verbatim // N.B. RFC2822 2.2.3 "Long Header Fields" allows for headers to occupy several lines. // Continuation is denoted by prefixing additional lines with whitespace(s). |