/** * e_cal_backend_mail_account_get_default: * @registry: an #ESourceRegistry * @address: placeholder for default address * @name: placeholder for name * * Retrieve the default mail account as stored in Evolution configuration. * * Returns: TRUE if there is a default account, FALSE otherwise. */ gboolean e_cal_backend_mail_account_get_default (ESourceRegistry *registry, gchar **address, gchar **name) { ESource *source; ESourceMailIdentity *extension; const gchar *extension_name; g_return_val_if_fail (E_IS_SOURCE_REGISTRY (registry), FALSE); source = e_source_registry_ref_default_mail_identity (registry); if (source == NULL) return FALSE; extension_name = E_SOURCE_EXTENSION_MAIL_IDENTITY; extension = e_source_get_extension (source, extension_name); if (address != NULL) *address = e_source_mail_identity_dup_address (extension); if (name != NULL) *name = e_source_mail_identity_dup_name (extension); g_object_unref (source); return TRUE; }
static gchar * set_organizer (ECalComponent *comp, CamelMimeMessage *message, CamelFolder *folder, const gchar *message_uid) { EShell *shell; ESource *source = NULL; ESourceRegistry *registry; ESourceMailIdentity *extension; const gchar *extension_name; const gchar *address, *name; ECalComponentOrganizer organizer = {NULL, NULL, NULL, NULL}; gchar *mailto = NULL; gchar *identity_name = NULL, *identity_address = NULL; shell = e_shell_get_default (); registry = e_shell_get_registry (shell); source = em_utils_guess_mail_identity_with_recipients (registry, message, folder, message_uid, &identity_name, &identity_address); if (!source && folder) { CamelStore *store; store = camel_folder_get_parent_store (folder); source = em_utils_ref_mail_identity_for_store (registry, store); } if (source == NULL) source = e_source_registry_ref_default_mail_identity (registry); g_return_val_if_fail (source != NULL, NULL); extension_name = E_SOURCE_EXTENSION_MAIL_IDENTITY; extension = e_source_get_extension (source, extension_name); name = identity_name; if (!name || !*name) name = e_source_mail_identity_get_name (extension); address = identity_address; if (!address || !*address) { name = e_source_mail_identity_get_name (extension); address = e_source_mail_identity_get_address (extension); } if (address && *address) { mailto = g_strconcat ("mailto:", address, NULL); organizer.value = mailto; organizer.cn = name; e_cal_component_set_organizer (comp, &organizer); } g_object_unref (source); g_free (identity_name); g_free (identity_address); return mailto; }
/** * e_mail_session_ref_default_transport: * @session: an #EMailSession * * Returns the default transport #CamelService instance according to * #ESourceRegistry's #ESourceRegistry:default-mail-identity setting, * verifying first that the #ESourceMailSubmission:transport-uid named by * the #ESourceRegistry:default-mail-identity is indeed a mail transport, * and that the corresponding #ESource is enabled. If these checks fail, * the function returns %NULL. * * The returned #CamelService is referenced for thread-safety and must be * unreferenced with g_object_unref() when finished with it. * * Returns: a #CamelService, or %NULL **/ CamelService * e_mail_session_ref_default_transport (EMailSession *session) { ESource *source; ESourceRegistry *registry; CamelService *transport; g_return_val_if_fail (E_IS_MAIL_SESSION (session), NULL); registry = e_mail_session_get_registry (session); source = e_source_registry_ref_default_mail_identity (registry); transport = mail_session_ref_transport_for_identity (session, source); g_clear_object (&source); return transport; }
static gchar * set_organizer (ECalComponent *comp, CamelFolder *folder) { EShell *shell; ESource *source = NULL; ESourceRegistry *registry; ESourceMailIdentity *extension; const gchar *extension_name; const gchar *address, *name; ECalComponentOrganizer organizer = {NULL, NULL, NULL, NULL}; gchar *mailto = NULL; shell = e_shell_get_default (); registry = e_shell_get_registry (shell); if (folder != NULL) { CamelStore *store; store = camel_folder_get_parent_store (folder); source = em_utils_ref_mail_identity_for_store (registry, store); } if (source == NULL) source = e_source_registry_ref_default_mail_identity (registry); g_return_val_if_fail (source != NULL, NULL); extension_name = E_SOURCE_EXTENSION_MAIL_IDENTITY; extension = e_source_get_extension (source, extension_name); name = e_source_mail_identity_get_name (extension); address = e_source_mail_identity_get_address (extension); if (name != NULL && address != NULL) { mailto = g_strconcat ("mailto:", address, NULL); organizer.value = mailto; organizer.cn = name; e_cal_component_set_organizer (comp, &organizer); } g_object_unref (source); return mailto; }
/* Helper for e_mail_session_get_fcc_for_message_sync() */ static CamelFolder * mail_session_ref_fcc_from_default_identity (EMailSession *session, CamelMimeMessage *message, GCancellable *cancellable, GError **error) { ESource *source; ESourceRegistry *registry; CamelFolder *folder; registry = e_mail_session_get_registry (session); source = e_source_registry_ref_default_mail_identity (registry); /* This may return NULL without setting a GError. */ folder = mail_session_ref_fcc_from_identity ( session, source, message, cancellable, error); g_clear_object (&source); return folder; }
static CamelService * ref_default_transport (EMailSession *session) { ESource *source; CamelService *service; const gchar *extension_name; const gchar *uid; source = e_source_registry_ref_default_mail_identity (source_registry); if (source == NULL) return NULL; extension_name = E_SOURCE_EXTENSION_MAIL_SUBMISSION; if (e_source_has_extension (source, extension_name)) { ESourceMailSubmission *extension; gchar *uid; extension = e_source_get_extension (source, extension_name); uid = e_source_mail_submission_dup_transport_uid (extension); g_object_unref (source); source = e_source_registry_ref_source (source_registry, uid); g_free (uid); } else { g_object_unref (source); source = NULL; } if (source == NULL) return NULL; uid = e_source_get_uid (source); service = camel_session_ref_service (CAMEL_SESSION (session), uid); g_object_unref (source); return service; }
GCancellable * mail_send (EMailSession *session) { CamelFolder *local_outbox; CamelService *service; struct _send_info *info; struct _send_data *data; send_info_t type = SEND_INVALID; const gchar *transport_uid; ESource *account; const gchar *extension_name; account = e_source_registry_ref_default_mail_identity (source_registry); if (account == NULL) return NULL; extension_name = E_SOURCE_EXTENSION_MAIL_SUBMISSION; if (e_source_has_extension (account, extension_name)) { ESourceMailSubmission *extension; gchar *uid; extension = e_source_get_extension (account, extension_name); uid = e_source_mail_submission_dup_transport_uid (extension); g_object_unref (account); account = e_source_registry_ref_source (source_registry, uid); g_free (uid); } else { g_object_unref (account); account = NULL; } if (account == NULL) return NULL; transport_uid = e_source_get_uid (account); data = setup_send_data (session); info = g_hash_table_lookup (data->active, SEND_URI_KEY); if (info != NULL) { info->again++; d(printf("send of %s still in progress\n", transport_uid)); return info->cancellable; } service = camel_session_ref_service ( CAMEL_SESSION (session), transport_uid); if (!CAMEL_IS_TRANSPORT (service)) { return NULL; } d(printf("starting non-interactive send of '%s'\n", account->transport->url)); type = get_receive_type (service); if (type == SEND_INVALID) { return NULL; } info = g_malloc0 (sizeof (*info)); info->type = SEND_SEND; info->session = g_object_ref (session); info->service = g_object_ref (service); info->keep_on_server = FALSE; info->cancellable = camel_operation_new(); info->data = data; info->state = SEND_ACTIVE; info->timeout_id = 0; d(printf("Adding new info %p\n", info)); g_hash_table_insert (data->active, g_strdup(SEND_URI_KEY), info); /* todo, store the folder in info? */ local_outbox = e_mail_session_get_local_folder ( session, E_MAIL_LOCAL_FOLDER_OUTBOX); mail_send_queue ( session, local_outbox, CAMEL_TRANSPORT (service), E_FILTER_SOURCE_OUTGOING, info->cancellable, receive_get_folder, info, receive_status, info, send_done, info); return info->cancellable; }