aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMilan Crha <mcrha@redhat.com>2009-11-10 18:46:41 +0800
committerMilan Crha <mcrha@redhat.com>2009-11-10 18:46:41 +0800
commitb9953ceaed91acfcca24a54240ff51847526e6a8 (patch)
tree46b10672faa374ed0fb072e480d52a1032f2d2a0
parent5beeca1f80c3a618feeeb2c5b7e09cc47b64387d (diff)
downloadgsoc2013-evolution-b9953ceaed91acfcca24a54240ff51847526e6a8.tar
gsoc2013-evolution-b9953ceaed91acfcca24a54240ff51847526e6a8.tar.gz
gsoc2013-evolution-b9953ceaed91acfcca24a54240ff51847526e6a8.tar.bz2
gsoc2013-evolution-b9953ceaed91acfcca24a54240ff51847526e6a8.tar.lz
gsoc2013-evolution-b9953ceaed91acfcca24a54240ff51847526e6a8.tar.xz
gsoc2013-evolution-b9953ceaed91acfcca24a54240ff51847526e6a8.tar.zst
gsoc2013-evolution-b9953ceaed91acfcca24a54240ff51847526e6a8.zip
Bug #250046 - Composer addresses reading fixes
- Check for no addresses properly (in post-to only when shown) - Check for garbage addresses and warn user about those - Use garbage text in To/CC/Bcc fields when user typed them
-rw-r--r--composer/e-msg-composer.c11
-rw-r--r--mail/em-composer-utils.c75
-rw-r--r--mail/mail.error.xml18
3 files changed, 93 insertions, 11 deletions
diff --git a/composer/e-msg-composer.c b/composer/e-msg-composer.c
index c10ef997d4..d079c524a0 100644
--- a/composer/e-msg-composer.c
+++ b/composer/e-msg-composer.c
@@ -418,7 +418,8 @@ set_recipients_from_destv (CamelMimeMessage *msg,
seen_hidden_list = TRUE;
}
- camel_address_decode (CAMEL_ADDRESS (target), text_addr);
+ if (camel_address_decode (CAMEL_ADDRESS (target), text_addr) <= 0)
+ camel_internet_address_add (target, "", text_addr);
}
}
@@ -432,14 +433,16 @@ set_recipients_from_destv (CamelMimeMessage *msg,
seen_hidden_list = TRUE;
}
- camel_address_decode (CAMEL_ADDRESS (target), text_addr);
+ if (camel_address_decode (CAMEL_ADDRESS (target), text_addr) <= 0)
+ camel_internet_address_add (target, "", text_addr);
}
}
for (i = 0; bcc_destv != NULL && bcc_destv[i] != NULL; ++i) {
text_addr = e_destination_get_address (bcc_destv[i]);
if (text_addr && *text_addr) {
- camel_address_decode (CAMEL_ADDRESS (bcc_addr), text_addr);
+ if (camel_address_decode (CAMEL_ADDRESS (bcc_addr), text_addr) <= 0)
+ camel_internet_address_add (bcc_addr, "", text_addr);
}
}
@@ -3967,7 +3970,7 @@ e_msg_composer_is_exiting (EMsgComposer *composer)
void
e_msg_composer_request_close (EMsgComposer *composer)
{
- g_return_val_if_fail (composer != NULL, FALSE);
+ g_return_if_fail (composer != NULL);
composer->priv->application_exiting = TRUE;
}
diff --git a/mail/em-composer-utils.c b/mail/em-composer-utils.c
index 32c30fdb60..44ad930405 100644
--- a/mail/em-composer-utils.c
+++ b/mail/em-composer-utils.c
@@ -279,6 +279,18 @@ composer_send_queued_cb (CamelFolder *folder, CamelMimeMessage *msg, CamelMessag
g_free (send);
}
+static gboolean
+is_group_definition (const gchar *str)
+{
+ const gchar *colon;
+
+ if (!str || !*str)
+ return FALSE;
+
+ colon = strchr (str, ':');
+ return colon > str && strchr (str, ';') > colon;
+}
+
static CamelMimeMessage *
composer_get_message (EMsgComposer *composer, gboolean save_html_object_data)
{
@@ -292,10 +304,11 @@ composer_get_message (EMsgComposer *composer, gboolean save_html_object_data)
GConfClient *gconf;
EAccount *account;
gint i;
- GList *postlist;
EMEvent *eme;
EMEventTargetComposer *target;
EComposerHeaderTable *table;
+ EComposerHeader *post_to_header;
+ GString *invalid_addrs = NULL;
gconf = mail_config_get_gconf_client ();
table = e_msg_composer_get_header_table (composer);
@@ -315,8 +328,35 @@ composer_get_message (EMsgComposer *composer, gboolean save_html_object_data)
const gchar *addr = e_destination_get_address (recipients[i]);
if (addr && addr[0]) {
+ gint len, j;
+
camel_address_decode ((CamelAddress *) cia, addr);
- if (camel_address_length ((CamelAddress *) cia) > 0) {
+ len = camel_address_length ((CamelAddress *) cia);
+
+ if (len > 0) {
+ if (!e_destination_is_evolution_list (recipients[i])) {
+ for (j = 0; j < len; j++) {
+ const gchar *name = NULL, *eml = NULL;
+
+ if (!camel_internet_address_get (cia, j, &name, &eml) ||
+ !eml ||
+ strchr (eml, '@') <= eml) {
+ if (!invalid_addrs)
+ invalid_addrs = g_string_new ("");
+ else
+ g_string_append (invalid_addrs, ", ");
+
+ if (name)
+ g_string_append (invalid_addrs, name);
+ if (eml) {
+ g_string_append (invalid_addrs, name ? " <" : "");
+ g_string_append (invalid_addrs, eml);
+ g_string_append (invalid_addrs, name ? ">" : "");
+ }
+ }
+ }
+ }
+
camel_address_remove ((CamelAddress *) cia, -1);
num++;
if (e_destination_is_evolution_list (recipients[i])
@@ -325,6 +365,15 @@ composer_get_message (EMsgComposer *composer, gboolean save_html_object_data)
} else {
shown++;
}
+ } else if (is_group_definition (addr)) {
+ /* like an address, it will not claim on only-bcc */
+ shown++;
+ num++;
+ } else if (!invalid_addrs) {
+ invalid_addrs = g_string_new (addr);
+ } else {
+ g_string_append (invalid_addrs, ", ");
+ g_string_append (invalid_addrs, addr);
}
}
}
@@ -349,10 +398,15 @@ composer_get_message (EMsgComposer *composer, gboolean save_html_object_data)
camel_object_unref (cia);
- postlist = e_composer_header_table_get_post_to (table);
- num_post = g_list_length(postlist);
- g_list_foreach(postlist, (GFunc)g_free, NULL);
- g_list_free(postlist);
+ post_to_header = e_composer_header_table_get_header (table, E_COMPOSER_HEADER_POST_TO);
+ if (e_composer_header_get_visible (post_to_header)) {
+ GList *postlist;
+
+ postlist = e_composer_header_table_get_post_to (table);
+ num_post = g_list_length (postlist);
+ g_list_foreach (postlist, (GFunc)g_free, NULL);
+ g_list_free (postlist);
+ }
/* I'm sensing a lack of love, er, I mean recipients. */
if (num == 0 && num_post == 0) {
@@ -360,6 +414,15 @@ composer_get_message (EMsgComposer *composer, gboolean save_html_object_data)
goto finished;
}
+ if (invalid_addrs) {
+ if (e_error_run ((GtkWindow *)composer, strstr (invalid_addrs->str, ", ") ? "mail:ask-send-invalid-recip-multi" : "mail:ask-send-invalid-recip-one", invalid_addrs->str, NULL) == GTK_RESPONSE_CANCEL) {
+ g_string_free (invalid_addrs, TRUE);
+ goto finished;
+ }
+
+ g_string_free (invalid_addrs, TRUE);
+ }
+
if (num > 0 && (num == num_bcc || shown == 0)) {
/* this means that the only recipients are Bcc's */
if (!ask_confirm_for_only_bcc (composer, shown == 0))
diff --git a/mail/mail.error.xml b/mail/mail.error.xml
index 62c8b53da3..6f7b62b615 100644
--- a/mail/mail.error.xml
+++ b/mail/mail.error.xml
@@ -15,8 +15,8 @@
<_primary>Are you sure you want to send a message in HTML format?</_primary>
<_secondary xml:space="preserve">Please make sure the following recipients are willing and able to receive HTML email:
{0}</_secondary>
- <button _label="_Send" response="GTK_RESPONSE_YES"/>
<button stock="gtk-cancel" response="GTK_RESPONSE_CANCEL"/>
+ <button _label="_Send" response="GTK_RESPONSE_YES"/>
</error>
<error id="ask-send-no-subject" type="question" default="GTK_RESPONSE_YES">
@@ -42,6 +42,22 @@ Many email systems add an Apparently-To header to messages that only have BCC re
<button _label="_Send" response="GTK_RESPONSE_YES"/>
</error>
+ <error id="ask-send-invalid-recip-one" type="question" default="GTK_RESPONSE_YES">
+ <_primary>Are you sure you want to send a message with invalid address?</_primary>
+ <_secondary xml:space="preserve">The following recipient was not recognized as a valid mail address:
+{0}</_secondary>
+ <button stock="gtk-cancel" response="GTK_RESPONSE_CANCEL"/>
+ <button _label="_Send" response="GTK_RESPONSE_YES"/>
+ </error>
+
+ <error id="ask-send-invalid-recip-multi" type="question" default="GTK_RESPONSE_YES">
+ <_primary>Are you sure you want to send a message with invalid addresses?</_primary>
+ <_secondary xml:space="preserve">The following recipients were not recognized as valid mail addresses:
+{0}</_secondary>
+ <button stock="gtk-cancel" response="GTK_RESPONSE_CANCEL"/>
+ <button _label="_Send" response="GTK_RESPONSE_YES"/>
+ </error>
+
<error id="send-no-recipients" type="warning">
<_primary>This message cannot be sent because you have not specified any recipients</_primary>
<_secondary xml:space="preserve">Please enter a valid email address in the To: field. You can search for email addresses by clicking on the To: button next to the entry box.</_secondary>