[gmime] Fixed g_mime_message_get_reply_to/sender to return InternetAddressList



commit a1437caf852803135ff3faabbe40e9bbae19595a
Author: Jeffrey Stedfast <jestedfa microsoft com>
Date:   Tue Jan 31 21:25:56 2017 -0500

    Fixed g_mime_message_get_reply_to/sender to return InternetAddressList
    
    This patch also changes get_sender() to return the value of the Sender
    header rather than the From header. A new g_mime_message_get_from()
    has been added to return the value of the From header.
    
    Since these methods now return an InternetAddressList, there is no
    need for the set_reply_to() or set_sender() methods.

 gmime/gmime-message.c |  204 +++++++++++++++++++++++-------------------------
 gmime/gmime-message.h |   15 ++--
 tests/test-mbox.c     |    7 +-
 tests/test-pgpmime.c  |   46 +++++++++---
 tests/test-smime.c    |   46 +++++++++---
 5 files changed, 178 insertions(+), 140 deletions(-)
---
diff --git a/gmime/gmime-message.c b/gmime/gmime-message.c
index 3544d2a..e81ef63 100644
--- a/gmime/gmime-message.c
+++ b/gmime/gmime-message.c
@@ -84,6 +84,9 @@ static ssize_t write_received (GMimeStream *stream, const char *name, const char
 static ssize_t write_subject (GMimeStream *stream, const char *name, const char *value);
 static ssize_t write_msgid (GMimeStream *stream, const char *name, const char *value);
 
+static void reply_to_changed (InternetAddressList *list, gpointer args, GMimeMessage *message);
+static void sender_changed (InternetAddressList *list, gpointer args, GMimeMessage *message);
+static void from_changed (InternetAddressList *list, gpointer args, GMimeMessage *message);
 static void to_list_changed (InternetAddressList *list, gpointer args, GMimeMessage *message);
 static void cc_list_changed (InternetAddressList *list, gpointer args, GMimeMessage *message);
 static void bcc_list_changed (InternetAddressList *list, gpointer args, GMimeMessage *message);
@@ -207,14 +210,19 @@ g_mime_message_init (GMimeMessage *message, GMimeMessageClass *klass)
        GMimeHeaderList *headers = ((GMimeObject *) message)->headers;
        guint i;
        
-       message->from = NULL;
-       message->reply_to = NULL;
        message->recipients = g_new (InternetAddressList *, N_RECIPIENT_TYPES);
-       message->subject = NULL;
-       message->date = 0;
-       message->tz_offset = 0;
+       message->reply_to = internet_address_list_new ();
+       message->sender = internet_address_list_new ();
+       message->from = internet_address_list_new ();
        message->message_id = NULL;
        message->mime_part = NULL;
+       message->subject = NULL;
+       message->tz_offset = 0;
+       message->date = 0;
+       
+       g_mime_event_add (message->reply_to->priv, (GMimeEventCallback) reply_to_changed, message);
+       g_mime_event_add (message->sender->priv, (GMimeEventCallback) sender_changed, message);
+       g_mime_event_add (message->from->priv, (GMimeEventCallback) from_changed, message);
        
        /* initialize recipient lists */
        for (i = 0; i < N_RECIPIENT_TYPES; i++) {
@@ -222,12 +230,14 @@ g_mime_message_init (GMimeMessage *message, GMimeMessageClass *klass)
                connect_changed_event (message, i);
        }
        
+       g_mime_header_list_register_writer (headers, "Reply-To", write_addrspec);
        g_mime_header_list_register_writer (headers, "Sender", write_addrspec);
        g_mime_header_list_register_writer (headers, "From", write_addrspec);
        g_mime_header_list_register_writer (headers, "To", write_addrspec);
        g_mime_header_list_register_writer (headers, "Cc", write_addrspec);
        g_mime_header_list_register_writer (headers, "Bcc", write_addrspec);
        
+       g_mime_header_list_register_writer (headers, "Resent-Reply-To", write_addrspec);
        g_mime_header_list_register_writer (headers, "Resent-Sender", write_addrspec);
        g_mime_header_list_register_writer (headers, "Resent-From", write_addrspec);
        g_mime_header_list_register_writer (headers, "Resent-To", write_addrspec);
@@ -246,8 +256,13 @@ g_mime_message_finalize (GObject *object)
        GMimeMessage *message = (GMimeMessage *) object;
        guint i;
        
-       g_free (message->from);
-       g_free (message->reply_to);
+       g_mime_event_remove (message->reply_to->priv, (GMimeEventCallback) reply_to_changed, message);
+       g_mime_event_remove (message->sender->priv, (GMimeEventCallback) sender_changed, message);
+       g_mime_event_remove (message->from->priv, (GMimeEventCallback) from_changed, message);
+       
+       g_object_unref (message->reply_to);
+       g_object_unref (message->sender);
+       g_object_unref (message->from);
        
        /* disconnect changed handlers */
        for (i = 0; i < N_RECIPIENT_TYPES; i++) {
@@ -256,10 +271,8 @@ g_mime_message_finalize (GObject *object)
        }
        
        g_free (message->recipients);
-       
-       g_free (message->subject);
-       
        g_free (message->message_id);
+       g_free (message->subject);
        
        /* unref child mime part */
        if (message->mime_part)
@@ -705,6 +718,7 @@ write_addrspec (GMimeStream *stream, const char *name, const char *value)
 }
 
 enum {
+       HEADER_SENDER,
        HEADER_FROM,
        HEADER_REPLY_TO,
        HEADER_TO,
@@ -718,6 +732,7 @@ enum {
 };
 
 static const char *message_headers[] = {
+       "Sender",
        "From",
        "Reply-To",
        "To",
@@ -770,23 +785,32 @@ process_header (GMimeObject *object, int action, const char *header, const char
        }
        
        switch (i) {
+       case HEADER_SENDER:
+               g_mime_event_block (message->sender->priv, (GMimeEventCallback) sender_changed, message);
+               internet_address_list_clear (message->sender);
+               if ((addrlist = internet_address_list_parse_string (value))) {
+                       internet_address_list_append (message->sender, addrlist);
+                       g_object_unref (addrlist);
+               }
+               g_mime_event_unblock (message->sender->priv, (GMimeEventCallback) sender_changed, message);
+               break;
        case HEADER_FROM:
-               g_free (message->from);
+               g_mime_event_block (message->from->priv, (GMimeEventCallback) from_changed, message);
+               internet_address_list_clear (message->from);
                if ((addrlist = internet_address_list_parse_string (value))) {
-                       message->from = internet_address_list_to_string (addrlist, FALSE);
+                       internet_address_list_append (message->from, addrlist);
                        g_object_unref (addrlist);
-               } else {
-                       message->from = NULL;
                }
+               g_mime_event_unblock (message->from->priv, (GMimeEventCallback) from_changed, message);
                break;
        case HEADER_REPLY_TO:
-               g_free (message->reply_to);
+               g_mime_event_block (message->reply_to->priv, (GMimeEventCallback) reply_to_changed, message);
+               internet_address_list_clear (message->reply_to);
                if ((addrlist = internet_address_list_parse_string (value))) {
-                       message->reply_to = internet_address_list_to_string (addrlist, FALSE);
+                       internet_address_list_append (message->reply_to, addrlist);
                        g_object_unref (addrlist);
-               } else {
-                       message->reply_to = NULL;
                }
+               g_mime_event_unblock (message->reply_to->priv, (GMimeEventCallback) reply_to_changed, 
message);
                break;
        case HEADER_TO:
                block_changed_event (message, GMIME_RECIPIENT_TYPE_TO);
@@ -923,13 +947,20 @@ message_remove_header (GMimeObject *object, const char *header)
        }
        
        switch (i) {
+       case HEADER_SENDER:
+               g_mime_event_block (message->sender->priv, (GMimeEventCallback) sender_changed, message);
+               internet_address_list_clear (message->sender);
+               g_mime_event_unblock (message->sender->priv, (GMimeEventCallback) sender_changed, message);
+               break;
        case HEADER_FROM:
-               g_free (message->from);
-               message->from = NULL;
+               g_mime_event_block (message->from->priv, (GMimeEventCallback) from_changed, message);
+               internet_address_list_clear (message->from);
+               g_mime_event_unblock (message->from->priv, (GMimeEventCallback) from_changed, message);
                break;
        case HEADER_REPLY_TO:
-               g_free (message->reply_to);
-               message->reply_to = NULL;
+               g_mime_event_block (message->reply_to->priv, (GMimeEventCallback) reply_to_changed, message);
+               internet_address_list_clear (message->reply_to);
+               g_mime_event_unblock (message->reply_to->priv, (GMimeEventCallback) reply_to_changed, 
message);
                break;
        case HEADER_TO:
                type = GMIME_RECIPIENT_TYPE_TO;
@@ -1127,92 +1158,36 @@ g_mime_message_new (gboolean pretty_headers)
 
 
 /**
- * g_mime_message_set_sender:
- * @message: A #GMimeMessage
- * @sender: The name and address of the sender
- *
- * Set the sender's name and address on the MIME Message.
- * (ex: "\"Joe Sixpack\" &lt;joe sixpack org&gt;")
- *
- * Note: The @sender string should be the raw encoded email
- * address. It is probably best to use an #InternetAddress to
- * construct and encode this value.
- **/
-void
-g_mime_message_set_sender (GMimeMessage *message, const char *sender)
-{
-       InternetAddressList *addrlist;
-       char *encoded;
-       
-       g_return_if_fail (GMIME_IS_MESSAGE (message));
-       g_return_if_fail (sender != NULL);
-       
-       g_free (message->from);
-       
-       if ((addrlist = internet_address_list_parse_string (sender))) {
-               message->from = internet_address_list_to_string (addrlist, FALSE);
-               encoded = internet_address_list_to_string (addrlist, TRUE);
-               g_mime_header_list_set (GMIME_OBJECT (message)->headers, "From", encoded);
-               g_object_unref (addrlist);
-               g_free (encoded);
-       } else {
-               g_mime_header_list_set (GMIME_OBJECT (message)->headers, "From", "");
-               message->from = NULL;
-       }
-}
-
-
-/**
  * g_mime_message_get_sender:
  * @message: A #GMimeMessage
  *
- * Gets the email address of the sender from @message.
+ * Gets the parsed list of addresses in the Sender header.
  *
- * Returns: the sender's name and address of the @message in a form
- * suitable for display or %NULL if no sender is set. If not %NULL,
- * the returned string will be in UTF-8.
+ * Returns: the parsed list of addresses in the Sender header.
  **/
-const char *
+InternetAddressList *
 g_mime_message_get_sender (GMimeMessage *message)
 {
        g_return_val_if_fail (GMIME_IS_MESSAGE (message), NULL);
        
-       return message->from;
+       return message->sender;
 }
 
 
 /**
- * g_mime_message_set_reply_to:
+ * g_mime_message_get_from:
  * @message: A #GMimeMessage
- * @reply_to: The Reply-To address
  *
- * Set the sender's Reply-To address on the @message.
+ * Gets the parsed list of addresses in the From header.
  *
- * Note: The @reply_to string should be the raw encoded email
- * address. It is probably best to use an #InternetAddress to
- * construct and encode this value.
+ * Returns: the parsed list of addresses in the From header.
  **/
-void
-g_mime_message_set_reply_to (GMimeMessage *message, const char *reply_to)
+InternetAddressList *
+g_mime_message_get_from (GMimeMessage *message)
 {
-       InternetAddressList *addrlist;
-       char *encoded;
-       
-       g_return_if_fail (GMIME_IS_MESSAGE (message));
-       g_return_if_fail (reply_to != NULL);
-       
-       g_free (message->reply_to);
+       g_return_val_if_fail (GMIME_IS_MESSAGE (message), NULL);
        
-       if ((addrlist = internet_address_list_parse_string (reply_to))) {
-               message->reply_to = internet_address_list_to_string (addrlist, FALSE);
-               encoded = internet_address_list_to_string (addrlist, TRUE);
-               g_mime_header_list_set (GMIME_OBJECT (message)->headers, "Reply-To", encoded);
-               g_object_unref (addrlist);
-               g_free (encoded);
-       } else {
-               g_mime_header_list_set (GMIME_OBJECT (message)->headers, "Reply-To", "");
-               message->reply_to = NULL;
-       }
+       return message->from;
 }
 
 
@@ -1220,13 +1195,11 @@ g_mime_message_set_reply_to (GMimeMessage *message, const char *reply_to)
  * g_mime_message_get_reply_to:
  * @message: A #GMimeMessage
  *
- * Gets the Reply-To address from @message.
+ * Gets the parsed list of addresses in the Reply-To header.
  *
- * Returns: the sender's Reply-To address in a form suitable for
- * display or %NULL if no Reply-To address is set. If not %NULL, the
- * returned string will be in UTF-8.
+ * Returns: the parsed list of addresses in the Reply-To header.
  **/
-const char *
+InternetAddressList *
 g_mime_message_get_reply_to (GMimeMessage *message)
 {
        g_return_val_if_fail (GMIME_IS_MESSAGE (message), NULL);
@@ -1236,22 +1209,41 @@ g_mime_message_get_reply_to (GMimeMessage *message)
 
 
 static void
-sync_recipient_header (GMimeMessage *message, GMimeRecipientType type)
+sync_internet_address_list (InternetAddressList *list, GMimeMessage *message, const char *name)
 {
        GMimeObject *object = (GMimeObject *) message;
-       const char *name = recipient_types[type].name;
-       InternetAddressList *list;
        char *string;
        
-       /* sync the specified recipient header */
-       if ((list = g_mime_message_get_recipients (message, type))) {
-               string = internet_address_list_to_string (list, TRUE);
-               g_mime_header_list_set (object->headers, name, string);
-               g_free (string);
-       } else {
-               /* list should never be NULL... */
-               g_mime_header_list_set (object->headers, name, NULL);
-       }
+       string = internet_address_list_to_string (list, TRUE);
+       g_mime_header_list_set (object->headers, name, string);
+       g_free (string);
+}
+
+static void
+reply_to_changed (InternetAddressList *list, gpointer args, GMimeMessage *message)
+{
+       sync_internet_address_list (list, message, "Reply-To");
+}
+
+static void
+sender_changed (InternetAddressList *list, gpointer args, GMimeMessage *message)
+{
+       sync_internet_address_list (list, message, "Sender");
+}
+
+static void
+from_changed (InternetAddressList *list, gpointer args, GMimeMessage *message)
+{
+       sync_internet_address_list (list, message, "From");
+}
+
+static void
+sync_recipient_header (GMimeMessage *message, GMimeRecipientType type)
+{
+       InternetAddressList *list = message->recipients[type];
+       const char *name = recipient_types[type].name;
+       
+       sync_internet_address_list (list, message, name);
 }
 
 static void
diff --git a/gmime/gmime-message.h b/gmime/gmime-message.h
index 703c717..7923d58 100644
--- a/gmime/gmime-message.h
+++ b/gmime/gmime-message.h
@@ -77,11 +77,12 @@ struct _GMimeMessage {
        GMimeObject parent_object;
        
        InternetAddressList **recipients;
+       InternetAddressList *reply_to;
+       InternetAddressList *sender;
+       InternetAddressList *from;
        GMimeObject *mime_part;
        char *message_id;
-       char *reply_to;
        char *subject;
-       char *from;
        
        time_t date;
        int tz_offset;
@@ -97,13 +98,9 @@ GType g_mime_message_get_type (void);
 
 GMimeMessage *g_mime_message_new (gboolean pretty_headers);
 
-void g_mime_message_set_sender (GMimeMessage *message, const char *sender);
-const char *g_mime_message_get_sender (GMimeMessage *message);
-
-void g_mime_message_set_reply_to (GMimeMessage *message, const char *reply_to);
-const char *g_mime_message_get_reply_to (GMimeMessage *message);
-
-void g_mime_message_add_recipient (GMimeMessage *message, GMimeRecipientType type, const char *name, const 
char *addr);
+InternetAddressList *g_mime_message_get_from (GMimeMessage *message);
+InternetAddressList *g_mime_message_get_sender (GMimeMessage *message);
+InternetAddressList *g_mime_message_get_reply_to (GMimeMessage *message);
 InternetAddressList *g_mime_message_get_recipients (GMimeMessage *message, GMimeRecipientType type);
 InternetAddressList *g_mime_message_get_all_recipients (GMimeMessage *message);
 
diff --git a/tests/test-mbox.c b/tests/test-mbox.c
index 276334f..628ec7c 100644
--- a/tests/test-mbox.c
+++ b/tests/test-mbox.c
@@ -94,7 +94,6 @@ test_parser (GMimeParser *parser, GMimeStream *mbox, GMimeStream *summary)
        GMimeMessage *message;
        char *marker, *buf;
        const char *subject;
-       const char *sender;
        int tz_offset;
        int nmsg = 0;
        time_t date;
@@ -117,11 +116,9 @@ test_parser (GMimeParser *parser, GMimeStream *mbox, GMimeStream *summary)
                marker = g_mime_parser_get_from (parser);
                g_mime_stream_printf (summary, "%s\n", marker);
                
-               if ((sender = g_mime_message_get_sender (message)) != NULL) {
-                       list = internet_address_list_parse_string (sender);
+               if ((list = g_mime_message_get_from (message)) != NULL &&
+                   internet_address_list_length (list) > 0) {
                        buf = internet_address_list_to_string (list, FALSE);
-                       g_object_unref (list);
-                       
                        g_mime_stream_printf (summary, "From: %s\n", buf);
                        g_free (buf);
                }
diff --git a/tests/test-pgpmime.c b/tests/test-pgpmime.c
index a64f197..189b391 100644
--- a/tests/test-pgpmime.c
+++ b/tests/test-pgpmime.c
@@ -171,6 +171,8 @@ test_multipart_signed (GMimeCryptoContext *ctx)
        GMimeSignatureList *signatures;
        GMimeMultipartSigned *mps;
        GMimeDataWrapper *content;
+       InternetAddressList *list;
+       InternetAddress *mailbox;
        GMimeMessage *message;
        GMimeStream *stream;
        GMimeParser *parser;
@@ -214,11 +216,22 @@ test_multipart_signed (GMimeCryptoContext *ctx)
        }
        
        message = g_mime_message_new (TRUE);
-       g_mime_message_set_sender (message, "\"Jeffrey Stedfast\" <fejj helixcode com>");
-       g_mime_message_set_reply_to (message, "fejj helixcode com");
-       g_mime_message_add_recipient (message, GMIME_RECIPIENT_TYPE_TO,
-                                     "Federico Mena-Quintero",
-                                     "federico helixcode com");
+       
+       mailbox = internet_address_mailbox_new ("Jeffrey Stedfast", "fejj helixcode com");
+       list = g_mime_message_get_from (message);
+       internet_address_list_add (list, mailbox);
+       g_object_unref (mailbox);
+       
+       mailbox = internet_address_mailbox_new ("Jeffrey Stedfast", "fejj helixcode com");
+       list = g_mime_message_get_reply_to (message);
+       internet_address_list_add (list, mailbox);
+       g_object_unref (mailbox);
+       
+       mailbox = internet_address_mailbox_new ("Federico Mena-Quintero", "federico helixcode com");
+       list = g_mime_message_get_recipients (message, GMIME_RECIPIENT_TYPE_TO);
+       internet_address_list_add (list, mailbox);
+       g_object_unref (mailbox);
+       
        g_mime_message_set_subject (message, "This is a test message");
        g_mime_object_set_header ((GMimeObject *) message, "X-Mailer", "main.c");
        g_mime_message_set_mime_part (message, GMIME_OBJECT (mps));
@@ -267,6 +280,8 @@ create_encrypted_message (GMimeCryptoContext *ctx, gboolean sign,
        GMimeStream *cleartext, *stream;
        GMimeMultipartEncrypted *mpe;
        GMimeDataWrapper *content;
+       InternetAddressList *list;
+       InternetAddress *mailbox;
        GPtrArray *recipients;
        GMimeMessage *message;
        Exception *ex = NULL;
@@ -311,11 +326,22 @@ create_encrypted_message (GMimeCryptoContext *ctx, gboolean sign,
        }
        
        message = g_mime_message_new (TRUE);
-       g_mime_message_set_sender (message, "\"Jeffrey Stedfast\" <fejj helixcode com>");
-       g_mime_message_set_reply_to (message, "fejj helixcode com");
-       g_mime_message_add_recipient (message, GMIME_RECIPIENT_TYPE_TO,
-                                     "Federico Mena-Quintero",
-                                     "federico helixcode com");
+       
+       mailbox = internet_address_mailbox_new ("Jeffrey Stedfast", "fejj helixcode com");
+       list = g_mime_message_get_from (message);
+       internet_address_list_add (list, mailbox);
+       g_object_unref (mailbox);
+       
+       mailbox = internet_address_mailbox_new ("Jeffrey Stedfast", "fejj helixcode com");
+       list = g_mime_message_get_reply_to (message);
+       internet_address_list_add (list, mailbox);
+       g_object_unref (mailbox);
+       
+       mailbox = internet_address_mailbox_new ("Federico Mena-Quintero", "federico helixcode com");
+       list = g_mime_message_get_recipients (message, GMIME_RECIPIENT_TYPE_TO);
+       internet_address_list_add (list, mailbox);
+       g_object_unref (mailbox);
+       
        g_mime_message_set_subject (message, "This is a test message");
        g_mime_object_set_header ((GMimeObject *) message, "X-Mailer", "main.c");
        g_mime_message_set_mime_part (message, GMIME_OBJECT (mpe));
diff --git a/tests/test-smime.c b/tests/test-smime.c
index 6f37d62..10d48ed 100644
--- a/tests/test-smime.c
+++ b/tests/test-smime.c
@@ -172,6 +172,8 @@ test_multipart_signed (GMimeCryptoContext *ctx)
        GMimeSignatureList *signatures;
        GMimeMultipartSigned *mps;
        GMimeDataWrapper *content;
+       InternetAddressList *list;
+       InternetAddress *mailbox;
        GMimeMessage *message;
        GMimeStream *stream;
        GMimeParser *parser;
@@ -215,11 +217,22 @@ test_multipart_signed (GMimeCryptoContext *ctx)
        }
        
        message = g_mime_message_new (TRUE);
-       g_mime_message_set_sender (message, "\"Jeffrey Stedfast\" <fejj helixcode com>");
-       g_mime_message_set_reply_to (message, "fejj helixcode com");
-       g_mime_message_add_recipient (message, GMIME_RECIPIENT_TYPE_TO,
-                                     "Federico Mena-Quintero",
-                                     "federico helixcode com");
+       
+       mailbox = internet_address_mailbox_new ("Jeffrey Stedfast", "fejj helixcode com");
+       list = g_mime_message_get_from (message);
+       internet_address_list_add (list, mailbox);
+       g_object_unref (mailbox);
+       
+       mailbox = internet_address_mailbox_new ("Jeffrey Stedfast", "fejj helixcode com");
+       list = g_mime_message_get_reply_to (message);
+       internet_address_list_add (list, mailbox);
+       g_object_unref (mailbox);
+       
+       mailbox = internet_address_mailbox_new ("Federico Mena-Quintero", "federico helixcode com");
+       list = g_mime_message_get_recipients (message, GMIME_RECIPIENT_TYPE_TO);
+       internet_address_list_add (list, mailbox);
+       g_object_unref (mailbox);
+       
        g_mime_message_set_subject (message, "This is a test message");
        g_mime_object_set_header ((GMimeObject *) message, "X-Mailer", "main.c");
        g_mime_message_set_mime_part (message, GMIME_OBJECT (mps));
@@ -268,6 +281,8 @@ test_multipart_encrypted (GMimeCryptoContext *ctx, gboolean sign)
        GMimeMultipartEncrypted *mpe;
        GMimeDecryptResult *result;
        GMimeDataWrapper *content;
+       InternetAddressList *list;
+       InternetAddress *mailbox;
        GMimeObject *decrypted;
        GPtrArray *recipients;
        GMimeMessage *message;
@@ -315,11 +330,22 @@ test_multipart_encrypted (GMimeCryptoContext *ctx, gboolean sign)
        }
        
        message = g_mime_message_new (TRUE);
-       g_mime_message_set_sender (message, "\"Jeffrey Stedfast\" <fejj helixcode com>");
-       g_mime_message_set_reply_to (message, "fejj helixcode com");
-       g_mime_message_add_recipient (message, GMIME_RECIPIENT_TYPE_TO,
-                                     "Federico Mena-Quintero",
-                                     "federico helixcode com");
+       
+       mailbox = internet_address_mailbox_new ("Jeffrey Stedfast", "fejj helixcode com");
+       list = g_mime_message_get_from (message);
+       internet_address_list_add (list, mailbox);
+       g_object_unref (mailbox);
+       
+       mailbox = internet_address_mailbox_new ("Jeffrey Stedfast", "fejj helixcode com");
+       list = g_mime_message_get_reply_to (message);
+       internet_address_list_add (list, mailbox);
+       g_object_unref (mailbox);
+       
+       mailbox = internet_address_mailbox_new ("Federico Mena-Quintero", "federico helixcode com");
+       list = g_mime_message_get_recipients (message, GMIME_RECIPIENT_TYPE_TO);
+       internet_address_list_add (list, mailbox);
+       g_object_unref (mailbox);
+       
        g_mime_message_set_subject (message, "This is a test message");
        g_mime_object_set_header ((GMimeObject *) message, "X-Mailer", "main.c");
        g_mime_message_set_mime_part (message, GMIME_OBJECT (mpe));


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