static void filter_recipients (CamelMimeMessage *message, CamelAddress *recipients, GHashTable *recip_to, GHashTable *recip_cc, GHashTable *recip_bcc) { CamelInternetAddress *addresses, *mime_cc, *mime_bcc; gint ii, len; g_return_if_fail (message != NULL); g_return_if_fail (recipients != NULL); g_return_if_fail (CAMEL_IS_INTERNET_ADDRESS (recipients)); g_return_if_fail (recip_to != NULL); g_return_if_fail (recip_cc != NULL); g_return_if_fail (recip_bcc != NULL); mime_cc = camel_mime_message_get_recipients (message, CAMEL_RECIPIENT_TYPE_CC); mime_bcc = camel_mime_message_get_recipients (message, CAMEL_RECIPIENT_TYPE_BCC); addresses = CAMEL_INTERNET_ADDRESS (recipients); len = camel_address_length (recipients); for (ii = 0; ii < len; ii++) { const gchar *name = NULL, *email = NULL; if (!camel_internet_address_get (addresses, ii, &name, &email) || !email) continue; if (mime_bcc && camel_internet_address_find_address (mime_bcc, email, NULL) != -1) { g_hash_table_insert (recip_bcc, (gpointer) email, GINT_TO_POINTER (1)); } else if (mime_cc && camel_internet_address_find_address (mime_cc, email, NULL) != -1) { g_hash_table_insert (recip_cc, (gpointer) email, GINT_TO_POINTER (1)); } else { g_hash_table_insert (recip_to, (gpointer) email, GINT_TO_POINTER (1)); } } }
static gboolean mbox_supported (EImport *ei, EImportTarget *target, EImportImporter *im) { gchar signature[1024]; gboolean ret = FALSE; gint fd, n; EImportTargetURI *s; gchar *filename; if (target->type != E_IMPORT_TARGET_URI) return FALSE; s = (EImportTargetURI *) target; if (s->uri_src == NULL) return TRUE; if (strncmp (s->uri_src, "file:///", strlen ("file:///")) != 0) return FALSE; filename = g_filename_from_uri (s->uri_src, NULL, NULL); fd = g_open (filename, O_RDONLY, 0); if (fd != -1) { n = read (fd, signature, 1024); ret = n >= 5 && memcmp (signature, "From ", 5) == 0; close (fd); /* An artificial number, at least 256 bytes message to be able to try to import it as an MBOX */ if (!ret && n >= 256) { gint ii; ret = (signature[0] >= 'a' && signature[0] <= 'z') || (signature[0] >= 'A' && signature[0] <= 'Z'); for (ii = 0; ii < n && ret; ii++) { ret = signature[ii] == '-' || signature[ii] == ' ' || signature[ii] == '\t' || (signature[ii] >= 'a' && signature[ii] <= 'z') || (signature[ii] >= 'A' && signature[ii] <= 'Z') || (signature[ii] >= '0' && signature[ii] <= '9'); } /* It's probably a header name which starts with ASCII letter and contains only [a..z][A..Z][\t, ,-] and the read stopped on ':'. */ if (ii > 0 && ii < n && !ret && signature[ii - 1] == ':') { CamelStream *stream; stream = camel_stream_fs_new_with_name (filename, O_RDONLY, 0, NULL); if (stream) { CamelMimeMessage *msg; msg = camel_mime_message_new (); /* Check whether the message can be parsed and whether it contains any mandatory fields. */ ret = camel_data_wrapper_construct_from_stream_sync ((CamelDataWrapper *) msg, stream, NULL, NULL) && camel_mime_message_get_message_id (msg) && camel_mime_message_get_subject (msg) && camel_mime_message_get_from (msg) && (camel_mime_message_get_recipients (msg, CAMEL_RECIPIENT_TYPE_TO) || camel_mime_message_get_recipients (msg, CAMEL_RECIPIENT_TYPE_RESENT_TO)); g_object_unref (msg); g_object_unref (stream); } } } } g_free (filename); return ret; }
ESource * em_utils_guess_mail_account_with_recipients_and_sort (ESourceRegistry *registry, CamelMimeMessage *message, CamelFolder *folder, const gchar *message_uid, EMailUtilsSourtSourcesFunc sort_func, gpointer sort_func_data) { ESource *source = NULL; GHashTable *recipients; CamelInternetAddress *addr; GList *list, *iter; const gchar *extension_name; const gchar *type; const gchar *key; /* This policy is subject to debate and tweaking, * but please also document the rational here. */ g_return_val_if_fail (E_IS_SOURCE_REGISTRY (registry), NULL); g_return_val_if_fail (CAMEL_IS_MIME_MESSAGE (message), NULL); /* Build a set of email addresses in which to test for membership. * Only the keys matter here; the values just need to be non-NULL. */ recipients = g_hash_table_new (g_str_hash, g_str_equal); type = CAMEL_RECIPIENT_TYPE_TO; addr = camel_mime_message_get_recipients (message, type); if (addr != NULL) { gint index = 0; while (camel_internet_address_get (addr, index++, NULL, &key)) g_hash_table_add (recipients, (gpointer) key); } type = CAMEL_RECIPIENT_TYPE_CC; addr = camel_mime_message_get_recipients (message, type); if (addr != NULL) { gint index = 0; while (camel_internet_address_get (addr, index++, NULL, &key)) g_hash_table_add (recipients, (gpointer) key); } /* First Preference: We were given a folder that maps to an * enabled mail account, and that account's address appears * in the list of To: or Cc: recipients. */ if (folder != NULL) source = guess_mail_account_from_folder ( registry, folder, message_uid); if (source == NULL) goto second_preference; if (mail_account_in_recipients (registry, source, recipients)) goto exit; second_preference: /* Second Preference: Choose any enabled mail account whose * address appears in the list to To: or Cc: recipients. */ if (source != NULL) { g_object_unref (source); source = NULL; } extension_name = E_SOURCE_EXTENSION_MAIL_ACCOUNT; list = e_source_registry_list_sources (registry, extension_name); if (sort_func) sort_func (&list, sort_func_data); for (iter = list; iter != NULL; iter = g_list_next (iter)) { ESource *temp = E_SOURCE (iter->data); if (e_source_registry_check_enabled (registry, temp) && mail_account_in_recipients (registry, temp, recipients)) { source = g_object_ref (temp); break; } } g_list_free_full (list, (GDestroyNotify) g_object_unref); if (source != NULL) goto exit; /* Last Preference: Defer to em_utils_guess_mail_account(). */ source = em_utils_guess_mail_account ( registry, message, folder, message_uid); exit: g_hash_table_destroy (recipients); return source; }
void e_mail_session_send_to (EMailSession *session, CamelMimeMessage *message, gint io_priority, GCancellable *cancellable, CamelFilterGetFolderFunc get_folder_func, gpointer get_folder_data, GAsyncReadyCallback callback, gpointer user_data) { GSimpleAsyncResult *simple; AsyncContext *context; CamelAddress *from; CamelAddress *recipients; CamelMedium *medium; CamelMessageInfo *info; CamelService *transport; GPtrArray *post_to_uris; struct _camel_header_raw *xev; struct _camel_header_raw *header; const gchar *resent_from; GError *error = NULL; g_return_if_fail (E_IS_MAIL_SESSION (session)); g_return_if_fail (CAMEL_IS_MIME_MESSAGE (message)); medium = CAMEL_MEDIUM (message); camel_medium_set_header (medium, "X-Mailer", X_MAILER); /* Do this before removing "X-Evolution" headers. */ transport = e_mail_session_ref_transport_for_message ( session, message); xev = mail_tool_remove_xevolution_headers (message); /* Extract directives from X-Evolution headers. */ post_to_uris = g_ptr_array_new (); for (header = xev; header != NULL; header = header->next) { gchar *folder_uri; if (g_strcmp0 (header->name, "X-Evolution-PostTo") != 0) continue; folder_uri = g_strstrip (g_strdup (header->value)); g_ptr_array_add (post_to_uris, folder_uri); } /* Collect sender and recipients from headers. */ from = (CamelAddress *) camel_internet_address_new (); recipients = (CamelAddress *) camel_internet_address_new (); resent_from = camel_medium_get_header (medium, "Resent-From"); if (resent_from != NULL) { const CamelInternetAddress *addr; const gchar *type; camel_address_decode (from, resent_from); type = CAMEL_RECIPIENT_TYPE_RESENT_TO; addr = camel_mime_message_get_recipients (message, type); camel_address_cat (recipients, CAMEL_ADDRESS (addr)); type = CAMEL_RECIPIENT_TYPE_RESENT_CC; addr = camel_mime_message_get_recipients (message, type); camel_address_cat (recipients, CAMEL_ADDRESS (addr)); type = CAMEL_RECIPIENT_TYPE_RESENT_BCC; addr = camel_mime_message_get_recipients (message, type); camel_address_cat (recipients, CAMEL_ADDRESS (addr)); } else { const CamelInternetAddress *addr; const gchar *type; addr = camel_mime_message_get_from (message); camel_address_copy (from, CAMEL_ADDRESS (addr)); type = CAMEL_RECIPIENT_TYPE_TO; addr = camel_mime_message_get_recipients (message, type); camel_address_cat (recipients, CAMEL_ADDRESS (addr)); type = CAMEL_RECIPIENT_TYPE_CC; addr = camel_mime_message_get_recipients (message, type); camel_address_cat (recipients, CAMEL_ADDRESS (addr)); type = CAMEL_RECIPIENT_TYPE_BCC; addr = camel_mime_message_get_recipients (message, type); camel_address_cat (recipients, CAMEL_ADDRESS (addr)); } /* Miscellaneous preparations. */ info = camel_message_info_new_from_header ( NULL, CAMEL_MIME_PART (message)->headers); ((CamelMessageInfoBase *) info)->size = get_message_size (message, cancellable); camel_message_info_set_flags (info, CAMEL_MESSAGE_SEEN, ~0); /* expand, or remove empty, group addresses */ em_utils_expand_groups (CAMEL_INTERNET_ADDRESS (recipients)); /* The rest of the processing happens in a thread. */ context = g_slice_new0 (AsyncContext); context->message = g_object_ref (message); context->io_priority = io_priority; context->from = from; context->recipients = recipients; context->info = info; context->xev = xev; context->post_to_uris = post_to_uris; context->transport = transport; if (G_IS_CANCELLABLE (cancellable)) context->cancellable = g_object_ref (cancellable); /* Failure here emits a runtime warning but is non-fatal. */ context->driver = camel_session_get_filter_driver ( CAMEL_SESSION (session), E_FILTER_SOURCE_OUTGOING, &error); if (context->driver != NULL && get_folder_func) camel_filter_driver_set_folder_func ( context->driver, get_folder_func, get_folder_data); if (error != NULL) { g_warn_if_fail (context->driver == NULL); g_warning ("%s", error->message); g_error_free (error); } /* This gets popped in async_context_free(). */ camel_operation_push_message ( context->cancellable, _("Sending message")); simple = g_simple_async_result_new ( G_OBJECT (session), callback, user_data, e_mail_session_send_to); g_simple_async_result_set_check_cancellable (simple, cancellable); g_simple_async_result_set_op_res_gpointer ( simple, context, (GDestroyNotify) async_context_free); g_simple_async_result_run_in_thread ( simple, (GSimpleAsyncThreadFunc) mail_session_send_to_thread, context->io_priority, context->cancellable); g_object_unref (simple); }
void com_irontec_evosugar(void *ep, EMPopupTargetSelect *t) { CamelException ex = {0}; gchar *folder_name = camel_folder_get_name(t->folder); gboolean folder_is_sent = FALSE; BREAKPOINT; gui.gtkBuilder = gtk_builder_new(); gtk_builder_set_translation_domain(gui.gtkBuilder, GETTEXT_PACKAGE); gtk_builder_add_from_file(gui.gtkBuilder, g_build_filename(PLUGIN_INSTALL_DIR, UI_FILE, NULL), NULL); gui.entry_search = GTK_WIDGET(gtk_builder_get_object(gui.gtkBuilder, "entrySearch")); gui.button_search = GTK_WIDGET(gtk_builder_get_object(gui.gtkBuilder, "buttonSearch")); gui.radio_button_from = GTK_WIDGET(gtk_builder_get_object(gui.gtkBuilder, "radiobuttonFrom")); gui.radio_button_to = GTK_WIDGET(gtk_builder_get_object(gui.gtkBuilder, "radiobuttonTo")); gui.button_submit = GTK_WIDGET(gtk_builder_get_object(gui.gtkBuilder, "buttonAddToSugarCRM")); gui.entry_subject_edit = GTK_WIDGET(gtk_builder_get_object(gui.gtkBuilder, "entryEditSubject")); BREAKPOINT; g_signal_connect(gui.button_search, "clicked", G_CALLBACK(on_button_search_clicked), GTK_ENTRY(gui.entry_search)); g_signal_connect(gui.button_submit, "clicked", G_CALLBACK(on_button_AddToSugarCRM_clicked), NULL); scrm_session.id = scrm_login(gconf_get_username(), gconf_get_password(), gconf_get_server()); if ((g_strcmp0(folder_name, "Sent") == 0) || (g_strcmp0(folder_name, _("Sent")) == 0) ) { folder_is_sent = TRUE; } if (scrm_session.id == NULL || g_strcmp0(scrm_session.id, "-1") == 0) { gui_show_message(_("SugarCRM"), _("Unable to connect: check your connection and settings please.")); } else { BREAKPOINT; msg = camel_folder_get_message(t->folder, t->uids->pdata[0], &ex); util_get_msg_body(msg, &msg_body); if (msg == NULL) { camel_exception_clear(&ex); return; } BREAKPOINT; subject = camel_mime_message_get_subject(msg); gtk_entry_set_text(gui.entry_subject_edit, subject); gui.body_text_view = gtk_builder_get_object(gui.gtkBuilder, "bodyTextView"); model.body_text_buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(gui.body_text_view)); gtk_text_buffer_set_text(model.body_text_buffer, msg_body, -1); from = camel_mime_message_get_from(msg); to = camel_mime_message_get_recipients(msg, CAMEL_RECIPIENT_TYPE_TO); BREAKPOINT; msg_date = camel_mime_message_get_date(msg, NULL); camel_internet_address_get(from, 0, &from_name, &from_addr); camel_internet_address_get(to, 0, &to_name, &to_addr); g_signal_connect(gui.radio_button_from, "pressed", G_CALLBACK(on_radio_group_search_changed), from_addr); gchar *to_search = to_addr; g_signal_connect(gui.radio_button_to, "pressed", G_CALLBACK(on_radio_group_search_changed), to_search); if (folder_is_sent) { gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(gui.radio_button_to),TRUE); } BREAKPOINT; GtkWidget *content_box = GTK_WIDGET(gtk_builder_get_object(gui.gtkBuilder, "vboxContents")); GtkWidget *frame_attach = GTK_WIDGET(gtk_builder_get_object(gui.gtkBuilder, "frameAttach")); if (folder_is_sent) { gtk_entry_set_text(gui.entry_search, to_addr); } else { gtk_entry_set_text(gui.entry_search, from_addr); } GtkScrolledWindow *scrolledwindow = GTK_SCROLLED_WINDOW(gtk_scrolled_window_new(NULL, NULL)); gtk_scrolled_window_set_policy(scrolledwindow, GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); GtkScrolledWindow *scrolledwindow2 = GTK_SCROLLED_WINDOW(gtk_scrolled_window_new(NULL, NULL)); gtk_scrolled_window_set_policy(scrolledwindow2, GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); BREAKPOINT; gtk_container_add(GTK_CONTAINER(content_box), scrolledwindow); gtk_container_add(GTK_CONTAINER(frame_attach), scrolledwindow2); BREAKPOINT; gui.treeview_search = gtk_tree_view_new(); gui.treeview_attach = gtk_tree_view_new(); add_columns_search(GTK_TREE_VIEW(gui.treeview_search)); add_columns_attachment(GTK_TREE_VIEW(gui.treeview_attach)); model.model_attach = util_get_msg_attachments(msg); //gtk_tree_view_set_model (GTK_TREE_VIEW (treeview), model_search); BREAKPOINT; //g_object_unref (G_OBJECT (model_search)); gtk_builder_connect_signals(gui.gtkBuilder, NULL); gtk_tree_view_set_model(GTK_TREE_VIEW(gui.treeview_attach), model.model_attach); gtk_container_add(scrolledwindow, gui.treeview_search); gtk_container_add(scrolledwindow2, gui.treeview_attach); gui.mainwin = GTK_WIDGET(gtk_builder_get_object (gui.gtkBuilder, "addToSugarCRMwindow")); /* * Show the application window */ gtk_widget_show_all(gui.mainwin); //trigger on_button_search_clicked(NULL, gui.entry_search); if (DEBUG_ON) { //g_mem_profile (); } } // end-else comprobar conexion }
void e_mail_session_send_to (EMailSession *session, CamelMimeMessage *message, gint io_priority, GCancellable *cancellable, CamelFilterGetFolderFunc get_folder_func, gpointer get_folder_data, GAsyncReadyCallback callback, gpointer user_data) { GSimpleAsyncResult *simple; AsyncContext *context; CamelAddress *from; CamelAddress *recipients; CamelMedium *medium; CamelMessageInfo *info; EAccount *account = NULL; GPtrArray *post_to_uris; struct _camel_header_raw *xev; struct _camel_header_raw *header; const gchar *string; const gchar *resent_from; gchar *transport_uid = NULL; gchar *sent_folder_uri = NULL; GError *error = NULL; g_return_if_fail (E_IS_MAIL_SESSION (session)); g_return_if_fail (CAMEL_IS_MIME_MESSAGE (message)); medium = CAMEL_MEDIUM (message); camel_medium_set_header (medium, "X-Mailer", X_MAILER); xev = mail_tool_remove_xevolution_headers (message); /* Extract directives from X-Evolution headers. */ string = camel_header_raw_find (&xev, "X-Evolution-Account", NULL); if (string != NULL) { gchar *account_uid; account_uid = g_strstrip (g_strdup (string)); account = e_get_account_by_uid (account_uid); g_free (account_uid); } if (account != NULL) { if (account->transport != NULL) { /* XXX Transport UIDs are kludgy right now. We * use the EAccount's regular UID and tack on * "-transport". Will be better soon. */ transport_uid = g_strconcat ( account->uid, "-transport", NULL); /* to reprompt password on sending if needed */ account->transport->get_password_canceled = FALSE; } sent_folder_uri = g_strdup (account->sent_folder_uri); } string = camel_header_raw_find (&xev, "X-Evolution-Fcc", NULL); if (sent_folder_uri == NULL && string != NULL) sent_folder_uri = g_strstrip (g_strdup (string)); string = camel_header_raw_find (&xev, "X-Evolution-Transport", NULL); if (transport_uid == NULL && string != NULL) transport_uid = g_strstrip (g_strdup (string)); post_to_uris = g_ptr_array_new (); for (header = xev; header != NULL; header = header->next) { gchar *folder_uri; if (g_strcmp0 (header->name, "X-Evolution-PostTo") != 0) continue; folder_uri = g_strstrip (g_strdup (header->value)); g_ptr_array_add (post_to_uris, folder_uri); } /* Collect sender and recipients from headers. */ from = (CamelAddress *) camel_internet_address_new (); recipients = (CamelAddress *) camel_internet_address_new (); resent_from = camel_medium_get_header (medium, "Resent-From"); if (resent_from != NULL) { const CamelInternetAddress *addr; const gchar *type; camel_address_decode (from, resent_from); type = CAMEL_RECIPIENT_TYPE_RESENT_TO; addr = camel_mime_message_get_recipients (message, type); camel_address_cat (recipients, CAMEL_ADDRESS (addr)); type = CAMEL_RECIPIENT_TYPE_RESENT_CC; addr = camel_mime_message_get_recipients (message, type); camel_address_cat (recipients, CAMEL_ADDRESS (addr)); type = CAMEL_RECIPIENT_TYPE_RESENT_BCC; addr = camel_mime_message_get_recipients (message, type); camel_address_cat (recipients, CAMEL_ADDRESS (addr)); } else { const CamelInternetAddress *addr; const gchar *type; addr = camel_mime_message_get_from (message); camel_address_copy (from, CAMEL_ADDRESS (addr)); type = CAMEL_RECIPIENT_TYPE_TO; addr = camel_mime_message_get_recipients (message, type); camel_address_cat (recipients, CAMEL_ADDRESS (addr)); type = CAMEL_RECIPIENT_TYPE_CC; addr = camel_mime_message_get_recipients (message, type); camel_address_cat (recipients, CAMEL_ADDRESS (addr)); type = CAMEL_RECIPIENT_TYPE_BCC; addr = camel_mime_message_get_recipients (message, type); camel_address_cat (recipients, CAMEL_ADDRESS (addr)); } /* Miscellaneous preparations. */ info = camel_message_info_new (NULL); camel_message_info_set_flags (info, CAMEL_MESSAGE_SEEN, ~0); /* The rest of the processing happens in a thread. */ context = g_slice_new0 (AsyncContext); context->message = g_object_ref (message); context->io_priority = io_priority; context->from = from; context->recipients = recipients; context->message = g_object_ref (message); context->info = info; context->xev = xev; context->post_to_uris = post_to_uris; context->transport_uid = transport_uid; context->sent_folder_uri = sent_folder_uri; if (G_IS_CANCELLABLE (cancellable)) context->cancellable = g_object_ref (cancellable); /* Failure here emits a runtime warning but is non-fatal. */ context->driver = camel_session_get_filter_driver ( CAMEL_SESSION (session), E_FILTER_SOURCE_OUTGOING, &error); if (context->driver != NULL && get_folder_func) camel_filter_driver_set_folder_func ( context->driver, get_folder_func, get_folder_data); if (error != NULL) { g_warn_if_fail (context->driver == NULL); g_warning ("%s", error->message); g_error_free (error); } /* This gets popped in async_context_free(). */ camel_operation_push_message ( context->cancellable, _("Sending message")); simple = g_simple_async_result_new ( G_OBJECT (session), callback, user_data, e_mail_session_send_to); g_simple_async_result_set_op_res_gpointer ( simple, context, (GDestroyNotify) async_context_free); g_simple_async_result_run_in_thread ( simple, (GSimpleAsyncThreadFunc) mail_session_send_to_thread, context->io_priority, context->cancellable); g_object_unref (simple); }
static void set_attendees (ECalComponent *comp, CamelMimeMessage *message, const gchar *organizer) { GSList *attendees = NULL, *to_free = NULL; ECalComponentAttendee *ca; CamelInternetAddress *from = NULL, *to, *cc, *bcc, *arr[4]; gint len, i, j; if (message->reply_to) from = message->reply_to; else if (message->from) from = message->from; to = camel_mime_message_get_recipients (message, CAMEL_RECIPIENT_TYPE_TO); cc = camel_mime_message_get_recipients (message, CAMEL_RECIPIENT_TYPE_CC); bcc = camel_mime_message_get_recipients (message, CAMEL_RECIPIENT_TYPE_BCC); arr[0] = from; arr[1] = to; arr[2] = cc; arr[3] = bcc; for (j = 0; j < 4; j++) { if (!arr[j]) continue; len = CAMEL_ADDRESS (arr[j])->addresses->len; for (i = 0; i < len; i++) { const gchar *name, *addr; if (camel_internet_address_get (arr[j], i, &name, &addr)) { gchar *temp; temp = g_strconcat ("mailto:", addr, NULL); if (organizer && g_ascii_strcasecmp (temp, organizer) == 0) { /* do not add organizer twice */ g_free (temp); continue; } ca = g_new0 (ECalComponentAttendee, 1); ca->value = temp; ca->cn = name; ca->cutype = ICAL_CUTYPE_INDIVIDUAL; ca->status = ICAL_PARTSTAT_NEEDSACTION; if (j == 0) { /* From */ ca->role = ICAL_ROLE_CHAIR; } else if (j == 2) { /* BCC */ ca->role = ICAL_ROLE_OPTPARTICIPANT; } else { /* all other */ ca->role = ICAL_ROLE_REQPARTICIPANT; } to_free = g_slist_prepend (to_free, temp); attendees = g_slist_append (attendees, ca); } } } e_cal_component_set_attendee_list (comp, attendees); g_slist_foreach (attendees, (GFunc) g_free, NULL); g_slist_foreach (to_free, (GFunc) g_free, NULL); g_slist_free (to_free); g_slist_free (attendees); }
static void rule_from_message (EFilterRule *rule, ERuleContext *context, CamelMimeMessage *msg, gint flags) { CamelInternetAddress *addr; rule->grouping = E_FILTER_GROUP_ANY; if (flags & AUTO_SUBJECT) { const gchar *subject = msg->subject ? msg->subject : ""; gchar *namestr; rule_match_subject (context, rule, subject); namestr = g_strdup_printf (_("Subject is %s"), strip_re (subject)); e_filter_rule_set_name (rule, namestr); g_free (namestr); } /* should parse the from address into an internet address? */ if (flags & AUTO_FROM) { CamelInternetAddress *from; gint i; const gchar *name, *address; gchar *namestr; from = camel_mime_message_get_from (msg); for (i = 0; from && camel_internet_address_get ( from, i, &name, &address); i++) { rule_add_sender (context, rule, address); if (name == NULL || name[0] == '\0') name = address; namestr = g_strdup_printf(_("Mail from %s"), name); e_filter_rule_set_name (rule, namestr); g_free (namestr); } } if (flags & AUTO_TO) { addr = (CamelInternetAddress *) camel_mime_message_get_recipients ( msg, CAMEL_RECIPIENT_TYPE_TO); if (addr) rule_match_recipients (context, rule, addr); addr = (CamelInternetAddress *) camel_mime_message_get_recipients ( msg, CAMEL_RECIPIENT_TYPE_CC); if (addr) rule_match_recipients (context, rule, addr); } if (flags & AUTO_MLIST) { gchar *name, *mlist; mlist = camel_header_raw_check_mailing_list ( &((CamelMimePart *) msg)->headers); if (mlist) { rule_match_mlist (context, rule, mlist); name = g_strdup_printf (_("%s mailing list"), mlist); e_filter_rule_set_name (rule, name); g_free (name); } g_free (mlist); } }