[balsa] Fix bug 605807.



commit 7fb5c2147f7e50244c7dce107166271a882acf75
Author: Pawel Salek <pawsa damage localdomain>
Date:   Fri Jan 1 11:31:27 2010 +0100

    Fix bug 605807.

 ChangeLog       |    4 ++++
 libbalsa/send.c |   53 +++++++++++++++++++++++++++++++++++++++--------------
 2 files changed, 43 insertions(+), 14 deletions(-)
---
diff --git a/ChangeLog b/ChangeLog
index 00f0296..955b03f 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2010-01-01  Pawel Salek
+
+	* libbalsa/send.c: Fix bug 605807.
+
 2009-12-30  Pawel Salek
 
 	* configure.in: gtkspell build requires enchant now as well.\
diff --git a/libbalsa/send.c b/libbalsa/send.c
index d3beeec..b8ae03d 100644
--- a/libbalsa/send.c
+++ b/libbalsa/send.c
@@ -1473,6 +1473,24 @@ balsa_send_message_real(SendMessageInfo* info)
 }
 
 #else /* ESMTP */
+static void
+sendmail_add_recipients(GPtrArray *args, InternetAddressList* recipient_list)
+{
+    const InternetAddress *ia;
+    int i;
+    
+    if (recipient_list == NULL)
+	return;
+    
+    for (i = 0; i < internet_address_list_length(recipient_list); i++) {
+        ia = internet_address_list_get_address(recipient_list, i);
+
+	if (INTERNET_ADDRESS_IS_MAILBOX(ia))
+	    g_ptr_array_add(args, INTERNET_ADDRESS_MAILBOX(ia)->addr);
+	else
+	    sendmail_add_recipients(args, INTERNET_ADDRESS_GROUP(ia)->members);
+    }
+}
 
 /* balsa_send_message_real:
    does the actual message sending. 
@@ -1503,29 +1521,36 @@ balsa_send_message_real(SendMessageInfo* info)
     }	
 #endif
 
+
     while ( (mqi = get_msg2send()) != NULL) {
 	GPtrArray *args = g_ptr_array_new();
 	LibBalsaMessage *msg = LIBBALSA_MESSAGE(mqi->orig);
-	InternetAddressList *list;
-	const gchar *mailbox;
+	InternetAddress *ia;
 	gchar *cmd;
 	FILE *sendmail;
 	GMimeStream *out;
 
 	g_ptr_array_add(args, SENDMAIL);
+
+        /* Determine the sender info */
+        if (msg->headers->from
+            && (ia=internet_address_list_get_address(msg->headers->from, 0))) {
+            while (ia && INTERNET_ADDRESS_IS_GROUP (ia))
+                ia = internet_address_list_get_address
+                    (INTERNET_ADDRESS_GROUP (ia)->members, 0);
+
+            if (ia) {
+                g_ptr_array_add(args, "-f");
+                g_ptr_array_add(args, INTERNET_ADDRESS_MAILBOX (ia)->addr);
+            }
+        } 
+
 	g_ptr_array_add(args, "--");
-	for (list = msg->headers->to_list; list; list = list->next) {
-	    mailbox = libbalsa_address_get_mailbox_from_list(list);
-	    g_ptr_array_add(args, (char*)mailbox);
-	}
-	for (list = msg->headers->cc_list; list; list = list->next) {
-	    mailbox = libbalsa_address_get_mailbox_from_list(list);
-	    g_ptr_array_add(args, (char*)mailbox);
-	}
-	for (list = msg->headers->bcc_list; list; list = list->next) {
-	    mailbox = libbalsa_address_get_mailbox_from_list(list);
-	    g_ptr_array_add(args, (char*)mailbox);
-	}
+        
+        sendmail_add_recipients(args, msg->headers->to_list);
+        sendmail_add_recipients(args, msg->headers->cc_list);
+        sendmail_add_recipients(args, msg->headers->bcc_list);
+
 	g_ptr_array_add(args, NULL);
 	cmd = g_strjoinv(" ", (gchar**)args->pdata);
 	g_ptr_array_free(args, FALSE);



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]