aboutsummaryrefslogtreecommitdiffstats
path: root/mail/mail-callbacks.c
diff options
context:
space:
mode:
Diffstat (limited to 'mail/mail-callbacks.c')
-rw-r--r--mail/mail-callbacks.c104
1 files changed, 85 insertions, 19 deletions
diff --git a/mail/mail-callbacks.c b/mail/mail-callbacks.c
index b825b53ebd..5546e85b60 100644
--- a/mail/mail-callbacks.c
+++ b/mail/mail-callbacks.c
@@ -441,11 +441,13 @@ send_to_url (const char *url)
}
static GList *
-list_add_addresses (GList *list, const CamelInternetAddress *cia, const char *notme)
+list_add_addresses (GList *list, const CamelInternetAddress *cia, const GSList *accounts, const MailConfigAccount **me)
{
- int i;
const char *name, *addr;
+ const GSList *l;
+ gboolean notme;
char *full;
+ int i;
for (i = 0; camel_internet_address_get (cia, i, &name, &addr); i++) {
/* now, we format this, as if for display, but does the composer
@@ -457,16 +459,76 @@ list_add_addresses (GList *list, const CamelInternetAddress *cia, const char *no
/* Here I'll check to see if the cc:'d address is the address
of the sender, and if so, don't add it to the cc: list; this
is to fix Bugzilla bug #455. */
+ notme = TRUE;
+ l = accounts;
+ while (l) {
+ const MailConfigAccount *acnt = l->data;
+
+ if (!strcmp (acnt->id->address, addr)) {
+ notme = FALSE;
+ if (me && !*me)
+ *me = acnt;
+ break;
+ }
+
+ l = l->next;
+ }
- if (notme && strcmp (addr, notme) == 0)
- g_free (full);
- else
+ if (notme)
list = g_list_append (list, full);
+ else
+ g_free (full);
}
return list;
}
+static const MailConfigAccount *
+guess_me (const CamelInternetAddress *to, const CamelInternetAddress *cc, const GSList *accounts)
+{
+ const char *name, *addr;
+ const GSList *l;
+ gboolean notme;
+ char *full;
+ int i;
+
+ if (to) {
+ for (i = 0; camel_internet_address_get (to, i, &name, &addr); i++) {
+ full = camel_internet_address_format_address (name, addr);
+ l = accounts;
+ while (l) {
+ const MailConfigAccount *acnt = l->data;
+
+ if (!strcmp (acnt->id->address, addr)) {
+ notme = FALSE;
+ return acnt;
+ }
+
+ l = l->next;
+ }
+ }
+ }
+
+ if (cc) {
+ for (i = 0; camel_internet_address_get (cc, i, &name, &addr); i++) {
+ full = camel_internet_address_format_address (name, addr);
+ l = accounts;
+ while (l) {
+ const MailConfigAccount *acnt = l->data;
+
+ if (!strcmp (acnt->id->address, addr)) {
+ notme = FALSE;
+ return acnt;
+ }
+
+ l = l->next;
+ }
+ }
+ }
+
+ return NULL;
+}
+
static void
free_recipients (GList *list)
{
@@ -480,14 +542,16 @@ free_recipients (GList *list)
static EMsgComposer *
mail_generate_reply (CamelMimeMessage *message, gboolean to_all)
{
- char *text, *subject, *date_str;
- EMsgComposer *composer;
- const char *message_id, *references;
+ const CamelInternetAddress *reply_to, *sender, *to_addrs, *cc_addrs;
const char *name = NULL, *address = NULL;
- GList *to = NULL, *cc = NULL;
+ const char *message_id, *references;
+ char *text, *subject, *date_str;
+ const MailConfigAccount *me = NULL;
const MailConfigIdentity *id;
+ const GSList *accounts = NULL;
+ GList *to = NULL, *cc = NULL;
+ EMsgComposer *composer;
gchar *sig_file = NULL;
- const CamelInternetAddress *reply_to, *sender;
time_t date;
int offset;
@@ -514,20 +578,22 @@ mail_generate_reply (CamelMimeMessage *message, gboolean to_all)
}
/* Set the recipients */
+ accounts = mail_config_get_accounts ();
+
reply_to = camel_mime_message_get_reply_to (message);
if (!reply_to)
reply_to = camel_mime_message_get_from (message);
if (reply_to)
to = g_list_append (to, camel_address_format (CAMEL_ADDRESS (reply_to)));
+ to_addrs = camel_mime_message_get_recipients (message, CAMEL_RECIPIENT_TYPE_TO);
+ cc_addrs = camel_mime_message_get_recipients (message, CAMEL_RECIPIENT_TYPE_CC);
+
if (to_all) {
- cc = list_add_addresses (cc,
- camel_mime_message_get_recipients (message, CAMEL_RECIPIENT_TYPE_TO),
- id->address);
- cc = list_add_addresses (cc,
- camel_mime_message_get_recipients (message, CAMEL_RECIPIENT_TYPE_CC),
- id->address);
-
+ cc = list_add_addresses (cc, to_addrs, accounts, &me);
+ cc = list_add_addresses (cc, cc_addrs, accounts, me ? NULL : &me);
+ } else {
+ me = guess_me (to_addrs, cc_addrs, accounts);
}
/* Set the subject of the new message. */
@@ -541,7 +607,7 @@ mail_generate_reply (CamelMimeMessage *message, gboolean to_all)
subject = g_strdup_printf ("Re: %s", subject);
}
- e_msg_composer_set_headers (composer, to, cc, NULL, subject);
+ e_msg_composer_set_headers (composer, me ? me->name : NULL, to, cc, NULL, subject);
free_recipients (to);
free_recipients (cc);
g_free (subject);
@@ -642,7 +708,7 @@ forward_get_composer (const char *subject)
GTK_SIGNAL_FUNC (composer_send_cb), NULL);
gtk_signal_connect (GTK_OBJECT (composer), "postpone",
GTK_SIGNAL_FUNC (composer_postpone_cb), NULL);
- e_msg_composer_set_headers(composer, NULL, NULL, NULL, subject);
+ e_msg_composer_set_headers (composer, account->name, NULL, NULL, NULL, subject);
} else {
g_warning("Could not create composer");
}