aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--camel/ChangeLog9
-rw-r--r--camel/providers/sendmail/camel-sendmail-transport.c45
-rw-r--r--camel/providers/smtp/camel-smtp-transport.c22
3 files changed, 62 insertions, 14 deletions
diff --git a/camel/ChangeLog b/camel/ChangeLog
index 63ef0afb14..1b1423531d 100644
--- a/camel/ChangeLog
+++ b/camel/ChangeLog
@@ -1,3 +1,12 @@
+2003-02-22 Jeffrey Stedfast <fejj@ximian.com>
+
+ * providers/smtp/camel-smtp-transport.c (smtp_data): Remove all
+ Bcc headers before sending to the smtp server.
+
+ * providers/sendmail/camel-sendmail-transport.c
+ (sendmail_send_to): Remove all Bcc headers before sending to
+ sendmail.
+
2003-02-20 Jeffrey Stedfast <fejj@ximian.com>
* camel.c (camel_init): Call camel_iconv_init().
diff --git a/camel/providers/sendmail/camel-sendmail-transport.c b/camel/providers/sendmail/camel-sendmail-transport.c
index 1af237f239..58993da96d 100644
--- a/camel/providers/sendmail/camel-sendmail-transport.c
+++ b/camel/providers/sendmail/camel-sendmail-transport.c
@@ -87,10 +87,12 @@ sendmail_send_to (CamelTransport *transport, CamelMimeMessage *message,
{
const char *from_addr, *addr, **argv;
int i, len, fd[2], nullfd, wstat;
+ struct _header_raw *header;
+ GSList *n, *bcc = NULL;
sigset_t mask, omask;
CamelStream *out;
pid_t pid;
-
+
if (!camel_internet_address_get (CAMEL_INTERNET_ADDRESS (from), 0, NULL, &from_addr))
return FALSE;
@@ -115,12 +117,26 @@ sendmail_send_to (CamelTransport *transport, CamelMimeMessage *message,
argv[i + 5] = NULL;
+ /* copy and remove the bcc headers */
+ header = CAMEL_MIME_PART (message)->headers;
+ while (header) {
+ if (!strcasecmp (header->name, "Bcc"))
+ bcc = g_slist_append (bcc, g_strdup (header->value));
+ header = header->next;
+ }
+
+ n = bcc;
+ while (n) {
+ camel_medium_remove_header (CAMEL_MEDIUM (message), "Bcc");
+ n = n->next;
+ }
+
if (pipe (fd) == -1) {
camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
_("Could not create pipe to sendmail: "
"%s: mail not sent"),
g_strerror (errno));
- return FALSE;
+ goto exception;
}
/* Block SIGCHLD so the calling application doesn't notice
@@ -139,7 +155,8 @@ sendmail_send_to (CamelTransport *transport, CamelMimeMessage *message,
g_strerror (errno));
sigprocmask (SIG_SETMASK, &omask, NULL);
g_free (argv);
- return FALSE;
+
+ goto exception;
case 0:
/* Child process */
nullfd = open ("/dev/null", O_RDWR);
@@ -170,7 +187,7 @@ sendmail_send_to (CamelTransport *transport, CamelMimeMessage *message,
sigprocmask (SIG_SETMASK, &omask, NULL);
- return FALSE;
+ goto exception;
}
camel_object_unref (CAMEL_OBJECT (out));
@@ -181,6 +198,15 @@ sendmail_send_to (CamelTransport *transport, CamelMimeMessage *message,
sigprocmask (SIG_SETMASK, &omask, NULL);
+ /* add the bcc headers back */
+ while (bcc) {
+ n = bcc->next;
+ camel_medium_add_header (CAMEL_MEDIUM (message), "Bcc", bcc->data);
+ g_free (bcc->data);
+ g_slist_free1 (bcc);
+ bcc = n;
+ }
+
if (!WIFEXITED (wstat)) {
camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
_("sendmail exited with signal %s: "
@@ -203,6 +229,17 @@ sendmail_send_to (CamelTransport *transport, CamelMimeMessage *message,
}
return TRUE;
+
+ exception:
+
+ /* add the bcc headers back */
+ while (bcc) {
+ n = bcc->next;
+ camel_medium_add_header (CAMEL_MEDIUM (message), "Bcc", bcc->data);
+ g_free (bcc->data);
+ g_slist_free1 (bcc);
+ bcc = n;
+ }
}
static char *
diff --git a/camel/providers/smtp/camel-smtp-transport.c b/camel/providers/smtp/camel-smtp-transport.c
index 6361dcd7a8..561ccbc4c5 100644
--- a/camel/providers/smtp/camel-smtp-transport.c
+++ b/camel/providers/smtp/camel-smtp-transport.c
@@ -1226,7 +1226,7 @@ smtp_data (CamelSmtpTransport *transport, CamelMimeMessage *message, gboolean ha
CamelStreamFilter *filtered_stream;
CamelMimeFilter *crlffilter;
struct _header_raw *header;
- GSList *h, *bcc = NULL;
+ GSList *n, *bcc = NULL;
int ret;
/* if the message contains 8bit/binary mime parts and the server
@@ -1290,20 +1290,22 @@ smtp_data (CamelSmtpTransport *transport, CamelMimeMessage *message, gboolean ha
header = header->next;
}
- camel_medium_remove_header (CAMEL_MEDIUM (message), "Bcc");
+ n = bcc;
+ while (n) {
+ camel_medium_remove_header (CAMEL_MEDIUM (message), "Bcc");
+ n = n->next;
+ }
/* write the message */
ret = camel_data_wrapper_write_to_stream (CAMEL_DATA_WRAPPER (message), CAMEL_STREAM (filtered_stream));
/* add the bcc headers back */
- if (bcc) {
- h = bcc;
- while (h) {
- camel_medium_add_header (CAMEL_MEDIUM (message), "Bcc", h->data);
- g_free (h->data);
- h = h->next;
- }
- g_slist_free (bcc);
+ while (bcc) {
+ n = bcc->next;
+ camel_medium_add_header (CAMEL_MEDIUM (message), "Bcc", bcc->data);
+ g_free (bcc->data);
+ g_slist_free1 (bcc);
+ bcc = n;
}
if (ret == -1) {