diff options
author | Sergey Poznyakoff <gray@gnu.org.ua> | 2006-12-29 13:12:52 +0000 |
---|---|---|
committer | Sergey Poznyakoff <gray@gnu.org.ua> | 2006-12-29 13:12:52 +0000 |
commit | 956a3c65217d28de4ba7901906ce8f11277486a2 (patch) | |
tree | f8530968cda1174f6a4de5bdad325dac337cb9f6 /mail | |
parent | 9740641b12bb7756217f998a6d27cf6b5f029701 (diff) | |
download | mailutils-956a3c65217d28de4ba7901906ce8f11277486a2.tar.gz mailutils-956a3c65217d28de4ba7901906ce8f11277486a2.tar.bz2 |
Sent empty messages only if nullbody is set
Diffstat (limited to 'mail')
-rw-r--r-- | mail/send.c | 202 |
1 files changed, 113 insertions, 89 deletions
diff --git a/mail/send.c b/mail/send.c index 027fdc65c..0e2970834 100644 --- a/mail/send.c +++ b/mail/send.c @@ -307,6 +307,43 @@ compose_destroy (compose_env_t * env) } } +static int +fill_body (mu_message_t msg, FILE *file) +{ + mu_body_t body = NULL; + mu_stream_t stream = NULL; + off_t offset = 0; + char *buf = NULL; + size_t n = 0; + mu_message_get_body (msg, &body); + mu_body_get_stream (body, &stream); + + while (getline (&buf, &n, file) >= 0) + { + size_t len = strlen (buf); + mu_stream_write (stream, buf, len, offset, &n); + offset += len; + } + + if (buf) + free (buf); + + if (offset == 0) + { + if (util_getenv (NULL, "nullbody", Mail_env_boolean, 0) == 0) + { + char *str; + if (util_getenv (&str, "nullbodymsg", Mail_env_string, 0) == 0) + util_error ("%s\n", _(str)); + } + else + return 1; + } + + return 0; +} + + /* mail_send0(): shared between mail_send() and mail_reply(); If the variable "record" is set, the outgoing message is @@ -492,123 +529,110 @@ mail_send0 (compose_env_t * env, int save_to) { mu_mailer_t mailer; mu_message_t msg = NULL; - + int rc; + mu_message_create (&msg, NULL); mu_message_set_header (msg, env->header, NULL); /* Fill the body. */ - { - mu_body_t body = NULL; - mu_stream_t stream = NULL; - off_t offset = 0; - char *buf = NULL; - size_t n = 0; - mu_message_get_body (msg, &body); - mu_body_get_stream (body, &stream); - while (getline (&buf, &n, file) >= 0) - { - size_t len = strlen (buf); - mu_stream_write (stream, buf, len, offset, &n); - offset += len; - } - - if (offset == 0) - util_error (_("Null message body; hope that's ok\n")); - if (buf) - free (buf); - } - + rc = fill_body (msg, file); fclose (file); - /* Save outgoing message */ - if (save_to) + if (rc == 0) { - char *tmp = compose_header_get (env, MU_HEADER_TO, NULL); - mu_address_t addr = NULL; - - mu_address_create (&addr, tmp); - mu_address_aget_email (addr, 1, &savefile); - mu_address_destroy (&addr); - if (savefile) + /* Save outgoing message */ + if (save_to) { - char *p = strchr (savefile, '@'); - if (p) - *p = 0; + char *tmp = compose_header_get (env, MU_HEADER_TO, NULL); + mu_address_t addr = NULL; + + mu_address_create (&addr, tmp); + mu_address_aget_email (addr, 1, &savefile); + mu_address_destroy (&addr); + if (savefile) + { + char *p = strchr (savefile, '@'); + if (p) + *p = 0; + } } - } - util_save_outgoing (msg, savefile); - if (savefile) - free (savefile); + util_save_outgoing (msg, savefile); + if (savefile) + free (savefile); - /* Check if we need to save the message to files or pipes. */ - if (env->outfiles) - { - int i; - for (i = 0; i < env->nfiles; i++) + /* Check if we need to save the message to files or pipes. */ + if (env->outfiles) { - /* Pipe to a cmd. */ - if (env->outfiles[i][0] == '|') - msg_to_pipe (&(env->outfiles[i][1]), msg); - /* Save to a file. */ - else + int i; + for (i = 0; i < env->nfiles; i++) { - int status; - mu_mailbox_t mbx = NULL; - status = mu_mailbox_create_default (&mbx, env->outfiles[i]); - if (status == 0) + /* Pipe to a cmd. */ + if (env->outfiles[i][0] == '|') + msg_to_pipe (&(env->outfiles[i][1]), msg); + /* Save to a file. */ + else { - status = mu_mailbox_open (mbx, MU_STREAM_WRITE - | MU_STREAM_CREAT); + int status; + mu_mailbox_t mbx = NULL; + status = mu_mailbox_create_default (&mbx, + env->outfiles[i]); if (status == 0) { - status = mu_mailbox_append_message (mbx, msg); - if (status) - util_error (_("Cannot append message: %s"), - mu_strerror (status)); - mu_mailbox_close (mbx); + status = mu_mailbox_open (mbx, MU_STREAM_WRITE + | MU_STREAM_CREAT); + if (status == 0) + { + status = mu_mailbox_append_message (mbx, msg); + if (status) + util_error (_("Cannot append message: %s"), + mu_strerror (status)); + mu_mailbox_close (mbx); + } + mu_mailbox_destroy (&mbx); } - mu_mailbox_destroy (&mbx); + if (status) + util_error (_("Cannot create mailbox %s: %s"), + env->outfiles[i], mu_strerror (status)); } - if (status) - util_error (_("Cannot create mailbox %s: %s"), - env->outfiles[i], mu_strerror (status)); } } - } - /* Do we need to Send the message on the wire? */ - if (compose_header_get (env, MU_HEADER_TO, NULL) - || compose_header_get (env, MU_HEADER_CC, NULL) - || compose_header_get (env, MU_HEADER_BCC, NULL)) - { - char *sendmail; - if (util_getenv (&sendmail, "sendmail", Mail_env_string, 0) == 0) + /* Do we need to Send the message on the wire? */ + if (compose_header_get (env, MU_HEADER_TO, NULL) + || compose_header_get (env, MU_HEADER_CC, NULL) + || compose_header_get (env, MU_HEADER_BCC, NULL)) { - int status = mu_mailer_create (&mailer, sendmail); - if (status == 0) + char *sendmail; + if (util_getenv (&sendmail, "sendmail", Mail_env_string, 0) + == 0) { - if (util_getenv (NULL, "verbose", Mail_env_boolean, 0) - == 0) - { - mu_debug_t debug = NULL; - mu_mailer_get_debug (mailer, &debug); - mu_debug_set_level (debug, - MU_DEBUG_TRACE | MU_DEBUG_PROT); - } - status = mu_mailer_open (mailer, MU_STREAM_RDWR); + int status = mu_mailer_create (&mailer, sendmail); if (status == 0) { - mu_mailer_send_message (mailer, msg, NULL, NULL); - mu_mailer_close (mailer); + if (util_getenv (NULL, "verbose", Mail_env_boolean, 0) + == 0) + { + mu_debug_t debug = NULL; + mu_mailer_get_debug (mailer, &debug); + mu_debug_set_level (debug, + MU_DEBUG_TRACE | + MU_DEBUG_PROT); + } + status = mu_mailer_open (mailer, MU_STREAM_RDWR); + if (status == 0) + { + mu_mailer_send_message (mailer, msg, NULL, NULL); + mu_mailer_close (mailer); + } + mu_mailer_destroy (&mailer); } - mu_mailer_destroy (&mailer); + if (status != 0) + msg_to_pipe (sendmail, msg); } - if (status != 0) - msg_to_pipe (sendmail, msg); + else + util_error (_("Variable sendmail not set: no mailer")); } - else - util_error (_("Variable sendmail not set: no mailer")); } mu_message_destroy (&msg, NULL); remove (filename); |