[evolution-data-server] I#372 - SMTP: Add option to not re-encode message on upload
- From: Milan Crha <mcrha src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [evolution-data-server] I#372 - SMTP: Add option to not re-encode message on upload
- Date: Mon, 24 Jan 2022 17:08:46 +0000 (UTC)
commit b7bbd30a195b105d0d56ca6680e1065863bcad46
Author: Milan Crha <mcrha redhat com>
Date: Mon Jan 24 18:07:23 2022 +0100
I#372 - SMTP: Add option to not re-encode message on upload
Closes https://gitlab.gnome.org/GNOME/evolution-data-server/-/issues/372
src/camel/providers/smtp/camel-smtp-provider.c | 11 ++++-
src/camel/providers/smtp/camel-smtp-settings.c | 64 ++++++++++++++++++++++---
src/camel/providers/smtp/camel-smtp-settings.h | 6 +++
src/camel/providers/smtp/camel-smtp-transport.c | 29 +++++++----
4 files changed, 92 insertions(+), 18 deletions(-)
---
diff --git a/src/camel/providers/smtp/camel-smtp-provider.c b/src/camel/providers/smtp/camel-smtp-provider.c
index c7b667cd2..f21b00830 100644
--- a/src/camel/providers/smtp/camel-smtp-provider.c
+++ b/src/camel/providers/smtp/camel-smtp-provider.c
@@ -33,6 +33,15 @@
static guint smtp_url_hash (gconstpointer key);
static gint smtp_url_equal (gconstpointer a, gconstpointer b);
+CamelProviderConfEntry smtp_conf_entries[] = {
+ { CAMEL_PROVIDER_CONF_SECTION_START, "smtpsection", NULL,
+ N_("Send Options") },
+ { CAMEL_PROVIDER_CONF_CHECKBOX, "reencode-data", NULL,
+ N_("_Re-encode message before send"), "0" },
+ { CAMEL_PROVIDER_CONF_SECTION_END },
+ { CAMEL_PROVIDER_CONF_END }
+};
+
CamelProviderPortEntry smtp_port_entries[] = {
{ 25, N_("Default SMTP port"), FALSE },
{ 465, N_("SMTP over TLS"), TRUE },
@@ -53,7 +62,7 @@ static CamelProvider smtp_provider = {
CAMEL_URL_NEED_HOST | CAMEL_URL_ALLOW_AUTH | CAMEL_URL_ALLOW_USER,
- NULL,
+ smtp_conf_entries,
smtp_port_entries,
diff --git a/src/camel/providers/smtp/camel-smtp-settings.c b/src/camel/providers/smtp/camel-smtp-settings.c
index c314dfebb..644ae7d97 100644
--- a/src/camel/providers/smtp/camel-smtp-settings.c
+++ b/src/camel/providers/smtp/camel-smtp-settings.c
@@ -17,21 +17,23 @@
#include "camel-smtp-settings.h"
+struct _CamelSmtpSettingsPrivate {
+ gboolean reencode_data;
+};
+
enum {
PROP_0,
PROP_AUTH_MECHANISM,
PROP_HOST,
PROP_PORT,
PROP_SECURITY_METHOD,
- PROP_USER
+ PROP_USER,
+ PROP_REENCODE_DATA
};
-G_DEFINE_TYPE_WITH_CODE (
- CamelSmtpSettings,
- camel_smtp_settings,
- CAMEL_TYPE_SETTINGS,
- G_IMPLEMENT_INTERFACE (
- CAMEL_TYPE_NETWORK_SETTINGS, NULL))
+G_DEFINE_TYPE_WITH_CODE (CamelSmtpSettings, camel_smtp_settings, CAMEL_TYPE_SETTINGS,
+ G_ADD_PRIVATE (CamelSmtpSettings)
+ G_IMPLEMENT_INTERFACE (CAMEL_TYPE_NETWORK_SETTINGS, NULL))
static void
smtp_settings_set_property (GObject *object,
@@ -69,6 +71,12 @@ smtp_settings_set_property (GObject *object,
CAMEL_NETWORK_SETTINGS (object),
g_value_get_string (value));
return;
+
+ case PROP_REENCODE_DATA:
+ camel_smtp_settings_set_reencode_data (
+ CAMEL_SMTP_SETTINGS (object),
+ g_value_get_boolean (value));
+ return;
}
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
@@ -115,6 +123,13 @@ smtp_settings_get_property (GObject *object,
camel_network_settings_dup_user (
CAMEL_NETWORK_SETTINGS (object)));
return;
+
+ case PROP_REENCODE_DATA:
+ g_value_set_boolean (
+ value,
+ camel_smtp_settings_get_reencode_data (
+ CAMEL_SMTP_SETTINGS (object)));
+ return;
}
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
@@ -158,10 +173,45 @@ camel_smtp_settings_class_init (CamelSmtpSettingsClass *class)
object_class,
PROP_USER,
"user");
+
+ g_object_class_install_property (
+ object_class,
+ PROP_REENCODE_DATA,
+ g_param_spec_boolean (
+ "reencode-data",
+ "Reencode Data",
+ "Whether to re-encode data on send",
+ FALSE,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT |
+ G_PARAM_EXPLICIT_NOTIFY |
+ G_PARAM_STATIC_STRINGS));
}
static void
camel_smtp_settings_init (CamelSmtpSettings *settings)
{
+ settings->priv = camel_smtp_settings_get_instance_private (settings);
}
+gboolean
+camel_smtp_settings_get_reencode_data (CamelSmtpSettings *settings)
+{
+ g_return_val_if_fail (CAMEL_IS_SMTP_SETTINGS (settings), FALSE);
+
+ return settings->priv->reencode_data;
+}
+
+void
+camel_smtp_settings_set_reencode_data (CamelSmtpSettings *settings,
+ gboolean reencode_data)
+{
+ g_return_if_fail (CAMEL_IS_SMTP_SETTINGS (settings));
+
+ if ((settings->priv->reencode_data ? 1 : 0) == (reencode_data ? 1 : 0))
+ return;
+
+ settings->priv->reencode_data = reencode_data;
+
+ g_object_notify (G_OBJECT (settings), "reencode-data");
+}
diff --git a/src/camel/providers/smtp/camel-smtp-settings.h b/src/camel/providers/smtp/camel-smtp-settings.h
index e2dd454fa..513e1deb1 100644
--- a/src/camel/providers/smtp/camel-smtp-settings.h
+++ b/src/camel/providers/smtp/camel-smtp-settings.h
@@ -59,6 +59,12 @@ struct _CamelSmtpSettingsClass {
GType camel_smtp_settings_get_type (void) G_GNUC_CONST;
+gboolean camel_smtp_settings_get_reencode_data
+ (CamelSmtpSettings *settings);
+void camel_smtp_settings_set_reencode_data
+ (CamelSmtpSettings *settings,
+ gboolean reencode_data);
+
G_END_DECLS
#endif /* CAMEL_SMTP_SETTINGS_H */
diff --git a/src/camel/providers/smtp/camel-smtp-transport.c b/src/camel/providers/smtp/camel-smtp-transport.c
index 0dba2bd19..f535ad66b 100644
--- a/src/camel/providers/smtp/camel-smtp-transport.c
+++ b/src/camel/providers/smtp/camel-smtp-transport.c
@@ -1745,26 +1745,35 @@ smtp_data (CamelSmtpTransport *transport,
GCancellable *cancellable,
GError **error)
{
+ CamelSettings *settings;
CamelNameValueArray *previous_headers;
const gchar *header_name = NULL, *header_value = NULL;
- CamelBestencEncoding enctype = CAMEL_BESTENC_8BIT;
CamelStream *filtered_stream;
gchar *cmdbuf, *respbuf = NULL;
CamelMimeFilter *filter;
gsize bytes_written;
+ gboolean reencode_data;
gint ret;
guint ii;
- /* If the server doesn't support 8BITMIME, set our required encoding to be 7bit */
- if (!(transport->flags & CAMEL_SMTP_TRANSPORT_8BITMIME))
- enctype = CAMEL_BESTENC_7BIT;
+ settings = camel_service_ref_settings (CAMEL_SERVICE (transport));
+ reencode_data = camel_smtp_settings_get_reencode_data (CAMEL_SMTP_SETTINGS (settings));
+ g_clear_object (&settings);
+
+ if (reencode_data) {
+ CamelBestencEncoding enctype = CAMEL_BESTENC_8BIT;
- /* FIXME: should we get the best charset too?? */
- /* Changes the encoding of all mime parts to fit within our required
- * encoding type and also force any text parts with long lines (longer
- * than 998 octets) to wrap by QP or base64 encoding them. */
- camel_mime_message_set_best_encoding (
- message, CAMEL_BESTENC_GET_ENCODING, enctype);
+ /* If the server doesn't support 8BITMIME, set our required encoding to be 7bit */
+ if (!(transport->flags & CAMEL_SMTP_TRANSPORT_8BITMIME))
+ enctype = CAMEL_BESTENC_7BIT;
+
+ /* FIXME: should we get the best charset too?? */
+ /* Changes the encoding of all mime parts to fit within our required
+ * encoding type and also force any text parts with long lines (longer
+ * than 998 octets) to wrap by QP or base64 encoding them. */
+ camel_mime_message_set_best_encoding (
+ message, CAMEL_BESTENC_GET_ENCODING, enctype);
+ }
cmdbuf = g_strdup ("DATA\r\n");
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]